TanStack
TanStack

Table

The data-grid logic, without the data-grid component.

Table is a headless engine for rows, columns, sorting, filtering, grouping, selection, pagination, and controlled state—without a data-grid component attached.

Docs
issue workbench
8 rows · 0 selected
Router docsactive98
Query cachereview94
Table filtersshipped91
Virtual listsactive88
page 1 / 2

Row-model pipeline

Compose behavior instead of buying a grid monolith.

Start with core rows, then opt into only the transformations the product needs. Each row model has one job, a visible input, and a visible output.

Core

getCoreRowModel()

8 rows

Filter

getFilteredRowModel()

5 rows

Sort

getSortedRowModel()

5 rows

Page

getPaginationRowModel()

4 rows

Headless rendering

One engine. Whatever surface the job calls for.

Column definitions and row models describe behavior, not elements. Feed the same model into semantic rows, responsive cards, or a dense operational view.

render surface
TS-732Router docs98
TS-681Query cache94
TS-644Table filters91
TS-612Virtual lists88

Table

Owns columns, row models, feature state, and the data handed to your renderer.

Virtual

Measures the scroll surface and limits which rows or columns are mounted. Pair it with Table when rendering volume demands it.

State ownership

Control exactly the state that has somewhere else to be.

Let Table manage state until another part of the product needs it. Then lift only sorting, filters, selection, visibility, or pagination into the component, URL, or server.

sorting ownership
navigate({ search: { sort } })

Shareable, restorable state for product navigation.

headerURL searchtable state