# What changed in @tanstack/vue-table

> 102 changes in @tanstack/vue-table 9 from its official release notes, upgrade guides and advisories: 64 breaking, 2 deprecations, 29 new APIs and options. Each one cited. Sources checked 2026-10-19. HTML: https://unstale.sh/npm/@tanstack/vue-table/

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

## @tanstack/vue-table 9

### Breaking changes

- Bundled Intent skills now use smaller entry points with task-specific references; consumers with individual skill permissions or explicit agent mappings must replace retired IDs and refresh their mappings. (9.2.6) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.2.6)
- The callable AggregationFn and CreatedAggregationFn types were replaced by AggregationFnDef. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Register aggregation functions in the aggregationFns slot to use string references, replacing module augmentation. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The region argument now uses end instead of right. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- column.getAggregationFn() was renamed because a column can run multiple aggregation definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The method now takes one options object containing rows and maxDepth instead of positional arguments. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The column.getAutoSortingFn() method was renamed to column.getAutoSortFn(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The region argument now uses start/end instead of left/right. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The pinned-position result now uses start/end instead of left/right. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The column.getSortingFn() method was renamed to column.getSortFn(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The region argument now uses start instead of left. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Use start and end rather than left and right when pinning a column. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Global declaration merging still works, but ColumnMeta now takes TFeatures as its first generic parameter. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Column pinning state now uses logical start/end regions instead of left/right; there are no deprecated aliases. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Column pinning state now uses logical start/end regions instead of left/right; there are no deprecated aliases. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Column pinning now uses start/end terminology instead of the previous terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The former columnSizingInfo state is now named columnResizing. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Interactive resizing is now a separate feature; import it alongside columnSizingFeature when drag-to-resize is needed. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Rename columnSizingInfo state to columnResizing, including related options. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Custom aggregation callables now use context-based definitions constructed with constructAggregationFn. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- createColumnHelper now takes TFeatures before TData. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The combined enablePinning option was split into separate column-pinning and row-pinning options. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Replace enablePinning with enableColumnPinning or enableRowPinning. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Set this option to false to preserve the previous non-range handler behavior. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Compiled output now targets ES2022. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Packages ship as modern ESM; UMD and CJS builds are dropped. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Tables must explicitly declare their features through the new required features option; registering only needed features enables tree-shaking. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Register filter functions in the features registry slot to make string references typecheck, replacing FilterFns module augmentation. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Use the filterMeta registry slot to type filter metadata instead of augmenting FilterMeta. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Move get*RowModel() options to tableFeatures slots; row model factories no longer take arguments. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- This column option controls which depth-selected rows are provided to aggregation; the default 0 preserves direct-child aggregation, while Infinity selects terminal leaf rows. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The onColumnSizingInfoChange option was renamed to onColumnResizingChange. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The table option was removed; subscribe to table.store to listen for any state change, while per-slice change handlers remain available. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Row model factories and filter, sort, and aggregation function registries are registered through tableFeatures rather than separate table options. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The row API for visible cells on the right was renamed to use logical end terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The row API for visible cells on the left was renamed to use logical start terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Aggregation is an independent feature; explicitly registered features must include rowAggregationFeature when columns use aggregation APIs. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- RowData is now 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/vue-table%409.0.0)
- setColumnSizingInfo() was renamed to setColumnResizing(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The column definition option sortingFn was renamed to sortFn; update column definitions to use the new name. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The SortingFn type was renamed to SortFn. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The SortingFns interface was renamed to SortFns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The built-in sorting functions identifier sortingFns was renamed to sortFns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Register sort functions in the sortFns slot to use string references, replacing module augmentation. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Rename sortingFn to sortFn in column definitions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- This internal table API has been removed. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- This internal table API has been removed. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- This internal table API has been removed. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- This internal table API has been removed. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The header-groups API for the right region was renamed to use logical end terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The leaf-columns API for the right region was renamed to use logical end terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The total-size API for the right region was renamed to use logical end terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The visible leaf-columns API for the right region was renamed to use logical end terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Now returns true whenever at least one page row is selected, including when all page rows are selected. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Now returns true whenever at least one row is selected, including when all rows are selected. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The header-groups API for the left region was renamed to use logical start terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The leaf-columns API for the left region was renamed to use logical start terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The total-size API for the left region was renamed to use logical start terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The visible leaf-columns API for the left region was renamed to use logical start terminology. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%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/vue-table%409.0.0)
- Provides the selected table state directly; by default it contains all registered state, while a custom selector can limit its shape. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Global declaration merging still works, but TableMeta now takes TFeatures as its first generic parameter. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Most table types now take TFeatures as a generic parameter, which should be supplied when typing tables, columns, rows, and cells. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Use useTable in place of useReactTable for creating a table. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)

