@tanstack/table-core 9.0.0-alpha.47 → 9.0.0-alpha.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +10 -0
  2. package/dist/core/cells/coreCellsFeature.utils.cjs +11 -8
  3. package/dist/core/cells/coreCellsFeature.utils.cjs.map +1 -1
  4. package/dist/core/cells/coreCellsFeature.utils.d.cts +11 -8
  5. package/dist/core/cells/coreCellsFeature.utils.d.ts +11 -8
  6. package/dist/core/cells/coreCellsFeature.utils.js +11 -8
  7. package/dist/core/cells/coreCellsFeature.utils.js.map +1 -1
  8. package/dist/core/columns/coreColumnsFeature.types.d.cts +7 -6
  9. package/dist/core/columns/coreColumnsFeature.types.d.ts +7 -6
  10. package/dist/core/columns/coreColumnsFeature.utils.cjs +37 -27
  11. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  12. package/dist/core/columns/coreColumnsFeature.utils.d.cts +37 -27
  13. package/dist/core/columns/coreColumnsFeature.utils.d.ts +37 -27
  14. package/dist/core/columns/coreColumnsFeature.utils.js +37 -27
  15. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  16. package/dist/core/headers/coreHeadersFeature.types.d.cts +6 -4
  17. package/dist/core/headers/coreHeadersFeature.types.d.ts +6 -4
  18. package/dist/core/headers/coreHeadersFeature.utils.cjs +23 -18
  19. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  20. package/dist/core/headers/coreHeadersFeature.utils.d.cts +23 -18
  21. package/dist/core/headers/coreHeadersFeature.utils.d.ts +23 -18
  22. package/dist/core/headers/coreHeadersFeature.utils.js +23 -18
  23. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  24. package/dist/core/row-models/coreRowModelsFeature.utils.cjs +48 -36
  25. package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
  26. package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +48 -36
  27. package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +48 -36
  28. package/dist/core/row-models/coreRowModelsFeature.utils.js +48 -36
  29. package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
  30. package/dist/core/rows/coreRowsFeature.types.d.cts +4 -4
  31. package/dist/core/rows/coreRowsFeature.types.d.ts +4 -4
  32. package/dist/core/rows/coreRowsFeature.utils.cjs +34 -28
  33. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  34. package/dist/core/rows/coreRowsFeature.utils.d.cts +34 -28
  35. package/dist/core/rows/coreRowsFeature.utils.d.ts +34 -28
  36. package/dist/core/rows/coreRowsFeature.utils.js +34 -28
  37. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  38. package/dist/core/table/coreTablesFeature.types.d.cts +6 -2
  39. package/dist/core/table/coreTablesFeature.types.d.ts +6 -2
  40. package/dist/core/table/coreTablesFeature.utils.cjs +2 -2
  41. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  42. package/dist/core/table/coreTablesFeature.utils.d.cts +2 -2
  43. package/dist/core/table/coreTablesFeature.utils.d.ts +2 -2
  44. package/dist/core/table/coreTablesFeature.utils.js +2 -2
  45. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  46. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +16 -10
  47. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +16 -10
  48. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +26 -18
  49. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  50. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +26 -18
  51. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +26 -18
  52. package/dist/features/column-faceting/columnFacetingFeature.utils.js +26 -18
  53. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  54. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +21 -11
  55. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +21 -11
  56. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +39 -28
  57. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  58. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +39 -28
  59. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +39 -28
  60. package/dist/features/column-filtering/columnFilteringFeature.utils.js +39 -28
  61. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  62. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +18 -14
  63. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +18 -14
  64. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +55 -43
  65. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  66. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +55 -43
  67. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +55 -43
  68. package/dist/features/column-grouping/columnGroupingFeature.utils.js +55 -43
  69. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  70. package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +14 -5
  71. package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +14 -5
  72. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +30 -23
  73. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  74. package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +30 -23
  75. package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +30 -23
  76. package/dist/features/column-ordering/columnOrderingFeature.utils.js +30 -23
  77. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  78. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +43 -31
  79. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +43 -31
  80. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +111 -91
  81. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  82. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +111 -91
  83. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +111 -91
  84. package/dist/features/column-pinning/columnPinningFeature.utils.js +111 -91
  85. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  86. package/dist/features/column-resizing/columnResizingFeature.types.d.cts +9 -9
  87. package/dist/features/column-resizing/columnResizingFeature.types.d.ts +9 -9
  88. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +29 -20
  89. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  90. package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +28 -19
  91. package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +28 -19
  92. package/dist/features/column-resizing/columnResizingFeature.utils.js +29 -20
  93. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  94. package/dist/features/column-sizing/columnSizingFeature.types.d.cts +19 -12
  95. package/dist/features/column-sizing/columnSizingFeature.types.d.ts +19 -12
  96. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +52 -41
  97. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  98. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +52 -41
  99. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +52 -41
  100. package/dist/features/column-sizing/columnSizingFeature.utils.js +52 -41
  101. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  102. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +16 -13
  103. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +16 -13
  104. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +54 -42
  105. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  106. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +54 -42
  107. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +54 -42
  108. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +54 -42
  109. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  110. package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +10 -5
  111. package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +10 -5
  112. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +20 -14
  113. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  114. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +20 -14
  115. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +20 -14
  116. package/dist/features/global-filtering/globalFilteringFeature.utils.js +20 -14
  117. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  118. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +16 -15
  119. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +16 -15
  120. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +56 -41
  121. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  122. package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +56 -41
  123. package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +56 -41
  124. package/dist/features/row-expanding/rowExpandingFeature.utils.js +56 -41
  125. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  126. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +19 -12
  127. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +19 -12
  128. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +49 -32
  129. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
  130. package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +49 -32
  131. package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +49 -32
  132. package/dist/features/row-pagination/rowPaginationFeature.utils.js +49 -32
  133. package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
  134. package/dist/features/row-pinning/rowPinningFeature.types.d.cts +12 -8
  135. package/dist/features/row-pinning/rowPinningFeature.types.d.ts +12 -8
  136. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +39 -29
  137. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  138. package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +39 -29
  139. package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +39 -29
  140. package/dist/features/row-pinning/rowPinningFeature.utils.js +39 -29
  141. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  142. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +30 -24
  143. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +30 -24
  144. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +89 -69
  145. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  146. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +89 -69
  147. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +89 -69
  148. package/dist/features/row-selection/rowSelectionFeature.utils.js +89 -69
  149. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  150. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +10 -8
  151. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +10 -8
  152. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +62 -45
  153. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  154. package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +61 -44
  155. package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +61 -44
  156. package/dist/features/row-sorting/rowSortingFeature.utils.js +62 -45
  157. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  158. package/dist/fns/aggregationFns.cjs +33 -9
  159. package/dist/fns/aggregationFns.cjs.map +1 -1
  160. package/dist/fns/aggregationFns.d.cts +33 -9
  161. package/dist/fns/aggregationFns.d.ts +33 -9
  162. package/dist/fns/aggregationFns.js +33 -9
  163. package/dist/fns/aggregationFns.js.map +1 -1
  164. package/dist/fns/filterFns.cjs +48 -17
  165. package/dist/fns/filterFns.cjs.map +1 -1
  166. package/dist/fns/filterFns.d.cts +42 -15
  167. package/dist/fns/filterFns.d.ts +42 -15
  168. package/dist/fns/filterFns.js +48 -17
  169. package/dist/fns/filterFns.js.map +1 -1
  170. package/dist/helpers/columnHelper.cjs +9 -4
  171. package/dist/helpers/columnHelper.cjs.map +1 -1
  172. package/dist/helpers/columnHelper.d.cts +9 -4
  173. package/dist/helpers/columnHelper.d.ts +9 -4
  174. package/dist/helpers/columnHelper.js +9 -4
  175. package/dist/helpers/columnHelper.js.map +1 -1
  176. package/dist/helpers/tableOptions.cjs.map +1 -1
  177. package/dist/helpers/tableOptions.d.cts +12 -9
  178. package/dist/helpers/tableOptions.d.ts +12 -9
  179. package/dist/helpers/tableOptions.js.map +1 -1
  180. package/dist/types/ColumnDef.d.cts +38 -0
  181. package/dist/types/ColumnDef.d.ts +38 -0
  182. package/dist/types/TableOptions.d.cts +15 -0
  183. package/dist/types/TableOptions.d.ts +15 -0
  184. package/dist/types/TableState.d.cts +12 -0
  185. package/dist/types/TableState.d.ts +12 -0
  186. package/package.json +5 -3
  187. package/skills/column-definitions/SKILL.md +333 -0
  188. package/skills/column-layout/SKILL.md +328 -0
  189. package/skills/column-layout/references/subsystems.md +220 -0
  190. package/skills/customizing-feature-behavior/SKILL.md +416 -0
  191. package/skills/filtering/SKILL.md +357 -0
  192. package/skills/filtering/references/faceting-and-fuzzy.md +191 -0
  193. package/skills/grouping/SKILL.md +448 -0
  194. package/skills/migrate-v8-to-v9/SKILL.md +495 -0
  195. package/skills/pagination/SKILL.md +385 -0
  196. package/skills/row-expanding/SKILL.md +348 -0
  197. package/skills/row-pinning/SKILL.md +269 -0
  198. package/skills/row-selection/SKILL.md +391 -0
  199. package/skills/setup/SKILL.md +400 -0
  200. package/skills/sorting/SKILL.md +344 -0
  201. package/skills/state-management/SKILL.md +388 -0
  202. package/src/core/cells/coreCellsFeature.utils.ts +11 -8
  203. package/src/core/columns/coreColumnsFeature.types.ts +7 -6
  204. package/src/core/columns/coreColumnsFeature.utils.ts +37 -27
  205. package/src/core/headers/coreHeadersFeature.types.ts +6 -4
  206. package/src/core/headers/coreHeadersFeature.utils.ts +23 -18
  207. package/src/core/row-models/coreRowModelsFeature.utils.ts +48 -36
  208. package/src/core/rows/coreRowsFeature.types.ts +4 -4
  209. package/src/core/rows/coreRowsFeature.utils.ts +34 -28
  210. package/src/core/table/coreTablesFeature.types.ts +6 -2
  211. package/src/core/table/coreTablesFeature.utils.ts +2 -2
  212. package/src/features/column-faceting/columnFacetingFeature.types.ts +16 -10
  213. package/src/features/column-faceting/columnFacetingFeature.utils.ts +26 -18
  214. package/src/features/column-filtering/columnFilteringFeature.types.ts +21 -11
  215. package/src/features/column-filtering/columnFilteringFeature.utils.ts +39 -28
  216. package/src/features/column-grouping/columnGroupingFeature.types.ts +18 -14
  217. package/src/features/column-grouping/columnGroupingFeature.utils.ts +55 -43
  218. package/src/features/column-ordering/columnOrderingFeature.types.ts +14 -5
  219. package/src/features/column-ordering/columnOrderingFeature.utils.ts +30 -23
  220. package/src/features/column-pinning/columnPinningFeature.types.ts +43 -31
  221. package/src/features/column-pinning/columnPinningFeature.utils.ts +111 -91
  222. package/src/features/column-resizing/columnResizingFeature.types.ts +9 -9
  223. package/src/features/column-resizing/columnResizingFeature.utils.ts +29 -21
  224. package/src/features/column-sizing/columnSizingFeature.types.ts +19 -12
  225. package/src/features/column-sizing/columnSizingFeature.utils.ts +52 -41
  226. package/src/features/column-visibility/columnVisibilityFeature.types.ts +16 -13
  227. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +54 -42
  228. package/src/features/global-filtering/globalFilteringFeature.types.ts +10 -5
  229. package/src/features/global-filtering/globalFilteringFeature.utils.ts +20 -14
  230. package/src/features/row-expanding/rowExpandingFeature.types.ts +16 -15
  231. package/src/features/row-expanding/rowExpandingFeature.utils.ts +56 -41
  232. package/src/features/row-pagination/rowPaginationFeature.types.ts +19 -12
  233. package/src/features/row-pagination/rowPaginationFeature.utils.ts +49 -32
  234. package/src/features/row-pinning/rowPinningFeature.types.ts +12 -8
  235. package/src/features/row-pinning/rowPinningFeature.utils.ts +39 -29
  236. package/src/features/row-selection/rowSelectionFeature.types.ts +30 -24
  237. package/src/features/row-selection/rowSelectionFeature.utils.ts +89 -69
  238. package/src/features/row-sorting/rowSortingFeature.types.ts +10 -8
  239. package/src/features/row-sorting/rowSortingFeature.utils.ts +62 -45
  240. package/src/fns/aggregationFns.ts +33 -9
  241. package/src/fns/filterFns.ts +48 -17
  242. package/src/helpers/columnHelper.ts +9 -4
  243. package/src/helpers/tableOptions.ts +12 -9
  244. package/src/types/ColumnDef.ts +38 -0
  245. package/src/types/TableOptions.ts +15 -0
  246. package/src/types/TableState.ts +12 -0
