SaaS

Plan Comparison Table

A feature-by-feature comparison table for subscription plans, with sticky headers and differences-only filtering.

Overview

Plan Comparison Table presents every feature of every subscription plan in a structured, scannable grid. Features can be grouped into sections, anchor-linked to detailed documentation, and filtered to show only the differences between plans. The header row is sticky and carries a CTA per plan so the user can act without scrolling back to the top.

The component is composed from five primitives that you can use directly when you need finer control: PlanComparisonTableHeader, PlanComparisonTableSectionHeader, PlanComparisonTableRowHeader, and PlanComparisonTableRowValue.

Key Business & UX Benefits

  • A "show differences only" filter cuts the table down to the rows that drive the decision, which keeps prospects from drowning in shared features.
  • Sticky headers with a CTA per plan let prospects sign up the moment they spot the right tier, without scrolling back through dozens of rows.
  • Anchor-linked feature names give sales and marketing a place to deep-link into specific capabilities from external collateral, supporting outbound campaigns.
  • Composing the table from named primitives lets teams ship pricing experiments or vertical-specific layouts without forking the whole table.
Pro-Tip from Larry: Pair the comparison table with a PlanCardSlider near the top of the page. The cards give a quick-glance comparison; the table is for prospects who want to scan every feature.

Usage

LPlanComparisonTable

Feature List

  • Rows expose a hasDifference flag so a 'show differences only' filter can hide shared rows without rebuilding the dataset
  • Section objects carry a title, description, icon, and optional anchor so feature groups can be deep-linked from marketing pages
  • Each row supports sub-features rendered as boolean check icons per plan, perfect for nested capability matrices
  • Sticky header row keeps the per-plan ctaLink button reachable while scrolling long comparison lists
  • Row values can carry a linkText and linkHref so individual features open into documentation or sales pages
  • Composed from named primitives (Header, SectionHeader, RowHeader, RowValue) for teams that need to assemble custom layouts
  • highlight flag on a row value renders the title as rainbow gradient text to call out flagship capabilities

API Reference

LPlanComparisonTable

PropDefaultType
plansrequired
sectionsrequired
showChoosePlanboolean

LPlanComparisonTableHeader

PropDefaultType
plansrequired
showChoosePlanboolean
compareDifferencesboolean
activeMobilePlanstring
EventType
update:compareDifferences(event: "update:compareDifferences", value: boolean | undefined): void
update:activeMobilePlan(event: "update:activeMobilePlan", value: string | undefined): void

LPlanComparisonTableRowHeader

PropDefaultType
titlerequiredstring
descriptionrequiredstring

Rendered below title

hasDifferencerequiredboolean

Indicate that all values are the same for all plans. Used for comparing differences between plans.

titleHrefstring

If set, the whole cell is a link

subFeaturesstring[]

Each string is rendered as a single text line to indicate sub-features

valuesRecord<string, PlanComparisonTableRowValue>

LPlanComparisonTableRowValue

PropDefaultType
titlestring
descriptionstring
highlightboolean

Renders the title as rainbow text

linkTextstring
linkHrefstring
subFeaturesboolean[]

Each string is rendered as a single text line to indicate sub-features

LPlanComparisonTableSectionHeader

PropDefaultType
titlerequiredstring
descriptionrequiredstring
iconrequiredstring
anchorstring
rows
Copyright © 2026 Laioutr GmbH