# What changed in @tanstack/table-core

> 77 changes in @tanstack/table-core 9 from its official release notes, upgrade guides and advisories: 39 breaking, 3 deprecations, 22 new APIs and options. Each one cited. Sources checked 2026-11-12. HTML: https://unstale.sh/npm/@tanstack/table-core/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @tanstack/table-core 9

### Breaking changes

- Without globalFilteringFeature, global facets include no columns, matching the filtered row model. (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.3.1)
- Bundled skills are split into smaller entry points, with feature and composition references loaded as needed. Consumers with individual skill permissions or explicit agent mappings must replace retired IDs and refresh mappings. (9.2.6) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.6)
- Grouped and downstream worker flatRows now use parent-first preorder. (9.2.3) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.3)
- Register aggregation functions in the tableFeatures registry slot instead of augmenting AggregationFns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- getAggregationFn is replaced by getAggregationFns because a column can run multiple aggregation definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- getAggregationValue now accepts a single options object containing rows and maxDepth instead of positional arguments. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- ColumnMeta declaration merging now takes TFeatures as its first type parameter. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Column pinning uses logical start/end terminology instead of left/right, with no deprecated aliases; update state values, pin arguments, and related column, row, and table APIs. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Column pinning uses start/end terminology, including columnPinning.start and column.pin('end'). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The former columnSizingInfo state and setter are now columnResizing and setColumnResizing, with onColumnResizingChange replacing onColumnSizingInfoChange. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Column sizing and interactive resizing are separate features, so tables can register only sizing or add columnResizingFeature when drag-to-resize is needed. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Custom aggregation callables now use context-based definitions with aggregate and context.rows; maxAggregationDepth controls the selected aggregation depth. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Convert custom aggregation callables to constructAggregationFn({ aggregate, merge? }) definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Creates a filtered row model for registration on tableFeatures instead of configuring a separate table option. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Creates a paginated row model for registration on tableFeatures instead of configuring a separate table option. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Creates a sorted row model for registration on tableFeatures instead of configuring a separate table option. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The enablePinning option is split into separate column- and row-pinning options. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Packages ship as modern ESM; UMD and CJS builds have been dropped. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- A required useTable option declares which features, row models, and processing functions the table uses. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Register filter functions in the tableFeatures registry slot instead of augmenting FilterFns; registered keys typecheck as string references. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Use the filterMeta feature slot to type filter metadata without augmenting FilterMeta. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Move get*RowModel() options into tableFeatures slots, such as filteredRowModel: createFilteredRowModel(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Table state is accessed through table.state, table.store, or state-slice atoms instead of the Table V8 getState method. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The table option was removed; subscribe to table.store for notifications of any state change. Individual on[State]Change handlers remain available. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Methods are shared on object prototypes rather than created per instance, so destructuring them loses the this context and they are not own properties. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- When rowSelectionFeature is enabled, the handler now supports inclusive Shift range selection by default; set enableRowRangeSelection to false to retain the previous non-range behavior. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Call row methods on the row instance rather than using destructured row methods. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Aggregation is independent from column grouping; explicitly registered features must include rowAggregationFeature when columns use aggregation APIs. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- RowData is restricted to Record<string, any> or Array<any>, so unusual data types must conform to one of those shapes. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Sorting APIs were renamed for consistency: column definitions use sortFn, and related methods, types, and built-in functions use SortFn, getSortFn, getAutoSortFn, SortFns, and sortFns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Column definitions use sortFn in place of sortingFn. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Register sort functions in the tableFeatures registry slot instead of augmenting SortFns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Internal APIs prefixed with an underscore have been removed, including _getPinnedRows and the listed faceting methods. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- This check now returns true whenever at least one row is selected, including when all rows are selected; the page-row counterpart follows the same rule. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Access state through table.store.state or table.state instead of table.getState(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Registers table features, row model factories, and processing function registries, enabling unused code to be tree-shaken. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Separate export for legacy-specific APIs, including useLegacyTable and legacy helpers. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Most types now require TFeatures as a generic parameter, changing the generic shapes for table, column, row, cell, and definition types. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Replaces useReactTable as the React hook for creating a table, consistent with hook naming across TanStack libraries. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)

### Deprecations

- The full registry export is deprecated in favor of individual aggregationFn_* imports or functions supplied directly in column definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The full registry export is deprecated in favor of individual filterFn_* imports or functions supplied directly in column definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The full registry export is deprecated in favor of individual sortFn_* imports or functions supplied directly in column definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)

