Audit and migrate Table v8 to v9. Inventory affected APIs, follow the shared checklist, and read only the required architecture, state, feature, and TypeScript mappings.
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Read core first. Audit every item below before choosing detailed mappings. This shared checklist owns the complete core migration; the installed adapter's migration skill owns construction, rendering, framework requirements, and reactive wiring.
intent load <package>#migrate-v8-to-v9 and its table-state skill. Substitute the actual adapter package. React, Preact, Solid, Svelte, Vue, Angular, and Lit have migration skills; Alpine, Ember, and Octane have no v8 adapter migration journey.Treat useLegacyTable as a deprecated React-only bridge for an existing incremental migration. It bundles every feature, can exceed the v8 bundle, and is not the target architecture. Its only entrypoint is @tanstack/react-table/legacy.
| Audit finds | Read |
|---|---|
| Feature registration, row-model factories, function slots, bound methods, or consumed internals | Architecture mappings |
getState, onStateChange, controlled ownership, observation, or reset changes | State mappings |
| Aggregation, logical pinning, sizing/resizing, sorting names, or selection predicates | Feature API mappings |
Explicit generics, column helpers, scoped meta, registry augmentation, or RowData | TypeScript mappings |
features object to every table.stockFeatures only as a temporary parity aid and record an explicit-feature follow-up.getCoreRowModel() unless supplying a deliberate custom coreRowModel slot.get*RowModel() options (or a removed rowModels: {...} object, if present) to create*RowModel() feature slots.filterFns, sortingFns/sortFns, and aggregationFns into feature slots, registering individually imported built-ins; pass no registries to factories.rowAggregationFeature independently and migrate custom aggregation callables to context-based AggregationFnDef definitions.columnFilteringFeature before global filtering and filter/facet dependencies.columnSizingFeature before columnResizingFeature.table.getState() and top-level onStateChange according to the adapter state guide.left/right key, argument, comparison, method family, and sticky CSS declaration with logical start/end equivalents.enablePinning; preserve column-def enablePinning where intended.sortingFn/SortingFn/sortingFns spelling with its v9 sort* spelling.TFeatures to unavoidable explicit core types, helpers, and retained meta augmentation; otherwise restore inference.RowData constraint.any/casts added merely to suppress migration failures.useLegacyTable after the incremental migration step that required it.Missing feature APIs must be resolved through registration, not casts. Keep v8 get*RowModel configuration and physical pinning names out of the final v9 setup. Remove temporary stockFeatures or useLegacyTable use when the incremental step no longer needs them.
After behavior parity, consider tableOptions() for reusable configuration, createTableHook() for app conventions, narrower subscriptions, and scoped meta. These are optional improvements, not extra required breakages. Use the adapter's getting-started skill to reach its app-hook reference when adopting that pattern.
Start at node_modules/@tanstack/table-core/dist/index.d.ts and the relevant feature declarations. Resolve the installed package root if the package manager uses another layout. The adapter migration skill names its published declaration route; follow that route for framework APIs instead of applying another adapter's names.
TanStack/table
c14e022
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.