Infinite Table vs TanStack Table

TanStack Table gives you table logic and leaves the UI to you. Infinite Table is a finished grid: virtualized, keyboard-navigable and themed, configured with props.

Facts last verified on November 11, 2026, with a source link for each one.

TL;DR

TanStack Table is a headless library. It computes sorting, filtering, grouping, selection and pagination, and you write every element, style, event handler and ARIA attribute. That is ideal for a table in your own design system, or a small table that must match your markup exactly. It is MIT-licensed, tiny, and has adapters for most frameworks.

Infinite Table ships the whole grid. Row and column virtualization, column resizing, reordering, pinning and menus, grouping, pivoting, editing, keyboard navigation and context menus work as soon as you render it. Building the same on top of TanStack Table and TanStack Virtual is a substantial project, and that code is then yours to maintain.

The trade-off: TanStack Table is free with no footer and gives total control. Infinite Table is free with a footer, or $395 per developer per year without it, and gives you the finished grid.

When to choose which

Choose TanStack Table if

  • You need full control over the markup, for example for a table component in your design system.
  • Your tables are small and simple, and a few kilobytes of logic is all you want to add.
  • You want an MIT license, with no footer and no license key.
  • You use Svelte, Solid, Angular, Lit or another framework Infinite Table doesn't support.
  • You've already built a mature grid UI on top of it.

Choose Infinite Table if

  • You want to ship a data grid, not build one: virtualization, resizing, pinning, menus and keyboard navigation are built in.
  • You need pivoting, which TanStack Table doesn't have, or lazy loading from a server.
  • You need cell editing or a context menu without writing them yourself.
  • You still want a declarative API, with columns, sorting, grouping and selection as controlled or uncontrolled props.

Features

22 of the 30 features below are built into Infinite Table, every one in the free package. TanStack Table has 0 built in, and 18 more partly or as headless logic, counting its most complete edition (TanStack Table). Each TanStack Table entry links to its documentation.

  • Built in
  • Partial / with limits
  • Logic only (headless)
  • Not available
  • Pro = needs that paid edition
Features of Infinite Table and TanStack Table, by edition
FeatureInfinite TableFree with footer · $395 per developer per yearTanStack TableMIT · Free
Rendering
Row virtualizationOnly the visible rows are rendered, out of the box.
Yessource
Logic onlyThrough the separate TanStack Virtual package.source
Column virtualizationOnly the visible columns are rendered, out of the box.
Yessource
Logic onlyThrough the separate TanStack Virtual package.source
Columns
Multi-column sortingBuilt-in sorting UI, including sorting by several columns.
Yessource
Logic onlysource
Column filtersBuilt-in filter UI: a filter row, header filters or a filter menu.
YesFilter row with operators, client-side or server-side.source
Logic onlyFilter logic and built-in filter functions; you build the filter UI.source
Column resizingUsers drag to resize columns.
Yessource
Logic onlysource
Column reorderingUsers drag and drop columns to reorder them.
Yessource
Logic onlyColumn order state; drag and drop is yours to build.source
Column pinningPin (freeze) columns to the left or right.
Yessource
Logic onlysource
Column groupsMulti-level, grouped column headers.
Yessource
Logic onlysource
Column menuA built-in column header menu (sort, hide, pin...).
Yessource
No
Grouping and analysis
Row groupingGroup rows by one or more columns, with expand and collapse.
Yessource
Logic onlysource
AggregationsAggregated values (sum, average...) for groups or totals.
Yessource
Logic onlysource
PivotingPivot rows into dynamically generated columns.
Yessource
No
Tree dataHierarchical (tree) rows.
Yessource
Logic onlySub-rows with expand state.source
Master-detailExpandable detail rows with custom content or a nested grid.
Yessource
Logic onlyExpanded-row state; you render the detail content.source
Server data
Lazy loadingLoad rows from a server in batches as the user scrolls.
Yessource
NoNot built in; the official example builds it with TanStack Virtual and your own data fetching.source
Server-side sort, filter and groupBuilt-in support for sorting, filtering and grouping on the server.
YesSorting, filtering, grouping and pivoting can all run on the server.source
Logic onlyManual modes let your server sort, filter, group and paginate.source
Pagination UIA built-in pager.
NoNo pager UI. Live pagination loads the next page as you scroll.source
Logic onlysource
Editing and interaction
Cell editingInline cell editing with built-in editors.
Yessource
NoNo editing feature: editable cells are application code.
Row selectionSelect rows, including checkbox selection.
Yessource
Logic onlysource
Cell selectionSelect multiple cells or ranges of cells.
Yessource
Logic onlyNew in v9.source
Keyboard navigationMove between cells with the keyboard.
Yessource
Logic onlyFocused-cell state and move APIs come with cell selection; you wire the keys.source
Context menuA built-in cell or row context menu.
Yessource
No
Row drag and dropReorder rows by dragging them.
No
NoThe official example reorders rows with the third-party dnd-kit.source
Export and charts
ClipboardCopy (and paste) cells, built in.
No
NoSelected cell values are available through the API; copying is yours to build.
CSV exportBuilt-in export to CSV.
No
No
Excel exportBuilt-in export to Excel (.xlsx).
No
No
Integrated chartsChart grid data from inside the grid.
NoCells can render any component, for example sparklines.source
No
Styling and accessibility
Theming with CSS variablesTheme the grid through CSS custom properties or design tokens.
Yessource
NoShips no styles: you style it with your own CSS or design system.
Documented accessibilityARIA roles and screen reader support, documented by the vendor.
NoKeyboard navigation is built in, but ARIA roles and screen reader support are not documented.
NoNo accessibility guide: you render the markup, so the ARIA roles are yours too.
Right-to-leftRight-to-left layout support.
No
Logic onlyLogical start/end pinning and an RTL resize mode; you set the direction on your markup.source