### New APIs and options

- Adds table.autoResetSorting(). (9.2.8) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.8)
- Adds getCanLastPage for detecting whether a finite last page can be reached. (9.1.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.1.0)
- Lets callers supply writable atoms for state slices to own that state externally. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Adds spreadsheet-style rectangular cell range selection, including drag, Shift-extend, and multiple disjoint ranges. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Adds body-cell spanning across rows and columns, with span-aware cell selection and header rowSpan computation. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The new columns() helper preserves individual column TValue types across wrapped arrays and nested group columns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Declare column metadata types per table using the columnMeta feature slot, without global declaration merging. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Creates custom table hooks with pre-bound features and components for reusable app-level table patterns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Provides all features for useTable as a shortcut for Table V8-like behavior, with a larger bundle. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Exposes per-slice readonly atoms for narrow subscriptions to individual table state slices. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- A component-based rendering API is available on the table instance for headers, cells, and footers; the existing flexRender function still works. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Provides the selected table state, which contains all registered state by default or the state shape returned by a custom useTable selector. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Exposes a framework-agnostic store of the entire table state for one-off reads and fine-grained subscriptions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Enables fine-grained reactive subscriptions so rendered content only updates when selected state changes. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Define table features with tableFeatures(), or use stockFeatures. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Declare metadata types per table using the tableMeta feature slot, without global declaration merging. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Enables composition of reusable table configuration, including features, row models, and default options. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- The tableOptions helper provides type-safe composition of reusable partial table configurations, including options that omit required fields. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Components registered via createTableHook can access cell context with useCellContext. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Components registered via createTableHook can access header context with useHeaderContext. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Provides a temporary migration hook that accepts the Table V8-style API; it is deprecated and includes all features by default. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)
- Components registered via createTableHook can access table context with useTableContext. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)

### Performance

- The core and unregistered features bundle less unrelated code, reducing the size of a minimal table by about 0.27 kB (brotli). (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.3.1)
- Importing one built-in filter, sort, or aggregation function now bundles only that function; row models also avoid importing code from unregistered features, reducing bundle size. (9.2.8) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.8)

### Behavior and default changes

- Page size now supports Infinity, allowing an unbounded page size. (9.1.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.1.0)
- The former private row._getAllCellsByColumnId method is now public as row.getAllCellsByColumnId. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)

### Tooling

- The devtools panel now displays measured minified and brotli sizes for each feature, row model, and built-in function, with shared code accounted for in the total. (9.2.8) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.8)
- Compiled output now targets ES2022. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.0.0)

### Fixes and other changes

- Private declarations are kept out of emitted declaration files, preventing TS2883 failures for consumers emitting declarations. (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.3.1)
- The table type now declares getOrderColumnsFn(), which column ordering already assigned. (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.3.1)
- Corrects the type to declare autoResetPageIndex rather than _autoResetPageIndex, matching the method the table actually has. (9.2.8) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.8)
- Missing core rows are skipped when rebuilding a worker row-model payload, preventing stale worker results from crashing the table. (9.2.4) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.4)
- Hierarchical filtered row models now list parents before descendants in both filtering modes, preserve filter metadata on cloned rows, and round-trip nested data through worker-backed row models. (9.2.3) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.2.3)
- Equality-guarded state slices return the existing reference for semantically unchanged updates, helping controlled-state consumers avoid unnecessary re-renders and auto-reset render loops. Custom onXChange handlers are still invoked, and the state owner evaluates updaters once. (9.1.2) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.1.2)
- The flattened sorted rows now list parents before sub-rows, matching the sorted rows tree and other row models. (9.1.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/table-core%409.1.1)