@@ -0,0 +1,495 @@
1
+ ---
2
+ name: migrate-v8-to-v9
3
+ description: >
4
+ Mechanical breaking-change migration from TanStack Table v8 to v9 at the
5
+ `@tanstack/table-core` level. Covers hook/entry rename
6
+ (`useReactTable`/`createSolidTable`/… → `useTable`/`injectTable`/`createTable`/
7
+ `constructTable`), the new required `_features` + `_rowModels` options,
8
+ `createColumnHelper<TData>()` → `createColumnHelper<typeof _features, TData>()`,
9
+ row-model factory rename (`getCoreRowModel()` → automatic; `getSortedRowModel()`
10
+ → `createSortedRowModel(sortFns)`; same for filtered/paginated/grouped/expanded/
11
+ faceted), `table.getState()` → `table.store.state` / `table.atoms.<slice>.get()`,
12
+ sorting renames (`sortingFn` → `sortFn`, etc.), `enablePinning` split, column
13
+ sizing/resizing split, underscore-prefixed APIs becoming public, `RowData`
14
+ type tightening, TFeatures-first generics, the `useLegacyTable` React escape
15
+ hatch (deprecated, removed in v10), and the `stockFeatures` v8-style "everything
16
+ on" registry.
17
+ type: lifecycle
18
+ library: tanstack-table
19
+ library_version: '9.0.0-alpha.48'
20
+ requires:
21
+ - setup
22
+ - state-management
23
+ - column-definitions
24
+ sources:
25
+ - TanStack/table:docs/framework/table-core/guide/migrating.md
26
+ - TanStack/table:docs/framework/react/guide/use-legacy-table.md
27
+ - TanStack/table:packages/react-table/src/legacy.ts
28
+ ---
29
+
30
+ ## Setup
31
+
32
+ v9 is a substantial reshape, not a tweak. The breaking changes group into:
33
+
34
+ 1. **Hook/entry rename** per adapter.
35
+ 2. **`_features` + `_rowModels` are required** — features are tree-shaken.
36
+ 3. **Column helper generic order** — `<TFeatures, TData>` not `<TData>`.
37
+ 4. **Row-model factories** moved out of root options, into `_rowModels`, and now take their `*Fns` argument.
38
+ 5. **State surface renamed** — `table.getState()` → `table.store.state` / `table.atoms.<slice>.get()` / `table.state` (selector).
39
+ 6. **Sorting names**: `sortingFn` → `sortFn`, `sortingFns` → `sortFns`, `getSortingFn()` → `getSortFn()`, type `SortingFn` → `SortFn`.
40
+ 7. **`enablePinning` split** into `enableColumnPinning` + `enableRowPinning` (table-level); per-column `enablePinning` stays.
41
+ 8. **Column resizing split out** of column sizing. `columnSizingInfo` state → `columnResizing`. `onColumnSizingInfoChange` → `onColumnResizingChange`.
42
+ 9. **Underscore-prefixed APIs are public now** — drop the `_` prefix (`row._getAllCellsByColumnId()` → `row.getAllCellsByColumnId()`, `table._getFacetedRowModel()` → public, etc.).
43
+ 10. **Generics now lead with `TFeatures`** — `Column<TFeatures, TData, TValue>`, `Row<TFeatures, TData>`, `ColumnMeta<TFeatures, TData, TValue>`.
44
+ 11. **`RowData` tightened** from `unknown | object | any[]` to `Record<string, any> | Array<any>`.
45
+ 12. **`data` and `columns` are readonly** in v9 — flow changes through state, don't mutate.
46
+
47
+ For React projects that cannot migrate every table at once, `useLegacyTable` from `@tanstack/react-table/legacy` accepts the v8 shape on top of the v9 engine. Deprecated, ships every feature, no `table.Subscribe`. Removed in v10.
48
+
49
+ ## Core Patterns
50
+
51
+ ### Full v9 equivalent for the most common v8 shape
52
+
53
+ ```ts
54
+ // === v9 (correct) ===
55
+ import {
56
+ useTable,
57
+ tableFeatures,
58
+ rowSortingFeature,
59
+ rowPaginationFeature,
60
+ columnFilteringFeature,
61
+ columnSizingFeature,
62
+ columnResizingFeature,
63
+ createColumnHelper,
64
+ createSortedRowModel,
65
+ createFilteredRowModel,
66
+ createPaginatedRowModel,
67
+ sortFns,
68
+ filterFns,
69
+ } from '@tanstack/react-table'
70
+ import type { ColumnDef } from '@tanstack/react-table'
71
+
72
+ const _features = tableFeatures({
73
+ rowSortingFeature,
74
+ rowPaginationFeature,
75
+ columnFilteringFeature,
76
+ columnSizingFeature,
77
+ columnResizingFeature, // explicit — formerly part of ColumnSizing
78
+ })
79
+
80
+ const columnHelper = createColumnHelper<typeof _features, Person>()
81
+
82
+ const columns: ColumnDef<typeof _features, Person>[] = columnHelper.columns([
83
+ columnHelper.accessor('name', {
84
+ header: 'Name',
85
+ sortFn: 'alphanumeric', // renamed from sortingFn
86
+ }),
87
+ ])
88
+
89
+ const table = useTable({
90
+ _features,
91
+ _rowModels: {
92
+ sortedRowModel: createSortedRowModel(sortFns),
93
+ filteredRowModel: createFilteredRowModel(filterFns),
94
+ paginatedRowModel: createPaginatedRowModel(),
95
+ },
96
+ columns,
97
+ data,
98
+ enableColumnPinning: true, // split from enablePinning
99
+ enableRowPinning: true,
100
+ })
101
+
102
+ // State reads
103
+ const allState = table.store.state // full snapshot
104
+ const sorting = table.atoms.sorting.get() // per-slice atom
105
+ const cells = row.getAllCellsByColumnId() // no underscore
106
+
107
+ // Rendering
108
+ // <table.FlexRender header={header} />
109
+ // <table.FlexRender cell={cell} />
110
+ ```
111
+
112
+ ### v8 muscle-memory anti-shape
113
+
114
+ ```ts
115
+ // === v8 muscle memory — every line is broken in v9. ===
116
+ import {
117
+ useReactTable, // (1) renamed → useTable
118
+ getCoreRowModel, // (2) no longer a root option
119
+ getFilteredRowModel, // move to _rowModels as factories
120
+ getSortedRowModel, // createSortedRowModel(sortFns) etc.
121
+ getPaginationRowModel,
122
+ createColumnHelper, // (3) needs <TFeatures, TData> now
123
+ sortingFns, // (4) renamed → sortFns
124
+ filterFns,
125
+ flexRender, // still exists, prefer table.FlexRender
126
+ } from '@tanstack/react-table'
127
+ import type { ColumnDef, Row } from '@tanstack/react-table'
128
+
129
+ const columnHelper = createColumnHelper<Person>() // wrong arity
130
+
131
+ const columns: ColumnDef<Person>[] = [
132
+ // (5) ColumnDef<TFeatures, TData, TValue> now
133
+ { accessorKey: 'name', header: 'Name', sortingFn: 'alphanumeric' }, // (6) renamed → sortFn
134
+ ]
135
+
136
+ const table = useReactTable({
137
+ columns,
138
+ data,
139
+ getCoreRowModel: getCoreRowModel(), // (2) move into _rowModels
140
+ getFilteredRowModel: getFilteredRowModel(),
141
+ getSortedRowModel: getSortedRowModel(),
142
+ getPaginationRowModel: getPaginationRowModel(),
143
+ filterFns, // (7) no longer a root option
144
+ sortingFns, // (4)+(7)
145
+ enablePinning: true, // (8) split → enableColumnPinning / enableRowPinning
146
+ onColumnSizingInfoChange: setInfo, // (9) renamed → onColumnResizingChange
147
+ })
148
+
149
+ const all = table.getState() // (10) → table.store.state
150
+ const cells = row._getAllCellsByColumnId() // underscore removed
151
+ ```
152
+
153
+ ### Transitional `useLegacyTable` (React only)
154
+
155
+ ```ts
156
+ import {
157
+ useLegacyTable,
158
+ getCoreRowModel,
159
+ legacyCreateColumnHelper,
160
+ } from '@tanstack/react-table/legacy'
161
+
162
+ const legacyHelper = legacyCreateColumnHelper<Person>()
163
+ const legacyTable = useLegacyTable({
164
+ columns,
165
+ data,
166
+ getCoreRowModel: getCoreRowModel(),
167
+ })
168
+ ```
169
+
170
+ This accepts the v8 shape on top of the v9 engine. Deprecated, ships every feature, no `table.Subscribe`, no atoms. Removed in v10. Use to unblock incremental migration only — not as a long-term API. Angular has no `useLegacyTable` equivalent; Angular projects must migrate directly.
171
+
172
+ ## Common Mistakes
173
+
174
+ ### [CRITICAL] Hallucinating react-table v7 / pre-v9 API names
175
+
176
+ Wrong:
177
+
178
+ ```ts
179
+ // v7
180
+ import { useTable, useSortBy } from 'react-table'
181
+ const table = useTable({ columns, data }, useSortBy)
182
+
183
+ // v8
184
+ import { useReactTable, getCoreRowModel } from '@tanstack/react-table'
185
+ const table = useReactTable({
186
+ columns,
187
+ data,
188
+ getCoreRowModel: getCoreRowModel(),
189
+ })
190
+ ```
191
+
192
+ Correct:
193
+
194
+ ```ts
195
+ import {
196
+ useTable,
197
+ tableFeatures,
198
+ rowSortingFeature,
199
+ createSortedRowModel,
200
+ sortFns,
201
+ } from '@tanstack/react-table'
202
+
203
+ const _features = tableFeatures({ rowSortingFeature })
204
+ const table = useTable({
205
+ _features,
206
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
207
+ columns,
208
+ data,
209
+ })
210
+ ```
211
+
212
+ Every major release of TanStack Table has been a substantial upgrade. Agents trained on v7 or v8 will confidently emit shapes that no longer exist. This is the #2 AI failure (after reimplementing built-ins).
213
+
214
+ Source: maintainer interview (Phase 4, 2026-05-17)
215
+
216
+ ### [CRITICAL] Importing pre-bundled `getCoreRowModel` / `getSortedRowModel` etc.
217
+
218
+ Wrong:
219
+
220
+ ```ts
221
+ // v8 pattern — won't drive v9 row models
222
+ const table = useTable({
223
+ _features,
224
+ data,
225
+ columns,
226
+ getCoreRowModel: getCoreRowModel(),
227
+ getSortedRowModel: getSortedRowModel(),
228
+ })
229
+ ```
230
+
231
+ Correct:
232
+
233
+ ```ts
234
+ import {
235
+ useTable,
236
+ tableFeatures,
237
+ rowSortingFeature,
238
+ createSortedRowModel,
239
+ sortFns,
240
+ } from '@tanstack/react-table'
241
+
242
+ const _features = tableFeatures({ rowSortingFeature })
243
+ const table = useTable({
244
+ _features,
245
+ _rowModels: {
246
+ sortedRowModel: createSortedRowModel(sortFns), // factory takes sortFns argument
247
+ },
248
+ columns,
249
+ data,
250
+ })
251
+ ```
252
+
253
+ In v9, row models live under `_rowModels` and the factories REQUIRE their \*Fns argument for tree-shaking: `createFilteredRowModel(filterFns)`, `createSortedRowModel(sortFns)`, `createGroupedRowModel(aggregationFns)`. Core is automatic.
254
+
255
+ Source: PR #6234 (atoms refactor); packages/table-core/src/index.ts
256
+
257
+ ### [CRITICAL] `createColumnHelper<TData>()` (v8 arity)
258
+
259
+ Wrong:
260
+
261
+ ```ts
262
+ const columnHelper = createColumnHelper<Person>()
263
+ ```
264
+
265
+ Correct:
266
+
267
+ ```ts
268
+ const _features = tableFeatures({ rowSortingFeature })
269
+ const columnHelper = createColumnHelper<typeof _features, Person>()
270
+ ```
271
+
272
+ v9 requires `<TFeatures, TData>`. `typeof _features` is the standard idiom — declare features once at module scope and reuse the type.
273
+
274
+ Source: packages/table-core/src/helpers/columnHelper.ts; docs/framework/react/guide/migrating.md
275
+
276
+ ### [HIGH] Reading state via `table.getState()`
277
+
278
+ Wrong:
279
+
280
+ ```ts
281
+ const all = table.getState()
282
+ ```
283
+
284
+ Correct:
285
+
286
+ ```ts
287
+ const all = table.store.state // flat snapshot, no subscription
288
+ const sorting = table.atoms.sorting.get() // per-slice
289
+ const selected = table.state // typed selector output (framework adapters)
290
+ ```
291
+
292
+ `table.getState()` was removed. There are three reads now, picked by what you need.
293
+
294
+ Source: docs/framework/table-core/guide/migrating.md
295
+
296
+ ### [HIGH] Sorting renames missed
297
+
298
+ Wrong:
299
+
300
+ ```ts
301
+ { accessorKey: 'age', sortingFn: 'alphanumeric' } // v8 name
302
+ useTable({ sortingFns: { ... } }) // v8 option
303
+ column.getSortingFn() // v8 method
304
+ ```
305
+
306
+ Correct:
307
+
308
+ ```ts
309
+ columnHelper.accessor('age', { sortFn: 'alphanumeric' })
310
+ createSortedRowModel(sortFns) // pass registry to the factory
311
+ column.getSortFn()
312
+ ```
313
+
314
+ v9 renamed every sorting API: `sortingFn` → `sortFn`, `sortingFns` → `sortFns`, type `SortingFn` → `SortFn`, `getSortingFn()` → `getSortFn()`. TypeScript surfaces these but agents try v8 names first.
315
+
316
+ Source: packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts
317
+
318
+ ### [HIGH] Using `enablePinning` at the table level
319
+
320
+ Wrong:
321
+
322
+ ```ts
323
+ const table = useTable({
324
+ _features: tableFeatures({ columnPinningFeature, rowPinningFeature }),
325
+ enablePinning: true, // ignored at table level in v9
326
+ })
327
+ ```
328
+
329
+ Correct:
330
+
331
+ ```ts
332
+ const table = useTable({
333
+ _features: tableFeatures({ columnPinningFeature, rowPinningFeature }),
334
+ enableColumnPinning: true,
335
+ enableRowPinning: true,
336
+ })
337
+
338
+ // Per-column opt-out is still `enablePinning`:
339
+ columnHelper.accessor('id', { enablePinning: false })
340
+ ```
341
+
342
+ v9 split `enablePinning` (table-level) into `enableColumnPinning` + `enableRowPinning`. The bare name now refers ONLY to per-column opt-out.
343
+
344
+ Source: packages/table-core/src/features/column-pinning/columnPinningFeature.types.ts
345
+
346
+ ### [HIGH] Treating column resizing as part of column sizing
347
+
348
+ Wrong:
349
+
350
+ ```ts
351
+ // v8 — ColumnSizing implied resizing too
352
+ const table = useTable({
353
+ _features: tableFeatures({ columnSizingFeature }),
354
+ onColumnSizingInfoChange: setInfo, // v8 name
355
+ })
356
+ ```
357
+
358
+ Correct:
359
+
360
+ ```ts
361
+ const table = useTable({
362
+ _features: tableFeatures({
363
+ columnSizingFeature,
364
+ columnResizingFeature, // explicit in v9
365
+ }),
366
+ onColumnResizingChange: setResizing, // renamed
367
+ // state key columnSizingInfo → columnResizing
368
+ })
369
+ ```
370
+
371
+ v9 split them: `columnSizingFeature` for fixed widths, `columnResizingFeature` for drag-to-resize. State key `columnSizingInfo` → `columnResizing`; option `onColumnSizingInfoChange` → `onColumnResizingChange`.
372
+
373
+ Source: docs/framework/table-core/guide/migrating.md
374
+
375
+ ### [MEDIUM] Calling underscore-prefixed APIs
376
+
377
+ Wrong:
378
+
379
+ ```ts
380
+ row._getAllCellsByColumnId()
381
+ table._getFacetedRowModel()
382
+ table._getFacetedMinMaxValues()
383
+ table._getFacetedUniqueValues()
384
+ table._getPinnedRows()
385
+ ```
386
+
387
+ Correct:
388
+
389
+ ```ts
390
+ row.getAllCellsByColumnId()
391
+ table.getFacetedRowModel()
392
+ table.getFacetedMinMaxValues()
393
+ table.getFacetedUniqueValues()
394
+ table.getPinnedRows()
395
+ ```
396
+
397
+ All became public — drop the underscore.
398
+
399
+ Source: docs/framework/table-core/guide/migrating.md
400
+
401
+ ### [MEDIUM] Module augmentation with v8 generic arity
402
+
403
+ Wrong:
404
+
405
+ ```ts
406
+ declare module '@tanstack/react-table' {
407
+ interface ColumnMeta<TData, TValue> {
408
+ customProp: string
409
+ }
410
+ }
411
+ ```
412
+
413
+ Correct:
414
+
415
+ ```ts
416
+ declare module '@tanstack/react-table' {
417
+ interface ColumnMeta<TFeatures, TData, TValue> {
418
+ customProp: string
419
+ }
420
+ }
421
+ ```
422
+
423
+ v9 added `TFeatures` as the first generic. Module augmentation silently widens types if arity is wrong.
424
+
425
+ Source: docs/framework/table-core/guide/migrating.md
426
+
427
+ ### [MEDIUM] Mutating `data` or `columns` in place
428
+
429
+ Wrong:
430
+
431
+ ```ts
432
+ // v8 pattern, breaks at TS layer in v9
433
+ const data: Person[] = []
434
+ function addRow(row: Person) {
435
+ data.push(row)
436
+ rerender()
437
+ }
438
+ ```
439
+
440
+ Correct:
441
+
442
+ ```ts
443
+ const [data, setData] = useState<Person[]>([])
444
+ function addRow(row: Person) {
445
+ setData((prev) => [...prev, row])
446
+ }
447
+ ```
448
+
449
+ PR #6183 makes `data` and `columns` readonly to force changes through state.
450
+
451
+ Source: PR #6183
452
+
453
+ ### [MEDIUM] Reaching for `useLegacyTable` in new code
454
+
455
+ Wrong:
456
+
457
+ ```ts
458
+ // Long-term use of the legacy shim
459
+ import { useLegacyTable, getCoreRowModel } from '@tanstack/react-table/legacy'
460
+ const table = useLegacyTable({
461
+ columns,
462
+ data,
463
+ getCoreRowModel: getCoreRowModel(),
464
+ })
465
+ ```
466
+
467
+ Correct:
468
+
469
+ ```ts
470
+ // Migrate to native v9 shape
471
+ import {
472
+ useTable,
473
+ tableFeatures,
474
+ rowSortingFeature,
475
+ createSortedRowModel,
476
+ sortFns,
477
+ } from '@tanstack/react-table'
478
+ const _features = tableFeatures({ rowSortingFeature })
479
+ const table = useTable({
480
+ _features,
481
+ _rowModels: { sortedRowModel: createSortedRowModel(sortFns) },
482
+ columns,
483
+ data,
484
+ })
485
+ ```
486
+
487
+ `useLegacyTable` is React-only, deprecated, bundles every feature, doesn't support `table.Subscribe`, and is removed in v10. It exists to unblock incremental migration — not as a long-term API.
488
+
489
+ Source: packages/react-table/src/legacy.ts; docs/framework/react/guide/use-legacy-table.md
490
+
491
+ ## See also
492
+
493
+ - `tanstack-table/setup` — what the v9-native shape looks like
494
+ - `tanstack-table/state-management` — `table.store.state` / `table.atoms` / `table.state` ownership
495
+ - `tanstack-table/column-definitions` — `createColumnHelper<typeof _features, TData>()` generic order