### Deprecations

- Deprecated in the Vue adapter; read table APIs or atoms in native Vue reactive contexts, and use a child component when a separate render boundary is needed. The wrapper remains for compatibility. (9.2.7) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.2.7)
- The full function registry export is deprecated in favor of importing and registering only the individual functions in use. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)

### New APIs and options

- Pass writable atoms for individual state slices; table reads and writes use those atoms, which take precedence over matching state options and are not cleared by table.reset(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Pass writable atoms through the atoms option to own specific state slices externally. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Adds spreadsheet-style rectangular cell-range selection, including drag selection, Shift-extend, and multiple disjoint ranges. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Adds body-cell spanning across rows and columns, with span-aware selection and header row-span computation. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Column grouping is separate from aggregation and is needed only when rows are also grouped. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Wrap column arrays with columns() to preserve each column's TValue type, including through nested group columns. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- A type-only columnMeta slot on the features option lets you declare metadata types per table without declaration merging. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Column sizing is now a separate feature, allowing fixed-width tables to import sizing without interactive resizing. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%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/vue-table%409.0.0)
- Creates a reusable custom hook with pre-bound configuration for applications whose tables share features, row models, options, or components. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Components registered via createTableHook can access table, header, and cell context through context hooks. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Row pinning now has its own option, separate from column pinning. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- A component can render header, cell, or footer templates as an alternative to the existing flexRender function. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Lets callers provide writable atoms for state slices they want to own externally. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- The public row.getAllCellsByColumnId() method replaces the previously private row._getAllCellsByColumnId(). (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Adds a row API for obtaining its display index. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Provides all features for Table V8-like behavior, as an alternative to registering features individually. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Use StockFeatures as the feature type when using stockFeatures with useTable. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Exposes readonly atoms for individual state slices, allowing fine-grained subscriptions. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Subscribe to individual state slices via table.atoms.<slice> and useSelector for narrower re-renders. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- A component attached to the table instance renders header, cell, or footer templates as an alternative to flexRender. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Adds a table API for obtaining the maximum sub-row depth. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Exposes a framework-agnostic store for reading the full table state and subscribing to state changes. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Optionally use table.Subscribe for render optimizations. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Registers table features, row models, and processing function registries, enabling feature prerequisite type checks and tree-shaking. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Define table features with tableFeatures(), or use stockFeatures, and migrate get*RowModel() options to feature slots. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- A type-only tableMeta slot on the features option lets you declare metadata types per table without declaration merging. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Provides type-safe composition of reusable table options and allows partial configurations to omit required fields. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- Use tableOptions() for composable configurations. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)

### Performance

- Per-slice atoms can be used as narrow subscription sources, avoiding re-renders and full state snapshot construction for unrelated state changes. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)

### Behavior and default changes

- When rowSelectionFeature is enabled, the handler now supports inclusive Shift range selection by default; direct row.toggleSelected() calls are unchanged. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
- TanStack Table v9 is released as stable, with upgrade instructions available in the migration guide. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)

### Fixes and other changes

- AppCell now reads the current cell prop when a keyed loop reuses its wrapper, preventing stale snippet, slot, and useCellContext() values. (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.3.1)
- AppFooter now reads the current footer prop when a keyed loop reuses its wrapper, preventing stale values. (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.3.1)
- AppHeader now reads the current header prop when a keyed loop reuses its wrapper, preventing stale snippet, slot, and useHeaderContext() values. (9.3.1) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.3.1)
- Methods are shared on prototypes, so destructuring them loses the required this context; call them on their original instance. (9.0.0) — [release notes](https://github.com/TanStack/table/releases/tag/%40tanstack/vue-table%409.0.0)
