Feature Comparison
ComponentsFeature Comparison
SectionsNew

Feature Comparison

Choose two options, put their details side by side, and focus on what makes them different.

USE IT FORProduct specificationsPlan comparisonService packages
React + CSS
Explore the full-width experienceOpen preview
folio®PROJECTS, NOTES, AND PEOPLE. TOGETHER.

YOUR TEAM. YOUR PACE.

One team. A shared space.

One shared home for your projects, notes, and next steps. Find the right amount of room for the way you work.

03 options. One that feels right.

Put the details side by side.

THE LINEUP
Independent compared with Studio
Feature

Independent

A focused space for your own practice.

$12/ person / month
A little more room

Studio

Bring the whole team into the picture.

$24/ person / month
Make room for the work
Active projects10 projectsUnlimited
File storageRoom for the details that make the difference.25 GB250 GB
Notes & documentsIncludedIncluded
Better, together
Client guests3 guests25 guests
Review & approvalNot includedIncluded
Peace of mind
Version history30 days1 year
Export your workIncludedIncluded
Single sign-onNot includedNot included
Meet IndependentMeet Studio

8 of 8 features shown Comparing Independent and Studio

FIND YOUR NEXT CHAPTER

independent

For your own practice.

Independent keeps project notes, files, and a small circle of collaborators together. Designed for freelancers and solo studios.

studio

For the work you share.

Studio gives your team room to collaborate with clients, review work, and revisit earlier decisions. Built for a growing creative practice.

collective

For the bigger picture.

Collective brings larger teams together with more storage, unlimited guests, and single sign-on. Built for a shared way of working.

Fictional workspace and example plan data. No signup or payment is collected.
Live component. Go ahead, interact.
01

Installation

Run this in your shadcn-configured React project. The component and stylesheet are added together.

TERMINAL
npx shadcn@latest add http://localhost:5173/r/feature-comparison.json

This command uses the current site address. For localhost, keep this preview running on the same computer. Files follow your configured components alias.

02

Usage

Import the component and make the details your own.

TypeScript
import { FeatureComparison } from '@/components/anticraft/FeatureComparison';

export function Example() {
  return <FeatureComparison
    title="Find your fit."
    description="Compare the details that matter to your team."
    products={[
      { id: 'solo', name: 'Solo', price: '$12', priceNote: '/ month', href: '/plans/solo' },
      { id: 'team', name: 'Team', price: '$24', priceNote: '/ month', badge: 'More room', href: '/plans/team' },
      { id: 'scale', name: 'Scale', price: '$40', priceNote: '/ month', href: '/plans/scale' },
    ]}
    features={[
      { id: 'projects', group: 'Workspace', label: 'Active projects', values: { solo: '10', team: 'Unlimited', scale: 'Unlimited' } },
      { id: 'export', group: 'Workspace', label: 'Export your work', values: { solo: true, team: true, scale: true } },
      { id: 'reviews', group: 'Collaboration', label: 'Client reviews', values: { solo: false, team: true, scale: true } },
    ]}
  />;
}
03

Props

PropTypeDefaultDescription
productsFeatureComparisonProduct[]RequiredAt least two options with unique id and name. Optional description, badge, price, priceNote, href, and actionLabel appear in each header. Prices are preformatted display data; this component does not calculate charges. With fewer than two options, it renders nothing.
featuresFeatureComparisonRow[]RequiredRows with unique id, label, optional description and group, and a values record keyed by product id. Values are strings, booleans or null. Booleans display Included / Not included, and null or a missing value displays Not specified. Keep values concise. Groups retain their first appearance order.
defaultProductIdsreadonly [string, string]First two productsInitial first and second option IDs. Options stay distinct. If props remove a selection, it safely falls back to available products without invoking a callback.
onSelectionChange(selection: FeatureComparisonSelection) => voidundefinedCalled only when a visitor selects another option. Receives {first,second}, the complete current product objects. Use a Client Component when passing a callback in Next.js. The initial mount, filter changes, and prop fallbacks do not invoke it.
title / description / eyebrowstring'Find your fit.' / undefined / 'A CLOSER LOOK'Heading, optional supporting introduction, and compact label. Newlines in the heading are preserved.
products[].href / actionLabelstringundefined / 'Explore ' + nameOptional real product, plan, or service destination. Links preserve native navigation, including modified clicks. Replace example routes with your own. Omitting href removes that option’s action.
classNamestring''Additional classes. Customize --ac-compare-paper, --ac-compare-ink, --ac-compare-muted, --ac-compare-line, --ac-compare-accent, and --ac-compare-focus on the root. The second option receives the accent surface. Maximum composition width is 1600px.
04

Motion & accessibility

Considered by default.

Native select controls choose two distinct options. The checkbox filters rows whose values differ (missing and null are equivalent); use consistent value types and formatting across products. All comparison information stays in a semantic table with named row and column headers; phone layouts put each feature label on its own line above two readable values. The result count is politely announced. Ordinary anchors open your supplied destinations. Reduced motion removes link transitions. The demo’s plan links lead to local explanatory sections; its example prices do not charge or collect anything.

Use semantic content and meaningful labels in your composition. Check contrast and keyboard behavior with your own styles and content.

05

Inspiration

Dedicated comparison sections informed the useful side-by-side structure. Anticraft’s original composition adds distinct option selectors, grouped specifications, a differences filter, and compact container styling.

Visit Shadcnblocks comparisons

The component source and demo artwork are original to Anticraft UI. The linked site is the design or content reference.