Side by side

Live side-by-side demo: coming soonThe same grouped, virtualized table built both ways. A large table with grouping, resizing and pinning: built with TanStack Table, TanStack Virtual and hand-written UI, next to Infinite Table.Until then, try the full Infinite Table demo or see the benchmark.

Licensing and pricing

List prices as published by each vendor, in US dollars. Follow the source links for the full terms.

Editions, licenses and prices
EditionLicenseList priceConditionsDeployment
Infinite TableCommercial (EULA)$395 per developer per yearVolume discounts: 5% from 3 developers, 10% from 5, 15% from 10. For 20 or more developers, email us.sourceEvery feature is free to use, in any product, as long as the "Powered by Infinite Table" footer stays visible. A license removes the footer and adds email support.Development licenses only: no deployment, application or SaaS licenses.
TanStack TableMITFreesourceMIT: free for any use, no license key.None (MIT).

Bundle size and dependencies

Every dependency is code you ship and a package you have to trust and keep updated. Infinite Table has none.

Bundle size and dependencies
PackageJS, min + gzipCSS, min + gzipRuntime dependenciesFrom other publishers
Infinite Table for React@infinite-table/infinite-react@10.1.4145 kB5.7 kB00
Infinite Table for Vue@infinite-table/infinite-vue@10.1.4126 kB5.4 kB00
TanStack Table@tanstack/react-table@9.3.19.9 kB–4
list@tanstack/react-store@0.11.2, @tanstack/store@0.11.2, @tanstack/table-core@9.3.1, use-sync-external-store@1.7.0
1
TanStack Table + TanStack Virtual@tanstack/react-table@9.3.1 + @tanstack/react-virtual@3.14.2620.2 kB–5
list@tanstack/react-store@0.11.2, @tanstack/store@0.11.2, @tanstack/table-core@9.3.1, @tanstack/virtual-core@3.19.11, use-sync-external-store@1.7.0
1

Measured on November 11, 2026 with the latest versions on npm. Runtime dependencies: every package that npm install adds besides the grid's own packages and the framework, including required peer dependencies. JS / CSS: esbuild 0.25.10 bundle of the minimal getting-started usage, minified, React or Vue left out, gzip level 9 (kB = 1,000 bytes). Fonts and images are not counted. Numbers include required peers such as a design system, so they are lower if your app already ships those. The measurement script is open source: run it to reproduce or update these numbers.

Framework support

Supported frameworks
FrameworkInfinite TablesourceTanStack Tablesource
ReactYesYes
VueYesYes
AngularNoYes
SvelteNoYes
SolidNoYes
PreactNoYes
LitNoYes
EmberNoYes
AlpineNoYes
JavaScriptNoYes
  • Infinite Table: React 18+ (@infinite-table/infinite-react) and Vue 3.4+ (@infinite-table/infinite-vue), same features and version.
  • TanStack Table: Official adapters for React, Preact, Octane, Vue, Solid, Svelte, Angular, Ember, Lit and Alpine, plus vanilla JavaScript through @tanstack/table-core. Svelte 3 and 4 need v8.

Key differences

Headless vs complete

With TanStack Table you render the <table> (or divs) yourself, call FlexRender for each header and cell, and style everything. Its v9 API makes every feature opt-in, so you only bundle the logic you use.

With Infinite Table you pass columns and data, and get a virtualized, themed grid. You still customize cells, headers, editors and filters with your own components.

What you build yourself on TanStack Table

Virtualization (usually with TanStack Virtual), sort indicators, filter inputs, column resize handles, drag and drop for columns and rows, group expand and collapse, pinned-column layout, keyboard navigation, focus management, ARIA roles, editing and context menus.

None of these are hard on their own. Together they are most of the work in a data grid, and Infinite Table includes them.

Migrating from TanStack Table

A sortable table in TanStack Table v9 next to the same grid in Infinite Table. The TanStack version still has no virtualization, resizing or styling; the Infinite Table version has all three.

TanStack Table v9

import {
  createSortedRowModel,
  rowSortingFeature,
  sortFns,
  tableFeatures,
  useTable,
} from '@tanstack/react-table';
import type { ColumnDef } from '@tanstack/react-table';

type Car = { id: number; make: string; model: string; price: number };

const data: Car[] = [
  { id: 1, make: 'Tesla', model: 'Model Y', price: 64950 },
  { id: 2, make: 'Ford', model: 'F-Series', price: 33850 },
];

const features = tableFeatures({
  rowSortingFeature,
  sortedRowModel: createSortedRowModel(),
  sortFns,
});

const columns: ColumnDef<typeof features, Car>[] = [
  { accessorKey: 'make', header: 'Make' },
  { accessorKey: 'model', header: 'Model' },
  {
    accessorKey: 'price',
    header: 'Price',
    cell: (info) => <b>{info.getValue<number>()}</b>,
  },
];

export function Cars() {
  const table = useTable({
    features,
    columns,
    data,
    getRowId: (row) => String(row.id),
    initialState: { sorting: [{ id: 'make', desc: false }] },
  });

  return (
    <table>
      <thead>
        {table.getHeaderGroups().map((headerGroup) => (
          <tr key={headerGroup.id}>
            {headerGroup.headers.map((header) => (
              <th
                key={header.id}
                onClick={header.column.getToggleSortingHandler()}
              >
                <table.FlexRender header={header} />
              </th>
            ))}
          </tr>
        ))}
      </thead>
      <tbody>
        {table.getRowModel().rows.map((row) => (
          <tr key={row.id}>
            {row.getAllCells().map((cell) => (
              <td key={cell.id}>
                <table.FlexRender cell={cell} />
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

Infinite Table

import { DataSource, InfiniteTable } from '@infinite-table/infinite-react';
import type { InfiniteTablePropColumns } from '@infinite-table/infinite-react';
import '@infinite-table/infinite-react/index.css';

type Car = { id: number; make: string; model: string; price: number };

const data: Car[] = [
  { id: 1, make: 'Tesla', model: 'Model Y', price: 64950 },
  { id: 2, make: 'Ford', model: 'F-Series', price: 33850 },
];

const columns: InfiniteTablePropColumns<Car> = {
  make: { field: 'make', header: 'Make' },
  model: { field: 'model', header: 'Model', defaultWidth: 200 },
  price: {
    field: 'price',
    header: 'Price',
    renderValue: ({ value }) => <b>{value}</b>,
  },
};

export function Cars() {
  return (
    <div style={{ height: 500, display: 'flex' }}>
      <DataSource<Car>
        primaryKey="id"
        data={data}
        defaultSortInfo={{ field: 'make', dir: 1 }}
      >
        <InfiniteTable<Car> columns={columns} />
      </DataSource>
    </div>

How TanStack Table concepts map to Infinite Table
TanStack TableInfinite Table
columns with accessorKeycolumns (an object keyed by column id) with field
headerheader
cellrenderValue or render
size (column sizing feature)defaultWidth, defaultFlex, or the columnSizing prop
getRowIdprimaryKey on <DataSource>
initialState.sorting, state.sortingdefaultSortInfo, sortInfo on <DataSource>
grouping state, grouped row modeldefaultGroupBy, groupBy on <DataSource>
getSubRows, expanded row model<TreeDataSource> and <TreeGrid>
manualSorting, manualFiltering...a data function on <DataSource> (server-side)
TanStack Virtualbuilt in

What TanStack Table does well

  • Headless: it brings no markup or styles, so the table can match any design system exactly. source
  • One core with official adapters for React, Vue, Solid, Svelte, Angular and more. source
  • MIT, one free edition, no license keys and no deployment fees. source
  • Broad logic coverage: sorting, filtering, faceting, grouping, aggregation, expansion, row and cell selection, pagination. source
  • A tiny core: in v9 you register only the features you use. source
  • Server-side processing is first-class, with a manual mode for each feature. source

TanStack offers paid enterprise support and workshops; prices are on request. source

FAQ

Is TanStack Table a data grid?

Not by itself. TanStack Table is a headless table library: it provides state and logic, not markup or styles. You build the grid UI on top of it, often with TanStack Virtual for virtualization.

Does TanStack Table support pivoting?

No pivoting feature is documented for TanStack Table v9. It has grouping and aggregation logic. Infinite Table has pivoting built in, on the client or the server.

Is TanStack Table smaller than Infinite Table?

Yes, much smaller, because it ships no UI. The comparison that matters for a data grid is TanStack Table plus TanStack Virtual plus everything you build on top, against a complete grid.

Can I use Infinite Table with Tailwind or shadcn/ui?

Yes. Infinite Table is themed with CSS variables and ships several themes, including one styled after shadcn/ui.

Which TanStack Table version does this page compare?

TanStack Table v9, the current stable major when we last checked. v9 changed the API: useTable with opt-in tableFeatures replaces the useReactTable hook of v8.

Is Infinite Table free to use?

Yes. Every feature is free to use, in any product and in production, as long as the "Powered by Infinite Table" footer stays visible. A license removes the footer and adds email support: $395 per developer per year, with volume discounts and no deployment or application licenses. See pricing.

How many dependencies does TanStack Table have, compared to Infinite Table?

Infinite Table has 0 runtime dependencies: installing it adds one package. TanStack Table adds 4 (1 from other publishers); TanStack Table + TanStack Virtual adds 5 (1 from other publishers), counting required peer dependencies but not React. Measured on November 11, 2026 with the latest versions on npm.

How big is TanStack Table compared to Infinite Table?

Bundling the minimal getting-started usage with esbuild, minified and gzipped, without React: Infinite Table 145 kB of JavaScript, TanStack Table 9.9 kB, TanStack Table + TanStack Virtual 20.2 kB. CSS is measured separately; the table above has both.

Try Infinite Table

npm i @infinite-table/infinite-react for React, or npm i @infinite-table/infinite-vue for Vue. Every feature is in the package.

Other comparisons

Sources

Sources and corrections

Every statement about another product links to the vendor's own documentation, pricing or license page. TanStack Table facts were last verified on November 11, 2026. Prices are list prices as published; taxes, discounts and quotes can differ. Products change quickly, so please check the vendor's site before you buy.

Spotted something wrong or out of date? We'll fix it: open a correction issue, edit the data on GitHub or email us.

Official links for TanStack Table: website, docs, license, repository.