diff --git a/.changeset/config.json b/.changeset/config.json
index c03035a239..8856c6591c 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -1,14 +1,17 @@
{
- "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
+ "$schema": "https://unpkg.com/@changesets/config@3.1.2/schema.json",
"changelog": [
- "@svitejs/changesets-changelog-github-compact",
- { "repo": "TanStack/table" }
+ "@changesets/changelog-github",
+ { "repo": "TanStack/table", "disableThanks": true }
],
"commit": false,
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"fixed": [],
- "linked": [],
- "ignore": []
+ "linked": [["@tanstack/*"]],
+ "ignore": [],
+ "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
+ "onlyUpdatePeerDependentsWhenOutOfRange": true
+ }
}
diff --git a/.gitattributes b/.gitattributes
index dfe0770424..5a0d5e480b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,2 @@
# Auto detect text files and perform LF normalization
-* text=auto
+* text=auto eol=lf
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000000..ec37670885
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,6 @@
+.github/ @TanStack/tanstack-core
+.nx/ @TanStack/tanstack-core
+nx.json @TanStack/tanstack-core
+.changeset/config.json @TanStack/tanstack-core
+scripts/ @TanStack/tanstack-core
+.npmrc @TanStack/tanstack-core
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 6a5ed2d4a4..963fe444ec 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,8 +1,11 @@
blank_issues_enabled: false
contact_links:
- - name: Feature Requests & Questions
+ - name: 🤔 Feature Requests & Questions
url: https://github.com/TanStack/table/discussions
about: Please ask and answer questions here.
- - name: Community Chat
+ - name: 💬 Community Chat
url: https://discord.gg/mQd7egN
about: A dedicated discord server hosted by TanStack
+ - name: 🦋 TanStack Bluesky
+ url: https://bsky.app/profile/tanstack.com
+ about: Stay up to date with new releases of our libraries
diff --git a/.github/pull_request_template b/.github/pull_request_template
new file mode 100644
index 0000000000..2c10bc7d7d
--- /dev/null
+++ b/.github/pull_request_template
@@ -0,0 +1,8 @@
+## 🎯 Changes
+
+
+
+## ✅ Checklist
+
+- [ ] I have followed the steps in the [Contributing guide](https://github.com/TanStack/table/blob/main/CONTRIBUTING.md).
+- [ ] I have tested this code locally with `pnpm test:pr`.
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 5dcbf401f2..3cda47f4f1 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -5,7 +5,7 @@
## ✅ Checklist
- [ ] I have followed the steps in the [Contributing guide](https://github.com/TanStack/table/blob/main/CONTRIBUTING.md).
-- [ ] I have tested this code locally with `pnpm test:pr`.
+- [ ] I have tested this code locally with `pnpm run test:pr`.
## 🚀 Release Impact
diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml
index 8ca8702155..4b056ba1d6 100644
--- a/.github/workflows/autofix.yml
+++ b/.github/workflows/autofix.yml
@@ -2,8 +2,6 @@ name: autofix.ci # needed to securely identify the workflow
on:
pull_request:
- push:
- branches: [main, alpha, beta, rc]
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
@@ -18,13 +16,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v5.0.0
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
+ persist-credentials: false
- name: Setup Tools
- uses: tanstack/config/.github/setup@main
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
- name: Fix formatting
- run: pnpm prettier:write
+ run: pnpm format
- name: Apply fixes
uses: autofix-ci/action@dd55f44df8f7cdb7a6bf74c78677eb8acd40cd0a
with:
diff --git a/.github/workflows/check-skills.yml b/.github/workflows/check-skills.yml
new file mode 100644
index 0000000000..4adbae05f2
--- /dev/null
+++ b/.github/workflows/check-skills.yml
@@ -0,0 +1,52 @@
+# check-skills.yml
+#
+# Validates @tanstack/intent skills on PRs that touch skills or artifacts.
+#
+# Staleness checking after a release is intentionally NOT automated here — run
+# `pnpm test:intent` (which calls `intent validate && intent stale`) locally
+# before cutting a release. Keeping this workflow validation-only means it
+# needs zero write permissions.
+
+name: Check Skills
+
+on:
+ pull_request:
+ paths:
+ - 'skills/**'
+ - '**/skills/**'
+ - '_artifacts/**'
+ - '**/_artifacts/**'
+ - 'scripts/sync-skill-versions.mjs'
+ - 'scripts/typecheck-skill-snippets.mjs'
+ - 'scripts/validate-skill-content.mjs'
+ - 'package.json'
+ - 'pnpm-lock.yaml'
+ - '.github/workflows/check-skills.yml'
+ workflow_dispatch: {}
+
+permissions:
+ contents: read
+
+jobs:
+ validate:
+ name: Validate intent skills
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ persist-credentials: false
+
+ - name: Setup Node
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
+ with:
+ node-version: 22.13.0
+
+ - name: Install pnpm
+ run: npm install --global "$(node -p 'require("./package.json").packageManager')"
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Validate skills and examples
+ run: pnpm test:skills
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index cc68eec29a..d646d3ce88 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -2,10 +2,12 @@ name: PR
on:
pull_request:
- paths-ignore:
- - 'docs/**'
- - 'media/**'
- - '**/*.md'
+ paths:
+ - '**'
+ - '!docs/**'
+ - '!media/**'
+ - '!**/*.md'
+ - '.changeset/**'
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
@@ -23,33 +25,64 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v5.0.0
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
+ persist-credentials: false
- name: Start Nx Agents
run: npx nx-cloud start-ci-run --distribute-on=".nx/workflows/dynamic-changesets.yaml"
- name: Setup Tools
- uses: tanstack/config/.github/setup@main
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
- name: Get base and head commits for `nx affected`
- uses: nrwl/nx-set-shas@v4.3.3
+ uses: nrwl/nx-set-shas@3e9ad7370203c1e93d109be57f3b72eb0eb511b1 # v4.4.0
with:
main-branch-name: main
- name: Run Checks
- run: pnpm run test:pr --parallel=3
+ run: pnpm run test:pr --parallel=4
- name: Stop Nx Agents
if: ${{ always() }}
run: npx nx-cloud stop-all-agents
+ coverage:
+ name: Coverage Report
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ persist-credentials: false
+ - name: Setup Tools
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
+ - name: Collect Coverage
+ run: pnpm --filter "@tanstack/table-core" test:coverage
+ - name: Write Coverage Summary
+ run: node scripts/coverage-summary.mjs packages/table-core/coverage/coverage-summary.json "table-core Coverage" >> "$GITHUB_STEP_SUMMARY"
preview:
name: Preview
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v5.0.0
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
+ persist-credentials: false
- name: Setup Tools
- uses: tanstack/config/.github/setup@main
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
- name: Build Packages
run: pnpm run build:all
- name: Publish Previews
run: pnpx pkg-pr-new publish --pnpm --compact './packages/*' --template './examples/*/*'
+ version-preview:
+ name: Version Preview
+ permissions:
+ contents: read
+ pull-requests: write
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ persist-credentials: false
+ - name: Setup Tools
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
+ - name: Changeset Preview
+ uses: TanStack/config/.github/changeset-preview@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8348d7025a..ba730a7313 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,4 +1,4 @@
-name: ci
+name: Release
on:
push:
@@ -12,31 +12,35 @@ env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
permissions:
- contents: write
- id-token: write
- pull-requests: write
+ contents: read
jobs:
release:
name: Release
if: github.repository_owner == 'TanStack'
runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ id-token: write
+ pull-requests: write
steps:
- name: Checkout
- uses: actions/checkout@v5.0.0
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
+ persist-credentials: false
- name: Start Nx Agents
run: npx nx-cloud start-ci-run --distribute-on=".nx/workflows/dynamic-changesets.yaml"
- name: Setup Tools
- uses: tanstack/config/.github/setup@main
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
- name: Run Tests
- run: pnpm run test:ci --parallel=3
+ run: pnpm run test:ci --parallel=4
- name: Stop Nx Agents
if: ${{ always() }}
run: npx nx-cloud stop-all-agents
- name: Run Changesets (version or publish)
- uses: changesets/action@v1.5.3
+ id: changesets
+ uses: changesets/action@63a615b9cd06ba9a3e6d13796c7fbcb080a60a0b # v1.8.0
with:
version: pnpm run changeset:version
publish: pnpm run changeset:publish
@@ -44,4 +48,29 @@ jobs:
title: 'ci: Version Packages'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+ - name: Comment on PRs about release
+ if: steps.changesets.outputs.published == 'true'
+ uses: TanStack/config/.github/comment-on-release@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
+ with:
+ published-packages: ${{ steps.changesets.outputs.publishedPackages }}
+
+ audit:
+ name: Audit
+ needs: release
+ if: github.repository_owner == 'TanStack' && contains(fromJSON('["main","alpha","beta"]'), github.ref_name)
+ runs-on: ubuntu-latest
+ timeout-minutes: 120
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+ - name: Setup Tools
+ uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
+ - name: Build Packages
+ run: pnpm run build:all
+ - name: Install Playwright Browsers
+ run: pnpm run test:e2e:install
+ - name: Run E2E Tests
+ run: pnpm run test:e2e
diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml
new file mode 100644
index 0000000000..1d4088db88
--- /dev/null
+++ b/.github/workflows/zizmor.yml
@@ -0,0 +1,25 @@
+name: GitHub Actions Security Analysis
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: ['**']
+
+permissions: {}
+
+jobs:
+ zizmor:
+ name: Run zizmor
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+
+ - name: Run zizmor
+ uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3
+ with:
+ advanced-security: false
+ annotations: true
diff --git a/.gitignore b/.gitignore
index 78f36fcdd4..eee942d0cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,14 +7,15 @@ package-lock.json
yarn.lock
# builds
-types
build
dist
lib
+!examples/**/src/lib/
es
artifacts
.rpt2_cache
coverage
+test-results
*.tgz
# misc
@@ -49,9 +50,18 @@ yarn.lock
*.tsbuildinfo
*.tsbuildinfo
+.svelte-kit
.nx/cache
.nx/workspace-data
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
.angular
+
+.nx/polygraph
+.claude/*
+.cursor/*
+
+Agents.md
+.agents/*
+terminalOutput
diff --git a/.npmrc b/.npmrc
index 84aee8d998..268c392d3c 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1,3 +1 @@
-link-workspace-packages=true
-prefer-workspace-packages=true
provenance=true
diff --git a/.nvmrc b/.nvmrc
index b404027604..c4697fd566 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-24.8.0
+26.3.0
diff --git a/.prettierignore b/.prettierignore
index aa12baab9e..6ee0b18740 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,10 +1,14 @@
+**/.nx/
**/.nx/cache
**/.svelte-kit
**/build
**/coverage
**/dist
-**/docs
+**/reference
**/old-examples
+**/examples/**/*.svelte
+**/test-results
pnpm-lock.yaml
+docs/config.json
.angular
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000..1d7ac851ea
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
+}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3ec4ceec5b..3e82ab7dd0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -29,17 +29,19 @@ Before proceeding with development, ensure you match one of the following criter
- Fork this repository, we prefer the `feat-*` branch name style
- Ensure you have `pnpm` installed
-- Install projects dependencies and linkages by running `pnpm install`
+- Install the project's dependencies and linkages by running `pnpm install`
- Auto-build and auto-test files as you edit by running `pnpm dev`
- Implement your changes and tests
- To run examples, follow their individual directions. Usually this includes:
- - Installing dependencies with `pnpm install` (from the root directory of the workspace)
- - Starting the dev server with `pnpm start` (from the example directory)
+ - cd into the example directory
+ - Do NOT install dependencies again or do any linking. Nx already handles this for you. Only run install from the project root.
+ - Starting the dev server with `pnpm dev` or `pnpm start` (from the example directory)
- To test in your own projects:
- Build/watch for changes with `pnpm build`/`pnpm dev`
- Document your changes in the appropriate documentation website markdown pages
+- Create a changeset (changelog entry) for your changes by running `pnpm changeset`
- Commit your work and open a pull request
-- Submit PR for review
+- Submit the PR for review
## Adding a new example
diff --git a/README.md b/README.md
index 59506ffbfd..f9ec9e8e28 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,19 @@
-
+
+
+
+
+
@@ -33,23 +47,36 @@
> [!NOTE]
> You may know TanStack Table by the adapter names:
>
-> - [Angular Table](https://tanstack.com/table/v8/docs/framework/angular/angular-table)
-> - [Lit Table](https://tanstack.com/table/v8/docs/framework/lit/lit-table)
-> - [Qwik Table](https://tanstack.com/table/v8/docs/framework/qwik/qwik-table)
-> - [React Table](https://tanstack.com/table/v8/docs/framework/react/react-table)
-> - [Solid Table](https://tanstack.com/table/v8/docs/framework/solid/solid-table)
-> - [Svelte Table](https://tanstack.com/table/v8/docs/framework/svelte/svelte-table)
-> - [Vue Table](https://tanstack.com/table/v8/docs/framework/vue/vue-table)
+> - [Angular Table](https://tanstack.com/table/latest/docs/framework/angular/angular-table)
+> - [Lit Table](https://tanstack.com/table/latest/docs/framework/lit/lit-table)
+> - [Octane Table](https://tanstack.com/table/latest/docs/framework/octane/quick-start)
+> - [Preact Table](https://tanstack.com/table/latest/docs/framework/preact/quick-start)
+> - [React Table](https://tanstack.com/table/latest/docs/framework/react/react-table)
+> - [Solid Table](https://tanstack.com/table/latest/docs/framework/solid/solid-table)
+> - [Svelte Table](https://tanstack.com/table/latest/docs/framework/svelte/svelte-table)
+> - [Vue Table](https://tanstack.com/table/latest/docs/framework/vue/vue-table)
+> - [Alpine Table](https://tanstack.com/table/latest/docs/framework/alpine/alpine-table)
+> - [Ember Table](https://tanstack.com/table/latest/docs/framework/ember/ember-table)
A headless table library for building powerful datagrids with full control over markup, styles, and behavior.
-- Framework‑agnostic core with bindings for React, Vue & Solid
+- Framework-agnostic core with bindings for React, Preact, Octane, Vue, Solid, Svelte, Angular, Ember, Lit, and Alpine
- 100% customizable — bring your own UI, components, and styles
- Sorting, filtering, grouping, aggregation & row selection
- Lightweight, virtualizable & server‑side friendly
### Read the Docs →
+## Using an AI Coding Agent?
+
+TanStack Table ships [TanStack Intent](https://github.com/TanStack/intent) skills inside each adapter package. After installing the library, run:
+
+```sh
+npx @tanstack/intent@latest install
+```
+
+to add skill-loading guidance for your agent (Claude Code, Cursor, Copilot, etc.). The same CLI also exposes `intent list` to browse available skills and `intent load ` to print one for inspection. Skills are versioned with the library — your agent gets guidance that matches the version of `@tanstack/-table` you installed. Only available for v9 and above.
+
## Get Involved
- We welcome issues and pull requests!
diff --git a/_artifacts/domain_map.yaml b/_artifacts/domain_map.yaml
new file mode 100644
index 0000000000..213172c21f
--- /dev/null
+++ b/_artifacts/domain_map.yaml
@@ -0,0 +1,1728 @@
+library:
+ name: '@tanstack/table'
+ version: '9.1.2'
+ repository: 'https://github.com/TanStack/table'
+ homepage: 'https://tanstack.com/table'
+ description: 'Headless, framework-agnostic data-grid state and row-processing primitives with tree-shakeable v9 features and framework adapters.'
+ primary_framework: 'framework-agnostic'
+ monorepo: true
+ package_version_overrides:
+ '@tanstack/angular-table': '9.2.1'
+ '@tanstack/angular-table-devtools': '9.2.0'
+ '@tanstack/preact-table-devtools': '9.2.0'
+ '@tanstack/react-table-devtools': '9.2.0'
+ '@tanstack/solid-table-devtools': '9.2.0'
+ '@tanstack/table-devtools': '9.2.0'
+ '@tanstack/vue-table-devtools': '9.2.0'
+
+meta:
+ generated_by: '@tanstack/intent scaffold domain discovery'
+ date: '2026-08-01'
+ status: reviewed
+ maintainer_review_pending: false
+ phase_4_date: '2026-07-10'
+ release_voice: 'Treat v9 as stable guidance while recording the exact prerelease package version in skill metadata.'
+
+scope:
+ goals:
+ - 'Route agents to the correct package and skill, then correct common foot-guns and misconceptions.'
+ - 'Use docs and examples for intended workflows, and direct exact API discovery to installed package declarations (dist/**/*.d.ts).'
+ - 'Teach headless rendering, feature registration, row-model ownership, framework state, and v8-to-v9 changes as foundations.'
+ included:
+ - 'All 18 public workspace packages.'
+ - 'All 17 stock Table v9 features, custom features, TypeScript helpers, migrations, framework state, composable table hooks, Query, Virtual, Devtools, and fuzzy ranking.'
+ - 'Renderer-owned CSS edge cases for sticky positioning, column widths, resizing, layout, and virtualization.'
+ excluded:
+ - 'Component-library-specific integrations such as shadcn, Material UI, Mantine, and equivalent design systems.'
+ - 'Worker row models and experimental worker guidance.'
+ - 'A dedicated performance skill; performance guidance is placed where the relevant state, row model, or virtualization decision is made.'
+ - 'A promoted useLegacyTable workflow; it may only be identified as a deprecated temporary stopgap when encountered.'
+
+validation_contract:
+ - 'Every generated skill must pass Intent validation and exact package-version synchronization.'
+ - 'Load-bearing TypeScript examples marked with skill-snippet:check must compile against workspace source and their package tsconfig.'
+ - 'Content checks reject malformed Markdown tables, invented package imports, feature-gated APIs without their feature, unstable empty-array data getters, and adapter-specific corrected foot-guns.'
+ - 'Wrong/Correct pairs are reserved for code where Wrong actually misbehaves; valid defaults and supported alternatives must use decision-oriented prose instead.'
+ - 'Virtual integration patterns must follow the maintained adapter guide/example rather than borrowing another framework adapter API.'
+ - 'Release automation updates skill and artifact version metadata after package versions are calculated and before packages publish.'
+
+migration_depth_contract:
+ exception: 'Migration skills are intentionally comprehensive rather than bare-bones. Each adapter migration skill must stand alone and list every breaking change in its maintained v8-to-v9 guide, even when the same change also appears in the table-core migration skill.'
+ required_coverage:
+ - 'Framework package and construction entrypoint changes, including framework-version prerequisites.'
+ - 'Logical start/end column-pinning rename and the full old-to-new API mapping.'
+ - 'Prototype-bound row, cell, column, and header methods; object-spread/Object.keys/JSON implications.'
+ - 'Required tableFeatures registration, stockFeatures audit guidance, all 16 feature imports, and feature-gated state/APIs.'
+ - 'Core row model removal plus every get*RowModel to create*RowModel feature-slot mapping.'
+ - 'filterFns, sortFns, aggregationFns, and filterMeta registry-slot migration.'
+ - 'Adapter state access, selectors/subscriptions, controlled slices, external atoms, precedence, and onStateChange removal.'
+ - 'createColumnHelper TFeatures and columns() inference changes.'
+ - 'Framework rendering helper/component/directive changes.'
+ - 'tableOptions and createTableHook composability.'
+ - 'enablePinning split, columnSizing/columnResizing split and state/API renames.'
+ - 'Sorting option/API/type/built-in registry renames.'
+ - 'Removed underscore-prefixed internal APIs and public row API replacements.'
+ - 'Row-selection some-selected semantic changes and correct indeterminate checks.'
+ - 'TFeatures generic changes, StockFeatures typing, meta typing, function-registry augmentation replacement, and RowData restriction.'
+ - 'A final exhaustive migration checklist suitable for auditing an existing codebase.'
+
+table_state_depth_contract:
+ exception: 'Framework table-state skills are foundational and intentionally richer than ordinary feature skills. Preserve the guide mental model and adapter-specific reactivity; do not reduce them to a few controlled-state snippets.'
+ required_coverage:
+ - 'Table as a state coordinator and internal state as the default ownership choice.'
+ - 'Feature-gated state slices and the relationship between registered features, options, APIs, atoms, and inferred types.'
+ - 'The distinct baseAtoms, atoms, store, and adapter-selected state surfaces.'
+ - 'Current snapshot reads versus framework-reactive subscriptions or tracked reads.'
+ - 'Exactly one owner per slice: internal state, initialState, external atoms, or state plus on[State]Change.'
+ - 'External-atom precedence, controlled-state synchronization, updater-function handling, and global onStateChange removal.'
+ - 'Feature methods as the preferred write surface, baseAtoms as a low-level escape hatch, and external-atom writes when externally owned.'
+ - 'initialState timing, feature reset behavior, reset-to-default arguments, and core reset limitations with external atoms.'
+ - 'Feature-specific state types and TableState inference.'
+ - 'Adapter-specific selectors, subscriptions, compiler/reactivity boundaries, and option synchronization.'
+
+stable_model_input_contract:
+ rule: 'Every skill example must keep data and columns references stable between meaningful changes. Never recommend inline map/filter/slice chains, makeColumns calls, or fresh fallback arrays in repeatedly evaluated table options.'
+ accepted_patterns:
+ - 'Module or component-lifetime constants for static data and columns.'
+ - 'Framework memo/computed primitives for derived data, keyed to the actual derivation inputs.'
+ - 'Stable state, signal, ref, rune, resource, or Query result references for changing data.'
+ - 'A module-level stable empty fallback instead of data ?? [] in React-like render paths or reactive option initializers.'
+
+custom_feature_depth_contract:
+ exception: 'The custom-features skill must enumerate the complete extension surface in one authoritative example. Do not pair a minimal density example with separate map/API examples or add a later misconception that merely explains their relationship.'
+ required_feature_maps:
+ - 'TableState_FeatureMap'
+ - 'TableOptions_FeatureMap'
+ - 'Table_FeatureMap'
+ - 'ColumnDef_FeatureMap'
+ - 'Column_FeatureMap'
+ - 'Row_FeatureMap'
+ - 'Cell_FeatureMap'
+ - 'Header_FeatureMap'
+ - 'RowModelFns_FeatureMap'
+ - 'CachedRowModels_FeatureMap'
+ required_api_installation:
+ - 'assignTableAPIs inside constructTableAPIs for the singleton table.'
+ - 'assignPrototypeAPIs inside assignColumnPrototype for shared column methods.'
+ - 'assignPrototypeAPIs inside assignRowPrototype for shared row methods.'
+ - 'assignPrototypeAPIs inside assignCellPrototype for shared cell methods.'
+ - 'assignPrototypeAPIs inside assignHeaderPrototype for shared header methods.'
+ - 'initColumnInstanceData and initRowInstanceData for per-instance mutable data rather than shared methods.'
+ - 'The table_/column_/row_/cell_/header_ static-name prefixes, self argument difference, optional memoDeps, and absence of per-object assign*APIs utilities.'
+
+api_discovery_policy:
+ rule: 'For exact exports, option types, state shapes, and instance APIs, inspect dist declarations (.d.ts) in the installed package before inventing an API or relying on memory.'
+ adapter_entrypoint: 'node_modules/@tanstack/-table/dist/index.d.ts'
+ core_entrypoint: 'node_modules/@tanstack/table-core/dist/index.d.ts'
+ feature_source: 'node_modules/@tanstack/table-core/dist/features//'
+ ember_entrypoint: 'node_modules/@tanstack/ember-table/declarations/index.d.ts'
+ angular_entrypoint: 'node_modules/@tanstack/angular-table/dist/types/'
+ octane_entrypoint: 'node_modules/@tanstack/octane-table/src/index.d.ts'
+ fallback: 'If declarations are unavailable, resolve the installed package root and inspect published types; do not open package src/ or substitute v8 / another adapter API.'
+
+coverage:
+ ignored_packages:
+ - 'tanstack-solid-table-example-basic-app-table'
+ - 'tanstack-solid-table-example-basic-dynamic-columns'
+ - 'tanstack-solid-table-example-basic-external-atoms'
+ - 'tanstack-solid-table-example-basic-external-state'
+ - 'tanstack-solid-table-example-basic-use-table'
+ - 'tanstack-solid-table-example-header-groups'
+ - 'tanstack-solid-table-example-column-ordering'
+ - 'tanstack-solid-table-example-column-pinning'
+ - 'tanstack-solid-table-example-column-pinning-split'
+ - 'tanstack-solid-table-example-column-pinning-sticky'
+ - 'tanstack-solid-table-example-column-resizing'
+ - 'tanstack-solid-table-example-column-resizing-performant'
+ - 'tanstack-solid-table-example-column-sizing'
+ - 'tanstack-solid-table-example-column-visibility'
+ - 'tanstack-solid-table-example-composable-tables'
+ - 'tanstack-solid-table-example-expanding'
+ - 'tanstack-solid-table-example-filters'
+ - 'tanstack-solid-table-example-filters-faceted'
+ - 'tanstack-solid-table-example-filters-fuzzy'
+ - 'tanstack-solid-table-example-grouping'
+ - 'tanstack-solid-table-example-kitchen-sink'
+ - 'tanstack-solid-table-example-pagination'
+ - 'tanstack-solid-table-example-row-pinning'
+ - 'tanstack-solid-table-example-row-selection'
+ - 'tanstack-solid-table-example-sorting'
+ - 'tanstack-solid-table-example-sub-components'
+ - 'tanstack-solid-table-example-virtualized-columns'
+ - 'tanstack-solid-table-example-virtualized-infinite-scrolling'
+ - 'tanstack-solid-table-example-virtualized-rows'
+ - 'tanstack-solid-table-example-with-tanstack-form'
+ - 'tanstack-solid-table-example-with-tanstack-query'
+ - 'tanstack-solid-table-example-with-tanstack-router'
+
+domains:
+ - slug: foundations
+ name: 'Foundations and migration'
+ description: 'Headless philosophy, feature registration, client/server ownership, TypeScript inference, API discovery, custom features, and v8 migration.'
+ - slug: feature-plugins
+ name: 'Feature plugins'
+ description: 'The 17 stock optional features, their prerequisites, state, row-model participation, and UI responsibilities.'
+ - slug: framework-adapters
+ name: 'Framework adapters'
+ description: 'Per-framework setup, reactive table state, v8 migration, reusable createTableHook patterns, and supported Query/Virtual composition.'
+ - slug: observability
+ name: 'Devtools'
+ description: 'Framework-neutral and adapter-specific Devtools registration, keys, production exports, and connection failures.'
+ - slug: utilities
+ name: 'Utilities'
+ description: 'Fuzzy ranking and comparison behavior shipped by match-sorter-utils.'
+
+tensions:
+ - name: 'Explicit tree-shaking vs kitchen-sink convenience'
+ skills: ['core', 'table-features', 'getting-started', 'migrate-v8-to-v9']
+ agent_risk: 'Agents reach for stockFeatures or a kitchen-sink example as the default and silently erase the main v9 bundle-size benefit.'
+ - name: 'Client-side processing vs server-owned processing'
+ skills:
+ [
+ 'client-vs-server',
+ 'column-filtering',
+ 'global-filtering',
+ 'grouping',
+ 'sorting',
+ 'pagination',
+ 'with-tanstack-query',
+ ]
+ agent_risk: 'Agents enable manual flags but still expect Table row models to transform the data, or mix server and client stages without defining the boundary.'
+ - name: 'Simple whole-table subscriptions vs fine-grained reactive state'
+ skills: ['table-state', 'create-table-hook', 'with-tanstack-virtual']
+ agent_risk: 'Agents either over-optimize small tables or hide state reads behind stable objects so framework compilers and memoization miss updates.'
+ - name: 'Reactive options vs stable model inputs'
+ skills:
+ [
+ 'core',
+ 'client-vs-server',
+ 'getting-started',
+ 'table-state',
+ 'with-tanstack-query',
+ ]
+ agent_risk: 'Agents derive data with map/filter/slice or recreate columns inside render/options callbacks, invalidating row and column models on unrelated updates or causing adapter render loops.'
+ - name: 'Headless flexibility vs renderer-owned correctness'
+ skills:
+ [
+ 'core',
+ 'column-pinning',
+ 'column-sizing',
+ 'column-resizing',
+ 'with-tanstack-virtual',
+ ]
+ agent_risk: 'Agents expect feature state to supply semantic markup or CSS and blame Table for sticky, width, accessibility, or layout behavior owned by their renderer.'
+
+skills:
+ - slug: core
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: core
+ purpose: 'Establish the headless mental model, core row model, markup ownership, stable inputs, and feature-driven table architecture.'
+ sources:
+ [
+ 'TanStack/table:docs/overview.md',
+ 'TanStack/table:docs/guide/tables.md',
+ 'TanStack/table:docs/guide/data.md',
+ 'TanStack/table:packages/table-core/src/index.ts',
+ ]
+ failure_modes:
+ - 'Treating Table as a component or design system instead of rendering semantic markup, styles, and accessibility in userland.'
+ - 'Recreating data or columns on every reactive pass and causing repeated row-model work or render loops.'
+ - 'Destructuring v9 row, cell, header, or column prototype methods and losing their instance this binding.'
+
+ - slug: table-features
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: core
+ purpose: 'Register only the features, row-model factories, and function registries a table actually uses.'
+ sources:
+ [
+ 'TanStack/table:docs/guide/row-models.md',
+ 'TanStack/table:packages/table-core/src/types/TableFeatures.ts',
+ 'TanStack/table:packages/table-core/src/features/stockFeatures.ts',
+ 'TanStack/table:packages/table-core/src/core/table/constructTable.ts',
+ ]
+ failure_modes:
+ - 'Calling a feature API without registering its feature, so its state slice and runtime API do not exist.'
+ - 'Registering a row-model or function-registry slot without its prerequisite feature, or placing prerequisites after dependent slots.'
+ - 'Defaulting to stockFeatures for new tables and bundling every optional feature instead of preserving v9 tree-shaking.'
+
+ - slug: client-vs-server
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: core
+ purpose: 'Choose which filtering, grouping, sorting, expanding, and pagination stages Table owns and which a backend owns.'
+ sources:
+ [
+ 'TanStack/table:docs/guide/row-models.md',
+ 'TanStack/table:packages/table-core/src/core/row-models/coreRowModelsFeature.utils.ts',
+ 'TanStack/table:examples/react/with-tanstack-query',
+ ]
+ failure_modes:
+ - 'Assuming manualPagination, manualSorting, manualFiltering, manualGrouping, or manualExpanding performs server work; each flag only bypasses that client row-model stage.'
+ - 'Passing a full dataset while manual pagination is enabled and expecting Table to slice it, or passing one page while a client row model expects the full dataset.'
+ - 'Mixing client and server stages without defining their order, producing sorting or filtering that only applies to the currently loaded page.'
+
+ - slug: typescript
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: core
+ purpose: 'Preserve userland inference with columnHelper, meta helpers, tableOptions, and feature-derived types instead of manually threading generics.'
+ sources:
+ [
+ 'TanStack/table:docs/guide/helpers.md',
+ 'TanStack/table:docs/guide/column-defs.md',
+ 'TanStack/table:docs/guide/table-and-column-meta.md',
+ 'TanStack/table:packages/table-core/src/helpers',
+ ]
+ failure_modes:
+ - 'Annotating heterogeneous helper-built columns as ColumnDef[] and erasing each accessor value type.'
+ - 'Manually supplying deep Table feature generics rather than deriving them from typeof features or letting helpers infer them.'
+ - 'Using v8 global declaration merging for per-table meta when v9 tableMeta, columnMeta, filterMeta, and meta helpers can scope the types.'
+
+ - slug: api-not-found
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: core
+ purpose: 'Diagnose missing exports, options, state, and instance methods before inventing replacement code.'
+ sources:
+ [
+ 'TanStack/table:packages/table-core/src/index.ts',
+ 'TanStack/table:packages/table-core/src/types/TableFeatures.ts',
+ 'TanStack/table:docs/framework/react/guide/migrating.md',
+ ]
+ failure_modes:
+ - 'Searching v8 docs or recalling v7 APIs instead of checking the installed v9 package src and exact package version.'
+ - 'Assuming an API was removed when its feature was simply omitted from tableFeatures.'
+ - 'Using object spread, Object.keys, or JSON serialization to discover v9 prototype methods and concluding those methods do not exist.'
+
+ - slug: custom-features
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: core
+ purpose: 'Extend Table through every v9 FeatureMap and table/column/row/cell/header API lifecycle surface only when built-in options, meta, and APIs are insufficient.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/custom-features.md',
+ 'TanStack/table:packages/table-core/src/types',
+ 'TanStack/table:packages/table-core/src/types/TableFeatures.ts',
+ 'TanStack/table:packages/table-core/src/utils.ts',
+ 'TanStack/table:packages/table-core/src/features',
+ 'TanStack/table:examples/react/custom-plugin',
+ ]
+ failure_modes:
+ - 'Building a custom feature for behavior already covered by column meta, table meta, or a built-in feature API.'
+ - 'Adding types without registering matching initial state, default options, state updaters, and prototype/table APIs in the feature lifecycle.'
+ - 'Mutating table instances ad hoc instead of registering a stable feature in tableFeatures, losing type inference and composition.'
+ - 'Assuming the density example exhausts the extension surface and overlooking column-def, column, row, cell, header, or advanced row-model FeatureMaps.'
+ - 'Looking for nonexistent assignColumnAPIs/assignRowAPIs helpers instead of using assignPrototypeAPIs inside the matching TableFeature prototype hook.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/table-core'
+ domain: foundations
+ type: migration
+ purpose: 'Route framework-specific migration while enforcing the shared v9 feature, row-model, instance-method, naming, and type changes.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/migrating.md',
+ 'TanStack/table:docs/framework/preact/guide/migrating.md',
+ 'TanStack/table:docs/framework/solid/guide/migrating.md',
+ 'TanStack/table:docs/framework/svelte/guide/migrating.md',
+ 'TanStack/table:docs/framework/vue/guide/migrating.md',
+ 'TanStack/table:docs/framework/angular/guide/migrating.md',
+ 'TanStack/table:docs/framework/lit/guide/migrating.md',
+ 'TanStack/table:packages/table-core/src/index.ts',
+ 'TanStack/table:packages/table-core/src/types/TableFeatures.ts',
+ 'TanStack/table:packages/table-core/src/features/column-pinning/columnPinningFeature.types.ts',
+ 'TanStack/table:packages/table-core/src/features/column-resizing/columnResizingFeature.types.ts',
+ 'TanStack/table:packages/react-table/src/legacy.ts',
+ ]
+ failure_modes:
+ - 'Promoting deprecated useLegacyTable as the migration target instead of a temporary stopgap for code already using it.'
+ - 'Leaving v8 getFilteredRowModel/getSortedRowModel/getPaginationRowModel table options in place instead of v9 create*RowModel slots on tableFeatures.'
+ - 'Missing shared breaking changes such as prototype-bound instance methods, sortFn naming, feature-gated APIs, or logical start/end pinning.'
+
+ - slug: column-faceting
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Derive filter option counts and numeric ranges from the correct faceted row model.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-faceting.md',
+ 'TanStack/table:packages/table-core/src/features/column-faceting',
+ 'TanStack/table:examples/react/filters-faceted',
+ ]
+ failure_modes:
+ - 'Registering columnFacetingFeature but omitting the facetedRowModel, facetedUniqueValues, or facetedMinMaxValues slot needed by the API being called.'
+ - 'Expecting a column facet to include that column own active filter; the faceted row model intentionally applies the other filters and excludes its own.'
+ - 'Computing large server-owned facet sets from the currently loaded client page and presenting incomplete counts as global results.'
+
+ - slug: column-filtering
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Configure column filters, filter functions, metadata, nested-row direction, and client/manual ownership.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-filtering.md',
+ 'TanStack/table:packages/table-core/src/features/column-filtering',
+ 'TanStack/table:examples/react/filters',
+ ]
+ failure_modes:
+ - 'Setting manualFiltering and still expecting createFilteredRowModel to transform data; manual mode returns the pre-filtered model.'
+ - 'Using accessor values that are objects or renderer output with built-in filter functions that expect comparable primitive values.'
+ - 'Providing controlled columnFilters plus onColumnFiltersChange without applying both value and updater-function forms to the external source.'
+
+ - slug: grouping
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Group rows, aggregate cells, and reason about grouped rows in expansion and pagination.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/grouping.md',
+ 'TanStack/table:packages/table-core/src/features/column-grouping',
+ 'TanStack/table:examples/react/grouping',
+ ]
+ failure_modes:
+ - 'Registering groupedRowModel or aggregationFns without columnGroupingFeature, or expecting grouping state alone to process rows.'
+ - 'Assuming pageSize counts only leaf data rows; group headers are rows in the model and affect built-in pagination.'
+ - 'Rendering every grouped cell as a normal value instead of handling grouped, placeholder, and aggregated cell states.'
+
+ - slug: column-ordering
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Control leaf-column order while respecting pinning, visibility, and grouped-column precedence.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-ordering.md',
+ 'TanStack/table:packages/table-core/src/features/column-ordering',
+ 'TanStack/table:examples/react/column-dnd',
+ ]
+ failure_modes:
+ - 'Treating columnOrder as the final rendered order while pinning regions and groupedColumnMode also reorder columns.'
+ - 'Using headers, labels, or array indexes as drag identifiers instead of stable leaf column IDs.'
+ - 'Mutating the columnOrder array in place so the state owner does not observe a new value.'
+
+ - slug: column-pinning
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Partition columns into logical start, center, and end regions and implement sticky layout correctly.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-pinning.md',
+ 'TanStack/table:packages/table-core/src/features/column-pinning',
+ 'TanStack/table:examples/react/column-pinning-sticky',
+ ]
+ failure_modes:
+ - 'Using v8 or early-beta left/right state and APIs instead of v9 logical start/end names, especially in RTL layouts.'
+ - 'Expecting pinning state to apply position: sticky, offsets, z-index, backgrounds, or overflow CSS automatically.'
+ - 'Allowing rendered widths to diverge from column.getSize, producing gaps or overlaps between adjacent pinned columns.'
+
+ - slug: column-resizing
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Wire resize gestures and resize state onto the numeric sizing model without avoidable render cost.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-resizing.md',
+ 'TanStack/table:packages/table-core/src/features/column-resizing',
+ 'TanStack/table:examples/react/column-resizing-performant',
+ ]
+ failure_modes:
+ - 'Registering columnResizingFeature without its columnSizingFeature prerequisite.'
+ - 'Displaying a resize handle without attaching header.getResizeHandler to the correct pointer or touch events.'
+ - 'Reading getSize repeatedly in every cell during onChange resizing instead of caching sizes or using CSS variables for large tables.'
+
+ - slug: column-sizing
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Use numeric min, max, and current sizes as state inputs to a renderer-owned CSS layout.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-sizing.md',
+ 'TanStack/table:packages/table-core/src/features/column-sizing',
+ 'TanStack/table:examples/react/column-sizing',
+ ]
+ failure_modes:
+ - 'Expecting the numeric sizing state to set DOM widths without applying it to th/td descendants, grid tracks, or flex styles.'
+ - 'Forcing auto or percentage strings through a number API instead of choosing and implementing an appropriate CSS layout strategy.'
+ - 'Forgetting the default size and rendered content can disagree, which also corrupts pinning offsets and total-size calculations.'
+
+ - slug: column-visibility
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Hide leaf columns while rendering only visibility-aware header, column, and cell collections.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/column-visibility.md',
+ 'TanStack/table:packages/table-core/src/features/column-visibility',
+ 'TanStack/table:examples/react/column-visibility',
+ ]
+ failure_modes:
+ - 'Updating columnVisibility but rendering getAllLeafColumns or row.getAllCells, so hidden columns remain in the DOM.'
+ - 'Treating absent map entries as hidden; only an explicit false hides a column.'
+ - 'Expecting enableHiding to hide a column when it only controls whether the user or API may hide it.'
+
+ - slug: global-filtering
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Apply one filter across eligible columns with explicit column eligibility and client/manual ownership.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/global-filtering.md',
+ 'TanStack/table:packages/table-core/src/features/global-filtering',
+ 'TanStack/table:examples/react/filters',
+ ]
+ failure_modes:
+ - 'Registering globalFilteringFeature without columnFilteringFeature and a filtered row-model stage when client processing is expected.'
+ - 'Assuming every column participates; the default eligibility checks the first core row value and only accepts strings or numbers.'
+ - 'Using manualFiltering while updating globalFilter state but never sending that value to the server query.'
+
+ - slug: expanding
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Expand hierarchical subrows or custom detail panels and place expansion correctly relative to pagination.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/expanding.md',
+ 'TanStack/table:packages/table-core/src/features/row-expanding',
+ 'TanStack/table:examples/react/expanding',
+ ]
+ failure_modes:
+ - 'Expecting nested data to expand without getSubRows, or expecting a custom detail panel without getRowCanExpand and renderer markup.'
+ - 'Updating expanded state but never rendering subrows or the custom expanded UI because Table is headless.'
+ - 'Assuming paginateExpandedRows changes grouping or flattens visual descendants; it only controls the expanded-row pagination stage.'
+
+ - slug: pagination
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Configure client slicing or manual pages, counts, navigation limits, and automatic page-index resets.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/pagination.md',
+ 'TanStack/table:packages/table-core/src/features/row-pagination',
+ 'TanStack/table:examples/react/pagination',
+ ]
+ failure_modes:
+ - 'Enabling manualPagination and passing all rows while expecting Table to slice them; manual data must already represent the intended page.'
+ - 'Omitting rowCount or pageCount for server pagination and then trusting next-page or last-page availability.'
+ - 'Misdiagnosing pageIndex jumping to zero as failed controlled state when autoResetPageIndex is reacting to client-side data or row-model changes.'
+
+ - slug: row-pinning
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Separate top, center, and bottom rows with stable IDs and explicit rendering/sticky behavior.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/row-pinning.md',
+ 'TanStack/table:packages/table-core/src/features/row-pinning',
+ 'TanStack/table:examples/react/row-pinning',
+ ]
+ failure_modes:
+ - 'Using index-derived row IDs for persistent pinning while sorting, filtering, pagination, or data insertion changes indexes.'
+ - 'Expecting row pinning to add sticky CSS or render top/center/bottom collections in the correct order automatically.'
+ - 'Ignoring keepPinnedRows, so pinned rows remain visible outside the center row model when the desired product behavior was to filter or paginate them away.'
+
+ - slug: cell-selection
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Maintain spreadsheet-style rectangular selections as ordered include/exclude operations anchored to row and column ids, resolving them into disjoint positive regions across sorting, filtering, pagination, and column layout changes.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/cell-selection.md',
+ 'TanStack/table:packages/table-core/src/features/cell-selection',
+ 'TanStack/table:examples/react/cell-selection',
+ ]
+ failure_modes:
+ - 'Expecting cellSelection to be a per-cell map or a list of final positive regions; it is an ordered log of two-corner include/exclude operations, and derived bounds may split one stored range into several regions.'
+ - 'Reordering, deduplicating, or serializing only the corners of controlled cellSelection state and thereby changing or losing subtraction semantics.'
+ - 'Using additive when the intended operation is explicit subtraction; selectCellRange mode is replace, include, or exclude, while additive is only a deprecated include alias.'
+ - 'Assuming Ctrl/Cmd always adds a range; a modified interaction excludes when it starts on a selected cell and includes when it starts on an unselected cell.'
+ - 'Binding only the mousedown handler and expecting drag selection, or reimplementing mouseup even though the start handler owns its own document listener.'
+ - 'Drawing the selection outline with borders on a border-collapse table, which changes row heights as cells become selected.'
+ - 'Re-rendering every cell on each drag update instead of subscribing per row to table.atoms.cellSelection.'
+
+ - slug: cell-spanning
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Merge adjacent body cells into row- and column-spanning cells derived from the rendered row model, with covered cells reporting a span of 0 that renderers must skip.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/cell-spanning.md',
+ 'TanStack/table:packages/table-core/src/features/cell-spanning',
+ 'TanStack/table:examples/react/cell-spanning',
+ ]
+ failure_modes:
+ - 'Rendering a covered cell with rowSpan={0} instead of skipping it; HTML rowspan="0" means span to the end of the row group, so the cell merges down the entire tbody.'
+ - 'Expecting spanning to sort or group rows; it merges adjacent equal values only, so unsorted data renders no merges at all.'
+ - 'Precomputing spans from the source data array, which survives sorting, filtering, and page changes and produces ragged rows.'
+ - 'Assuming a run continues across a page or pinned-section boundary; runs are clipped to the rendered rows of each section.'
+ - 'Pre-expanding stored selection corners to cover merges; selection bounds already expand at derivation time when both features are registered, and pre-expanded corners go stale when sorting or paging changes the merges.'
+
+ - slug: row-selection
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Maintain selection IDs across current, filtered, grouped, and manually paginated data.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/row-selection.md',
+ 'TanStack/table:packages/table-core/src/features/row-selection',
+ 'TanStack/table:examples/react/row-selection',
+ ]
+ failure_modes:
+ - 'Assuming selection mutates application data or is automatically deleted when rows disappear; rowSelection is independent ID state.'
+ - 'Using default index IDs for server pagination or mutable data instead of a stable getRowId.'
+ - 'Treating getSelectedRowModel as a database-wide selection lookup under manual pagination even though only loaded rows can appear in a row model.'
+
+ - slug: sorting
+ package: '@tanstack/table-core'
+ domain: feature-plugins
+ type: feature
+ purpose: 'Configure single/multi sorting, comparison functions, undefined placement, removal cycles, and client/manual ownership.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/sorting.md',
+ 'TanStack/table:packages/table-core/src/features/row-sorting',
+ 'TanStack/table:examples/react/sorting',
+ ]
+ failure_modes:
+ - 'Setting manualSorting and expecting createSortedRowModel to reorder rows; manual mode trusts incoming data.'
+ - 'Writing a custom sortFn that applies ascending/descending direction itself even though Table reverses the comparator result for descending order.'
+ - 'Assuming undefined values, multi-sort gestures, and sort-removal cycles match product expectations without configuring sortUndefined and multi-sort options.'
+
+ - slug: getting-started
+ package: '@tanstack/react-table'
+ domain: framework-adapters
+ type: framework
+ framework: react
+ purpose: 'Create and render a headless v9 React table with useTable and explicit features.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/migrating.md',
+ 'TanStack/table:examples/react/basic-use-table',
+ 'TanStack/table:packages/react-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Copying a v8 useReactTable/getCoreRowModel setup instead of the v9 useTable plus tableFeatures shape.'
+ - 'Expecting useTable to render markup or styles rather than mapping headers, rows, and cells with FlexRender or flexRender.'
+ - 'Creating features, columns, or fallback data inside render without stable references.'
+
+ - slug: table-state
+ package: '@tanstack/react-table'
+ domain: framework-adapters
+ type: framework
+ framework: react
+ purpose: 'Read, subscribe to, control, and optimize React table state with selectors, Subscribe, and external atoms.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/table-state.md',
+ 'TanStack/table:docs/framework/react/guide/react-compiler.md',
+ 'TanStack/table:examples/react/basic-subscribe',
+ 'TanStack/table:packages/react-table/src/Subscribe.ts',
+ 'TanStack/table:packages/react-table/src/useTable.ts',
+ ]
+ failure_modes:
+ - 'Reading table.atoms.x.get or table.store.state during render and assuming that snapshot read subscribes React to future changes.'
+ - 'Providing onSliceChange without state.slice, or failing to apply updater-function values when React owns the slice.'
+ - 'Hiding builder-method state reads in compiler-memoized children without a Subscribe boundary, or adding fine-grained Subscribe everywhere before measuring.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/react-table'
+ domain: framework-adapters
+ type: migration
+ framework: react
+ purpose: 'Migrate React from useReactTable to the native v9 feature, state, rendering, helper, and composable APIs.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/migrating.md',
+ 'TanStack/table:packages/react-table/src/index.ts',
+ 'TanStack/table:packages/react-table/src/legacy.ts',
+ 'TanStack/table:examples/react/basic-use-table',
+ ]
+ failure_modes:
+ - 'Using useLegacyTable as the finished migration rather than converting to useTable and explicit features.'
+ - 'Keeping the removed global onStateChange or v8 row-model options instead of per-slice control and tableFeatures slots.'
+ - 'Missing React-specific FlexRender/Subscribe changes while only applying the core feature renames.'
+
+ - slug: create-table-hook
+ package: '@tanstack/react-table'
+ domain: framework-adapters
+ type: framework
+ framework: react
+ purpose: 'Create a typed app-level React table hook with shared features, options, helpers, components, and contexts.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/composable-tables.md',
+ 'TanStack/table:docs/framework/react/guide/table-context.md',
+ 'TanStack/table:examples/react/composable-tables',
+ 'TanStack/table:packages/react-table/src/createTableHook.tsx',
+ 'TanStack/table:packages/react-table/src/createTableHookContexts.tsx',
+ ]
+ failure_modes:
+ - 'Using createTableHook for a one-off table or registering a full component system when only shared features/defaults are needed.'
+ - 'Prop-drilling table, cell, and header values through registered components instead of using the typed context hooks returned by the same factory.'
+ - 'Creating contexts inside a render path or introducing circular imports between the hook module and registered components, causing HMR or remount failures.'
+
+ - slug: with-tanstack-query
+ package: '@tanstack/react-table'
+ domain: framework-adapters
+ type: integration
+ framework: react
+ purpose: 'Use Query as the server-data source while Table owns data-grid state and explicit manual row-model boundaries.'
+ sources:
+ [
+ 'TanStack/table:examples/react/with-tanstack-query',
+ 'TanStack/table:examples/react/virtualized-infinite-scrolling',
+ 'TanStack/table:docs/framework/react/guide/pagination.md',
+ ]
+ failure_modes:
+ - 'Putting server response data into a second unsynchronized React state layer instead of deriving Table data from the query result.'
+ - 'Omitting pagination, sorting, or filter state from the query key and showing cached data for the wrong table state.'
+ - 'Enabling manual processing without passing server counts, resetting invalid pages, or preserving previous data intentionally.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/react-table'
+ domain: framework-adapters
+ type: integration
+ framework: react
+ purpose: 'Virtualize React rows or columns as a rendering concern layered over the final Table row model.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/react/guide/virtualization.md',
+ 'TanStack/table:examples/react/virtualized-rows',
+ 'TanStack/table:examples/react/virtualized-columns',
+ 'TanStack/table:examples/react/virtualized-infinite-scrolling',
+ ]
+ failure_modes:
+ - 'Treating Virtual as a Table feature or row model instead of virtualizing table.getRowModel().rows in the renderer.'
+ - 'Measuring rows against the wrong scroll element or omitting stable keys and data-index values for dynamic measurement.'
+ - 'Combining semantic table layout, sticky headers/columns, transforms, and dynamic heights without copying the example CSS positioning contract.'
+
+ - slug: getting-started
+ package: '@tanstack/preact-table'
+ domain: framework-adapters
+ type: framework
+ framework: preact
+ purpose: 'Create and render a native Preact v9 table without relying on the React adapter through preact/compat.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/preact/guide/migrating.md',
+ 'TanStack/table:examples/preact/basic-use-table',
+ 'TanStack/table:packages/preact-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Importing @tanstack/react-table through preact/compat instead of the native @tanstack/preact-table v9 adapter.'
+ - 'Copying useReactTable or React-only rendering assumptions instead of Preact useTable and its exported helpers.'
+ - 'Recreating stable features, columns, or data on each render and causing unnecessary option and row-model work.'
+
+ - slug: table-state
+ package: '@tanstack/preact-table'
+ domain: framework-adapters
+ type: framework
+ framework: preact
+ purpose: 'Use selected table.state, Preact subscriptions, controlled slices, and external atoms correctly.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/preact/guide/table-state.md',
+ 'TanStack/table:examples/preact/basic-subscribe',
+ 'TanStack/table:packages/preact-table/src/useTable.ts',
+ ]
+ failure_modes:
+ - 'Reading atom/store snapshots in render as though they create Preact subscriptions.'
+ - 'Pairing an onSliceChange callback with no controlled state.slice value or ignoring updater-function inputs.'
+ - 'Narrowing the useTable selector so far that rendered builder APIs depend on unselected state, or optimizing before a real render problem exists.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/preact-table'
+ domain: framework-adapters
+ type: migration
+ framework: preact
+ purpose: 'Move a v8 React-adapter/preact-compat table onto the native v9 Preact adapter and architecture.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/preact/guide/migrating.md',
+ 'TanStack/table:packages/preact-table/src/index.ts',
+ 'TanStack/table:examples/preact/basic-use-table',
+ ]
+ failure_modes:
+ - 'Treating Preact as a simple hook rename while leaving the React package and compat aliases in place.'
+ - 'Keeping v8 get*RowModel options and globally included features instead of explicit tableFeatures slots.'
+ - 'Missing prototype-method, state, helper, pinning, and sorting renames shared by every v9 adapter.'
+
+ - slug: create-table-hook
+ package: '@tanstack/preact-table'
+ domain: framework-adapters
+ type: framework
+ framework: preact
+ purpose: 'Build a typed reusable Preact table hook and optional component/context registry.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/preact/guide/composable-tables.md',
+ 'TanStack/table:docs/framework/preact/guide/table-context.md',
+ 'TanStack/table:examples/preact/composable-tables',
+ 'TanStack/table:packages/preact-table/src/createTableHook.tsx',
+ 'TanStack/table:packages/preact-table/src/createTableHookContexts.tsx',
+ ]
+ failure_modes:
+ - 'Using the app hook for one table when standalone useTable is clearer.'
+ - 'Importing context hooks from a different factory or reading them outside the matching AppTable/AppCell/AppHeader provider.'
+ - 'Prop-drilling stable table instances through memoized components and expecting context consumers to update without the factory wrappers/subscriptions.'
+
+ - slug: with-tanstack-query
+ package: '@tanstack/preact-table'
+ domain: framework-adapters
+ type: integration
+ framework: preact
+ purpose: 'Drive manually processed Preact table data from TanStack Query and table state.'
+ sources:
+ [
+ 'TanStack/table:examples/preact/with-tanstack-query',
+ 'TanStack/table:docs/framework/preact/guide/pagination.md',
+ ]
+ failure_modes:
+ - 'Copying React Query hook names or React state glue instead of the Preact Query example.'
+ - 'Leaving table state out of the query key or query function request.'
+ - 'Expecting manual pagination/filtering/sorting flags to fetch or transform server data.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/preact-table'
+ domain: framework-adapters
+ type: integration
+ framework: preact
+ purpose: 'Apply Preact Virtual rendering to Table rows or columns using the adapter virtualization guide.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/preact/guide/virtualization.md',
+ 'TanStack/table:packages/preact-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Copying React-only component/hook details instead of using the Preact Virtual API exported for the installed versions.'
+ - 'Virtualizing raw input data instead of the final filtered, sorted, expanded, and paginated row model.'
+ - 'Assuming Table supplies scroll containers, measurements, spacer geometry, sticky CSS, or overscan defaults.'
+
+ - slug: getting-started
+ package: '@tanstack/solid-table'
+ domain: framework-adapters
+ type: framework
+ framework: solid
+ purpose: 'Create a Solid v9 table with createTable, reactive getters, and JSX rendering.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/solid/guide/migrating.md',
+ 'TanStack/table:examples/solid/basic-use-table',
+ 'TanStack/table:packages/solid-table/src/index.tsx',
+ ]
+ failure_modes:
+ - 'Using the v8 createSolidTable entrypoint or a React hook instead of v9 createTable.'
+ - 'Reading a signal once and passing its snapshot as data instead of a getter/reactive option when updates are expected.'
+ - 'Expecting Table to render DOM or CSS rather than iterating row/header APIs in Solid JSX.'
+
+ - slug: table-state
+ package: '@tanstack/solid-table'
+ domain: framework-adapters
+ type: framework
+ framework: solid
+ purpose: 'Use Solid-backed table atoms inside tracked scopes and choose native signals or external atoms for ownership.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/solid/guide/table-state.md',
+ 'TanStack/table:examples/solid/basic-external-state',
+ 'TanStack/table:packages/solid-table/src/createTable.ts',
+ ]
+ failure_modes:
+ - 'Reading table atoms outside JSX, createMemo, createEffect, or another tracked scope and expecting later changes to rerun code.'
+ - 'Calling a state updater with a Solid setter assumption without resolving Table value-or-updater semantics.'
+ - 'Adding React-style broad rerender workarounds instead of relying on Solid narrow atom reads and computations.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/solid-table'
+ domain: framework-adapters
+ type: migration
+ framework: solid
+ purpose: 'Migrate createSolidTable code to v9 createTable, explicit features, atom-backed state, and new helpers.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/solid/guide/migrating.md',
+ 'TanStack/table:packages/solid-table/src/index.tsx',
+ 'TanStack/table:examples/solid/basic-use-table',
+ ]
+ failure_modes:
+ - 'Renaming the entrypoint but retaining v8 row-model options outside tableFeatures.'
+ - 'Forcing React selector patterns into Solid instead of using signal-tracked table atom reads.'
+ - 'Missing shared v9 changes to instance method binding, feature APIs, meta helpers, sorting, and pinning.'
+
+ - slug: create-table-hook
+ package: '@tanstack/solid-table'
+ domain: framework-adapters
+ type: framework
+ framework: solid
+ purpose: 'Create a shared Solid createAppTable and typed helper/component registry without losing reactivity.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/solid/guide/composable-tables.md',
+ 'TanStack/table:examples/solid/composable-tables',
+ 'TanStack/table:packages/solid-table/src/createTableHook.tsx',
+ ]
+ failure_modes:
+ - 'Using createTableHook for a one-off table instead of standalone createTable.'
+ - 'Passing snapshots where createAppTable needs reactive getters or signals for per-table data and state.'
+ - 'Reading context values outside registered App wrappers or prop-drilling the table when returned context hooks express the shared boundary.'
+
+ - slug: with-tanstack-query
+ package: '@tanstack/solid-table'
+ domain: framework-adapters
+ type: integration
+ framework: solid
+ purpose: 'Compose Solid Query resources with manually processed Table state and reactive query inputs.'
+ sources:
+ [
+ 'TanStack/table:examples/solid/with-tanstack-query',
+ 'TanStack/table:docs/framework/solid/guide/pagination.md',
+ ]
+ failure_modes:
+ - 'Passing signal snapshots into the query key so sorting, filtering, or pagination changes are not tracked.'
+ - 'Copying React Query hook/state patterns instead of Solid Query reactive option getters.'
+ - 'Using manual Table flags without returning already processed server data and counts.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/solid-table'
+ domain: framework-adapters
+ type: integration
+ framework: solid
+ purpose: 'Virtualize Solid Table rows/columns and infinite server data while preserving reactive measurements.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/solid/guide/virtualization.md',
+ 'TanStack/table:examples/solid/virtualized-rows',
+ 'TanStack/table:examples/solid/virtualized-columns',
+ 'TanStack/table:examples/solid/virtualized-infinite-scrolling',
+ ]
+ failure_modes:
+ - 'Creating the virtualizer from a non-reactive row count or wrong scroll element.'
+ - 'Virtualizing raw data rather than the current Table row model.'
+ - 'Applying transforms, dynamic measurements, sticky regions, or grid/flex widths inconsistently with the rendered layout.'
+
+ - slug: getting-started
+ package: '@tanstack/svelte-table'
+ domain: framework-adapters
+ type: framework
+ framework: svelte
+ purpose: 'Create a Svelte 5 table with createTable, rune-backed option getters, FlexRender, and headless markup.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/svelte/guide/migrating.md',
+ 'TanStack/table:examples/svelte/basic-create-table',
+ 'TanStack/table:packages/svelte-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Using the v8 createSvelteTable/store API or pre-Svelte-5 syntax instead of v9 createTable and runes.'
+ - 'Passing a one-time data snapshot where a getter is needed for current rune state.'
+ - 'Expecting render helpers to initialize interactive markup or provide table CSS automatically.'
+
+ - slug: table-state
+ package: '@tanstack/svelte-table'
+ domain: framework-adapters
+ type: framework
+ framework: svelte
+ purpose: 'Use rune-aware table atoms and stores, native $derived projections, controlled $state or createTableState slices, and external atoms without broad invalidation or snapshot mismatches.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/svelte/guide/table-state.md',
+ 'TanStack/table:docs/framework/svelte/guide/pagination.md',
+ 'TanStack/table:examples/svelte/basic-external-state',
+ 'TanStack/table:packages/svelte-table/src/createTable.svelte.ts',
+ 'TanStack/table:packages/svelte-table/src/createTableState.svelte.ts',
+ ]
+ failure_modes:
+ - 'Keeping the removed beta.58 createTable/createAppTable selector argument, selected table.state property, subscribeTable helper, or SubscribeSource type after beta.59.'
+ - 'Reading atom or store snapshots outside a tracked Svelte scope and expecting the read itself to keep a consumer reactive.'
+ - 'Reading table.store.get() in an effect that only needs one atom slice, causing unrelated state changes to rerun the effect.'
+ - 'Pairing onSliceChange with a controlled state slice that is not actually written back with value-or-updater semantics.'
+ - 'Blaming pagination reactivity when autoResetPageIndex immediately overwrites an externally requested page.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/svelte-table'
+ domain: framework-adapters
+ type: migration
+ framework: svelte
+ purpose: 'Move Svelte 4/v8 store-oriented tables to the Svelte 5 v9 adapter, explicit features, and rune-backed state.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/svelte/guide/migrating.md',
+ 'TanStack/table:packages/svelte-table/src/index.ts',
+ 'TanStack/table:examples/svelte/basic-create-table',
+ ]
+ failure_modes:
+ - 'Attempting the v9 adapter migration without first adopting Svelte 5-compatible component and reactivity syntax.'
+ - 'Keeping readable-store assumptions or v8 row-model table options after switching to createTable.'
+ - 'Keeping beta.58 creation selectors, table.state, subscribeTable, or their removed selected-state generic parameters after beta.59.'
+ - 'Missing shared v9 prototype, feature, helper, sorting, and logical-pinning changes.'
+
+ - slug: create-table-hook
+ package: '@tanstack/svelte-table'
+ domain: framework-adapters
+ type: framework
+ framework: svelte
+ purpose: 'Define a reusable Svelte createAppTable, typed column helper, and optional component/context registry.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/svelte/guide/composable-tables.md',
+ 'TanStack/table:examples/svelte/composable-tables',
+ 'TanStack/table:packages/svelte-table/src/createTableHook.svelte.ts',
+ ]
+ failure_modes:
+ - 'Reimplementing createAppTable around the framework-agnostic core instead of using the shipped rune-capable createTableHook implementation.'
+ - 'Passing $state snapshots instead of getters to createAppTable, freezing data or controlled state.'
+ - 'Prop-drilling contexts through registered components instead of consuming the typed hooks under matching App wrappers.'
+
+ - slug: with-tanstack-query
+ package: '@tanstack/svelte-table'
+ domain: framework-adapters
+ type: integration
+ framework: svelte
+ purpose: 'Connect Svelte Query data and query keys to manual Table processing state.'
+ sources:
+ [
+ 'TanStack/table:examples/svelte/with-tanstack-query',
+ 'TanStack/table:docs/framework/svelte/guide/pagination.md',
+ ]
+ failure_modes:
+ - 'Building a query from non-reactive snapshots so page, sort, or filter changes do not refetch.'
+ - 'Duplicating query data into unsynchronized $state rather than exposing the query result to Table through a getter.'
+ - 'Expecting manual Table flags to execute network requests or server transformations.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/svelte-table'
+ domain: framework-adapters
+ type: integration
+ framework: svelte
+ purpose: 'Render Svelte Table row/column models through Svelte Virtual with stable measurement and layout.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/svelte/guide/virtualization.md',
+ 'TanStack/table:examples/svelte/virtualized-rows',
+ 'TanStack/table:examples/svelte/virtualized-columns',
+ 'TanStack/table:examples/svelte/virtualized-infinite-scrolling',
+ ]
+ failure_modes:
+ - 'Using a stale row count or scroll element instead of reactive values available to the virtualizer.'
+ - 'Virtualizing source data rather than the final Table row model.'
+ - 'Combining absolute positioning, transforms, sticky regions, and semantic table layout without the required CSS geometry.'
+
+ - slug: getting-started
+ package: '@tanstack/vue-table'
+ domain: framework-adapters
+ type: framework
+ framework: vue
+ purpose: 'Create a Vue v9 table with useTable, reactive options, and template/render helpers.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/vue/guide/migrating.md',
+ 'TanStack/table:examples/vue/basic-use-table',
+ 'TanStack/table:packages/vue-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Using v8 useVueTable or React hook names instead of the installed v9 Vue entrypoint.'
+ - 'Destructuring reactive refs/options into snapshots before passing them to useTable.'
+ - 'Expecting Table to provide a Vue table component or component-library styling.'
+
+ - slug: table-state
+ package: '@tanstack/vue-table'
+ domain: framework-adapters
+ type: framework
+ framework: vue
+ purpose: 'Read Vue-backed table atoms in tracked contexts and control slices with refs, computed values, or external atoms.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/vue/guide/table-state.md',
+ 'TanStack/table:examples/vue/basic-external-state',
+ 'TanStack/table:packages/vue-table/src/useTable.ts',
+ ]
+ failure_modes:
+ - 'Reading an atom snapshot outside a template, computed, watch, or other tracked context and expecting it to update consumers.'
+ - 'Passing a ref value snapshot rather than the ref/computed/getter shape supported by reactive table options.'
+ - 'Ignoring value-or-updater callback semantics when synchronizing controlled refs.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/vue-table'
+ domain: framework-adapters
+ type: migration
+ framework: vue
+ purpose: 'Migrate Vue v8 table construction, row models, state, helpers, and rendering to v9.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/vue/guide/migrating.md',
+ 'TanStack/table:packages/vue-table/src/index.ts',
+ 'TanStack/table:examples/vue/basic-use-table',
+ ]
+ failure_modes:
+ - 'Changing the hook name while retaining v8 row-model options and implicit all-feature behavior.'
+ - 'Flattening refs/computed inputs during migration and losing Vue reactivity.'
+ - 'Missing shared v9 changes to prototype methods, per-table meta, sortFn names, and start/end pinning.'
+
+ - slug: create-table-hook
+ package: '@tanstack/vue-table'
+ domain: framework-adapters
+ type: framework
+ framework: vue
+ purpose: 'Create a reusable Vue useAppTable and typed component/context registry while avoiding circular inference.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/vue/guide/composable-tables.md',
+ 'TanStack/table:examples/vue/composable-tables',
+ 'TanStack/table:packages/vue-table/src/createTableHook.ts',
+ ]
+ failure_modes:
+ - 'Using createTableHook for one table or registering reusable UI components before the app has shared conventions.'
+ - 'Creating a circular inference/import chain between the hook module and registered components instead of exporting explicit context-hook types.'
+ - 'Passing Vue JSX children as slots when table.Subscribe expects an explicit children prop.'
+
+ - slug: with-tanstack-query
+ package: '@tanstack/vue-table'
+ domain: framework-adapters
+ type: integration
+ framework: vue
+ purpose: 'Drive Vue Query keys and server requests from reactive Table state with explicit manual stages.'
+ sources:
+ [
+ 'TanStack/table:examples/vue/with-tanstack-query',
+ 'TanStack/table:docs/framework/vue/guide/pagination.md',
+ ]
+ failure_modes:
+ - 'Unwrapping refs before constructing the query key so table-state changes are not dependencies.'
+ - 'Mirroring query data into an unnecessary second ref and allowing the two sources to drift.'
+ - 'Omitting server counts or expecting manual Table modes to process the returned page.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/vue-table'
+ domain: framework-adapters
+ type: integration
+ framework: vue
+ purpose: 'Layer Vue Virtual rendering over the current Table row/column model and its CSS layout.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/vue/guide/virtualization.md',
+ 'TanStack/table:examples/vue/virtualized-rows',
+ 'TanStack/table:examples/vue/virtualized-columns',
+ 'TanStack/table:examples/vue/virtualized-infinite-scrolling',
+ ]
+ failure_modes:
+ - 'Passing non-reactive counts or scroll targets to the virtualizer.'
+ - 'Virtualizing raw query/data arrays rather than the current Table model.'
+ - 'Assuming virtualization supplies column sizes, sticky CSS, semantic markup, or dynamic-row measurement automatically.'
+
+ - slug: getting-started
+ package: '@tanstack/angular-table'
+ domain: framework-adapters
+ type: framework
+ framework: angular
+ purpose: 'Create an Angular v9 table with injectTable, stable options, signals, and FlexRender directives.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/angular/guide/migrating.md',
+ 'TanStack/table:docs/framework/angular/guide/rendering.md',
+ 'TanStack/table:examples/angular/basic-inject-table',
+ 'TanStack/table:packages/angular-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Calling injectTable outside a valid Angular injection context.'
+ - 'Allocating columns or features inside the signal-tracked options initializer so every signal change rebuilds static inputs.'
+ - 'Treating render functions as Angular components or bypassing the documented structural directives and context injection rules.'
+
+ - slug: table-state
+ package: '@tanstack/angular-table'
+ domain: framework-adapters
+ type: framework
+ framework: angular
+ purpose: 'Use Angular-signal-backed table atoms, computed selectors, controlled signals, and external Store atoms correctly.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/angular/guide/table-state.md',
+ 'TanStack/table:examples/angular/basic-external-state',
+ 'TanStack/table:packages/angular-table/src/injectTable.ts',
+ ]
+ failure_modes:
+ - 'Wrapping every atom read in computed just to make it reactive even though table atoms already read Angular signals.'
+ - 'Reading controlled signals in injectTable and overlooking that each write reruns the initializer and setOptions.'
+ - 'Assigning updater functions directly to signals instead of resolving Table value-or-updater callbacks.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/angular-table'
+ domain: framework-adapters
+ type: migration
+ framework: angular
+ purpose: 'Migrate createAngularTable code to injectTable, v9 features, signal-backed state, and current rendering directives.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/angular/guide/migrating.md',
+ 'TanStack/table:packages/angular-table/src/index.ts',
+ 'TanStack/table:examples/angular/basic-inject-table',
+ ]
+ failure_modes:
+ - 'Renaming createAngularTable to injectTable without moving construction into an injection context.'
+ - 'Retaining v8 get*RowModel options or unstable values inside the reactive initializer.'
+ - 'Missing FlexRender directive, prototype-method, helper, sorting, and logical-pinning changes.'
+
+ - slug: create-table-hook
+ package: '@tanstack/angular-table'
+ domain: framework-adapters
+ type: framework
+ framework: angular
+ purpose: 'Create a typed injectAppTable abstraction with shared features, defaults, components, and DI context.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/angular/guide/composable-tables.md',
+ 'TanStack/table:examples/angular/composable-tables',
+ 'TanStack/table:packages/angular-table/src/helpers/createTableHook.ts',
+ ]
+ failure_modes:
+ - 'Calling injectAppTable or returned context injectors outside Angular injection context.'
+ - 'Prop-drilling table/cell/header values into registered components instead of using the returned typed injection helpers.'
+ - 'Treating arbitrary render values as Angular components and passing them to flexRenderComponent.'
+
+ - slug: with-tanstack-query
+ package: '@tanstack/angular-table'
+ domain: framework-adapters
+ type: integration
+ framework: angular
+ purpose: 'Connect Angular Query to signal-owned Table state and manual server processing.'
+ sources:
+ [
+ 'TanStack/table:examples/angular/with-tanstack-query',
+ 'TanStack/table:docs/framework/angular/guide/table-state.md',
+ 'TanStack/table:docs/framework/angular/guide/pagination.md',
+ ]
+ failure_modes:
+ - 'Reading query-key signals outside a reactive query options function and preventing refetches.'
+ - 'Duplicating query data into another signal without a defined editing/cache ownership model.'
+ - 'Expecting manual Table flags to fetch data or omitting row/page counts required for navigation.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/angular-table'
+ domain: framework-adapters
+ type: integration
+ framework: angular
+ purpose: 'Render Angular Table models through Angular Virtual with correct signals, measurements, and infinite fetching.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/angular/guide/virtualization.md',
+ 'TanStack/table:examples/angular/virtualized-rows',
+ 'TanStack/table:examples/angular/virtualized-columns',
+ 'TanStack/table:examples/angular/virtualized-infinite-scrolling',
+ ]
+ failure_modes:
+ - 'Constructing the virtualizer outside required Angular injection/reactive context or from stale counts.'
+ - 'Virtualizing input data rather than the current Table row model.'
+ - 'Combining measured rows, transforms, sticky regions, and grid/flex sizing without the example layout contract.'
+
+ - slug: getting-started
+ package: '@tanstack/lit-table'
+ domain: framework-adapters
+ type: framework
+ framework: lit
+ purpose: 'Create and render a v9 Lit table through TableController and reactive host updates.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/lit/guide/migrating.md',
+ 'TanStack/table:examples/lit/basic-table-controller',
+ 'TanStack/table:packages/lit-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Using the v8 TableController constructor-with-options thunk instead of passing options to controller.table in render.'
+ - 'Constructing a new controller or selector on every render rather than keeping stable host fields.'
+ - 'Expecting TableController to supply semantic table markup, CSS, or a component library.'
+
+ - slug: table-state
+ package: '@tanstack/lit-table'
+ domain: framework-adapters
+ type: framework
+ framework: lit
+ purpose: 'Use TableController-selected table.state, stable subscriptions, controlled properties, and external atoms.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/lit/guide/table-state.md',
+ 'TanStack/table:examples/lit/basic-external-state',
+ 'TanStack/table:packages/lit-table/src/TableController.ts',
+ ]
+ failure_modes:
+ - 'Reading store snapshots imperatively and assuming the host is subscribed to a custom derived value not selected or subscribed.'
+ - 'Creating selector functions inside render and causing avoidable subscription/update churn.'
+ - 'Providing onSliceChange without reflecting the controlled state.slice back into the next controller.table options.'
+
+ - slug: migrate-v8-to-v9
+ package: '@tanstack/lit-table'
+ domain: framework-adapters
+ type: migration
+ framework: lit
+ purpose: 'Migrate Lit v8 controller construction, row models, state, helpers, and rendering to v9.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/lit/guide/migrating.md',
+ 'TanStack/table:packages/lit-table/src/index.ts',
+ 'TanStack/table:examples/lit/basic-table-controller',
+ ]
+ failure_modes:
+ - 'Passing the options thunk to the v9 TableController constructor instead of controller.table during render.'
+ - 'Keeping v8 get*RowModel table options rather than v9 tableFeatures slots.'
+ - 'Missing shared v9 prototype-method, meta-helper, sorting, and start/end pinning changes.'
+
+ - slug: create-table-hook
+ package: '@tanstack/lit-table'
+ domain: framework-adapters
+ type: framework
+ framework: lit
+ purpose: 'Create a reusable Lit app-table controller/helper layer and consume table context from custom elements.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/lit/guide/composable-tables.md',
+ 'TanStack/table:examples/lit/composable-tables',
+ 'TanStack/table:packages/lit-table/src/createTableHook.ts',
+ ]
+ failure_modes:
+ - 'Calling useAppTable without the Lit host or recreating the backing controller every update.'
+ - 'Assuming Lit tableComponents work exactly like JSX adapter registries; table-level controls may be custom elements using useTableContext.'
+ - 'Prop-drilling a stable table through custom elements instead of consuming the nearest typed app-table context.'
+
+ - slug: with-tanstack-virtual
+ package: '@tanstack/lit-table'
+ domain: framework-adapters
+ type: integration
+ framework: lit
+ purpose: 'Layer Lit Virtual rendering and measurement over the current Table model.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/lit/guide/virtualization.md',
+ 'TanStack/table:examples/lit/virtualized-rows',
+ 'TanStack/table:examples/lit/virtualized-columns',
+ 'TanStack/table:examples/lit/virtualized-infinite-scrolling',
+ ]
+ failure_modes:
+ - 'Creating a virtualizer/controller with the wrong host lifecycle or a stale item count.'
+ - 'Virtualizing raw input data instead of table.getRowModel().rows.'
+ - 'Assuming Virtual or Table owns absolute positioning, measurement attributes, sticky CSS, or column widths.'
+
+ - slug: getting-started
+ package: '@tanstack/octane-table'
+ domain: framework-adapters
+ type: framework
+ framework: octane
+ purpose: 'Create and render an Octane v9 table with application-authored TSRX, stable inputs, keyed lists, and component-scoped render helpers.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/octane/quick-start.md',
+ 'TanStack/table:examples/octane/basic-use-table',
+ 'TanStack/table:packages/octane-table/src/index.ts',
+ 'TanStack/table:packages/octane-table/src/useTable.tsrx',
+ ]
+ failure_modes:
+ - 'Importing another framework adapter or translating React component-return semantics directly instead of using Octane TSRX component bodies.'
+ - 'Invoking FlexRender or other component-scoped helpers as plain functions instead of rendering them as components.'
+ - 'Recreating stable features, columns, or data on each render and causing unnecessary option and row-model work.'
+
+ - slug: table-state
+ package: '@tanstack/octane-table'
+ domain: framework-adapters
+ type: framework
+ framework: octane
+ purpose: 'Use selected table.state, component-scoped Subscribe islands, controlled slices, and synchronous Octane Store atom ownership with commit-safe publication.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/octane/guide/table-state.md',
+ 'TanStack/table:examples/octane/basic-subscribe',
+ 'TanStack/table:examples/octane/basic-external-atoms',
+ 'TanStack/table:packages/octane-table/src/useTable.tsrx',
+ 'TanStack/table:packages/octane-table/src/Subscribe.tsrx',
+ ]
+ failure_modes:
+ - 'Reading atom/store snapshots in render as though they establish an Octane subscription.'
+ - 'Calling table.Subscribe as a normal function and sharing compiler slots instead of mounting an independent component scope.'
+ - 'Expecting controlled options.state to publish during render, or mixing it with an external atom that has ownership precedence.'
+
+ - slug: create-table-hook
+ package: '@tanstack/octane-table'
+ domain: framework-adapters
+ type: framework
+ framework: octane
+ purpose: 'Build a typed reusable Octane table hook with stable App wrappers, registered components, and default or isolated contexts.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/octane/guide/composable-tables.md',
+ 'TanStack/table:docs/framework/octane/guide/table-context.md',
+ 'TanStack/table:examples/octane/composable-tables',
+ 'TanStack/table:packages/octane-table/src/createTableHook.tsrx',
+ 'TanStack/table:packages/octane-table/src/createTableHookContexts.ts',
+ ]
+ failure_modes:
+ - 'Using the app hook for one table when standalone useTable is clearer.'
+ - 'Reading a factory context outside its matching AppTable/AppCell/AppHeader provider or invoking a wrapper as a plain function.'
+ - 'Creating the factory in render and destabilizing wrapper, context, and registered-component identities.'
+
+ - slug: getting-started
+ package: '@tanstack/ember-table'
+ domain: framework-adapters
+ type: framework
+ framework: ember
+ purpose: 'Create an Ember v9 table through the tracked useTable options thunk and render it with Glimmer-native FlexRender components.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/ember/quick-start.md',
+ 'TanStack/table:examples/ember/basic-table',
+ 'TanStack/table:packages/ember-table/src/index.ts',
+ 'TanStack/table:packages/ember-table/src/use-table.ts',
+ 'TanStack/table:packages/ember-table/src/FlexRender.gts',
+ ]
+ failure_modes:
+ - 'Passing an options object instead of a thunk, or failing to read tracked data inside that thunk.'
+ - 'Passing extracted v9 prototype methods through Ember templates without preserving their receiver.'
+ - 'Recreating features, columns, or derived data whenever tracked options rerun.'
+
+ - slug: table-state
+ package: '@tanstack/ember-table'
+ domain: framework-adapters
+ type: framework
+ framework: ember
+ purpose: 'Use Glimmer-tracked table reads and own slices internally, through Ember atoms, or through tracked controlled state.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/ember/guide/table-state.md',
+ 'TanStack/table:examples/ember/basic-external-atoms',
+ 'TanStack/table:examples/ember/basic-external-state',
+ 'TanStack/table:packages/ember-table/src/use-table.ts',
+ 'TanStack/table:packages/ember-table/src/reactivity.ts',
+ 'TanStack/table:packages/ember-table/src/signal.ts',
+ ]
+ failure_modes:
+ - 'Inventing table.Subscribe or using the intentionally no-op table.store.subscribe instead of Glimmer-tracked reads.'
+ - 'Using removed table.getState() rather than table.store.state or a slice atom.'
+ - 'Mixing atoms and state ownership, omitting updater resolution, or trying to replace construct-time atoms after table creation.'
+
+ - slug: create-table-hook
+ package: '@tanstack/ember-table'
+ domain: framework-adapters
+ type: framework
+ framework: ember
+ purpose: 'Share Ember table features, row-model slots, defaults, and inferred column helpers without inventing a component registry.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/ember/guide/composable-tables.md',
+ 'TanStack/table:examples/ember/basic-app-table',
+ 'TanStack/table:packages/ember-table/src/create-table-hook.ts',
+ ]
+ failure_modes:
+ - 'Expecting AppTable/AppCell/context registries that the Ember factory does not implement.'
+ - 'Passing features at each createAppTable call or recreating the app hook in tracked scope.'
+ - 'Putting shared mutable state in factory defaults instead of keeping state ownership per table.'
+
+ - slug: getting-started
+ package: '@tanstack/alpine-table'
+ domain: framework-adapters
+ type: framework
+ framework: alpine
+ purpose: 'Create an Alpine v9 table and render reactive headless markup through Alpine bindings.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/alpine/guide/table-state.md',
+ 'TanStack/table:examples/alpine/basic-create-table',
+ 'TanStack/table:packages/alpine-table/src/index.ts',
+ ]
+ failure_modes:
+ - 'Copying a React/Vue hook API instead of Alpine createTable and its reactive proxy.'
+ - 'Expecting x-html output to initialize nested Alpine directives; interactive controls must exist as real markup/bindings.'
+ - 'Expecting the adapter to provide semantic markup, styling, or component-library integration.'
+
+ - slug: table-state
+ package: '@tanstack/alpine-table'
+ domain: framework-adapters
+ type: framework
+ framework: alpine
+ purpose: 'Use automatically reactive Alpine table reads and own controlled slices through Alpine.reactive or external atoms.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/alpine/guide/table-state.md',
+ 'TanStack/table:examples/alpine/basic-create-table',
+ 'TanStack/table:packages/alpine-table/src/createTable.ts',
+ ]
+ failure_modes:
+ - 'Adding a nonexistent table.Subscribe abstraction instead of reading APIs directly in Alpine bindings.'
+ - 'Passing controlled snapshots instead of getters over Alpine.reactive state.'
+ - 'Ignoring value-or-updater semantics in onSliceChange callbacks or combining state and atoms for the same slice without understanding atom precedence.'
+
+ - slug: create-table-hook
+ package: '@tanstack/alpine-table'
+ domain: framework-adapters
+ type: framework
+ framework: alpine
+ purpose: 'Share Alpine table features, options, and typed column helpers without inventing a component registry.'
+ sources:
+ [
+ 'TanStack/table:docs/framework/alpine/guide/composable-tables.md',
+ 'TanStack/table:examples/alpine/basic-app-table',
+ 'TanStack/table:packages/alpine-table/src/createTableHook.ts',
+ ]
+ failure_modes:
+ - 'Expecting React-style registered cell/header/table components from an Alpine hook that intentionally only shares features and defaults.'
+ - 'Using createTableHook for a single table where standalone createTable is clearer.'
+ - 'Embedding interactive Alpine directives in x-html strings instead of using real markup or Alpine.bind bundles.'
+
+ - slug: devtools
+ package: '@tanstack/table-devtools'
+ domain: observability
+ type: integration
+ purpose: 'Register core table targets and inspect state, options, rows, columns, and feature coverage.'
+ sources:
+ [
+ 'TanStack/table:docs/devtools.md',
+ 'TanStack/table:packages/table-devtools/src/index.ts',
+ 'TanStack/table:packages/table-devtools/src/tableTarget.ts',
+ 'TanStack/table:packages/table-devtools/src/production.ts',
+ ]
+ failure_modes:
+ - 'Registering a table with no non-empty options.key; registration is skipped and Devtools reports no connected table.'
+ - 'Reusing one key for different live tables and replacing the target unexpectedly.'
+ - 'Importing the development-gated entrypoint while expecting full Devtools behavior in production.'
+
+ - slug: devtools
+ package: '@tanstack/react-table-devtools'
+ domain: observability
+ type: integration
+ framework: react
+ purpose: 'Connect and render React Table Devtools with stable table identity and development gating.'
+ sources:
+ [
+ 'TanStack/table:docs/devtools.md',
+ 'TanStack/table:packages/react-table-devtools/src/index.ts',
+ 'TanStack/table:packages/react-table-devtools/src/useTanStackTableDevtools.ts',
+ ]
+ failure_modes:
+ - 'Omitting table options.key and seeing a rendered panel with no registered table.'
+ - 'Calling registration conditionally or with unstable table identity instead of using the adapter hook/component lifecycle.'
+ - 'Assuming the default entrypoint stays functional outside development rather than using or intentionally avoiding the production export.'
+
+ - slug: devtools
+ package: '@tanstack/preact-table-devtools'
+ domain: observability
+ type: integration
+ framework: preact
+ purpose: 'Connect Preact tables to the Devtools target registry and render the native Preact panel.'
+ sources:
+ [
+ 'TanStack/table:docs/devtools.md',
+ 'TanStack/table:packages/preact-table-devtools/src/index.ts',
+ 'TanStack/table:packages/preact-table-devtools/src/useTanStackTableDevtools.ts',
+ ]
+ failure_modes:
+ - 'Copying React Devtools imports instead of the Preact package API.'
+ - 'Omitting a stable options.key or failing to clean up/re-register when the table changes.'
+ - 'Expecting development-gated exports to inspect tables in a production build.'
+
+ - slug: devtools
+ package: '@tanstack/solid-table-devtools'
+ domain: observability
+ type: integration
+ framework: solid
+ purpose: 'Connect Solid tables to Devtools with reactive registration and the correct development/production exports.'
+ sources:
+ [
+ 'TanStack/table:docs/devtools.md',
+ 'TanStack/table:packages/solid-table-devtools/src/index.ts',
+ 'TanStack/table:packages/solid-table-devtools/src/useTanStackTableDevtools.ts',
+ ]
+ failure_modes:
+ - 'Passing a stale table snapshot to registration rather than evaluating it in the intended Solid reactive owner.'
+ - 'Omitting options.key and silently failing target registration after the logged warning.'
+ - 'Importing the no-op development-gated component/plugin in production and expecting a panel.'
+
+ - slug: devtools
+ package: '@tanstack/vue-table-devtools'
+ domain: observability
+ type: integration
+ framework: vue
+ purpose: 'Connect Vue table refs to Devtools and preserve reactive target cleanup.'
+ sources:
+ [
+ 'TanStack/table:docs/devtools.md',
+ 'TanStack/table:packages/vue-table-devtools/src/index.ts',
+ 'TanStack/table:packages/vue-table-devtools/src/useTanStackTableDevtools.ts',
+ ]
+ failure_modes:
+ - 'Unwrapping a table ref once and preventing registration from following later table changes.'
+ - 'Omitting the table key or reusing it across simultaneous tables.'
+ - 'Expecting the development-gated default entrypoint to remain active in production.'
+
+ - slug: devtools
+ package: '@tanstack/angular-table-devtools'
+ domain: observability
+ type: integration
+ framework: angular
+ purpose: 'Register Angular signal-provided tables with Devtools inside injection context.'
+ sources:
+ [
+ 'TanStack/table:docs/devtools.md',
+ 'TanStack/table:packages/angular-table-devtools/src/index.ts',
+ 'TanStack/table:packages/angular-table-devtools/src/injectTanStackTableDevtools.ts',
+ ]
+ failure_modes:
+ - 'Calling injectTanStackTableDevtools outside Angular injection context.'
+ - 'Omitting options.key or returning an undefined table without understanding registration is intentionally disabled.'
+ - 'Expecting Angular isDevMode-gated exports to render full Devtools in production.'
+
+ - slug: fuzzy-ranking
+ package: '@tanstack/match-sorter-utils'
+ domain: utilities
+ type: core
+ purpose: 'Rank items, filter on passed, and compare stored ranking metadata without conflating fuzzy matching with Table itself.'
+ sources:
+ [
+ 'TanStack/table:packages/match-sorter-utils/src/index.ts',
+ 'TanStack/table:docs/framework/react/guide/fuzzy-filtering.md',
+ 'TanStack/table:examples/react/filters-fuzzy',
+ ]
+ failure_modes:
+ - 'Using the numeric rank as a boolean instead of checking RankingInfo.passed against the configured threshold.'
+ - 'Calling rankItem again during sorting instead of storing RankingInfo as filter metadata and comparing it with compareItems.'
+ - 'Assuming accessors return arbitrary values; matching prepares string values and accessor configuration controls thresholds and ranking bounds.'
+
+cross_references:
+ - from: 'core'
+ to: 'table-features'
+ reason: 'Every non-core API and state slice depends on feature registration.'
+ - from: 'table-features'
+ to: 'api-not-found'
+ reason: 'A missing feature is the first diagnostic for a missing v9 API.'
+ - from: 'client-vs-server'
+ to:
+ [
+ 'column-filtering',
+ 'global-filtering',
+ 'grouping',
+ 'sorting',
+ 'expanding',
+ 'pagination',
+ ]
+ reason: 'Manual flags bypass the matching client row-model stages.'
+ - from: 'typescript'
+ to: ['table-features', 'create-table-hook']
+ reason: 'Feature and app-hook factories are the main sources of inferred v9 userland types.'
+ - from: 'column-faceting'
+ to: ['column-filtering', 'global-filtering']
+ reason: 'Facet values depend on active filter context and eligible columns.'
+ - from: 'grouping'
+ to: ['expanding', 'pagination']
+ reason: 'Grouped rows are expanded row trees and count as rows during pagination.'
+ - from: 'column-pinning'
+ to: ['column-sizing', 'column-resizing']
+ reason: 'Sticky offsets are computed from the numeric column sizing model.'
+ - from: 'pagination'
+ to: ['row-selection', 'with-tanstack-query']
+ reason: 'Manual pages change which selected IDs have loaded Row objects and usually drive a query key.'
+ - from: 'table-state'
+ to: ['create-table-hook', 'with-tanstack-query', 'with-tanstack-virtual']
+ reason: 'Reusable components and integrations must read state through the adapter reactive model.'
+ - from: 'migrate-v8-to-v9'
+ to: ['table-features', 'table-state', 'typescript', 'api-not-found']
+ reason: 'Migration problems span architecture, state, types, and renamed/gated APIs.'
+
+issue_evidence:
+ - cluster: 'Feature and API discovery'
+ references: ['discussion/5834', 'issue/6212', 'issue/6311']
+ finding: 'V9 modularity, renamed registries, and type-gated APIs make installed-source lookup and feature registration essential.'
+ - cluster: 'Composable tables and context'
+ references: ['issue/6348', 'issue/6323', 'issue/6199', 'issue/2344']
+ finding: 'Circular imports, context identity, and remount/stale-input failures justify dedicated createTableHook skills.'
+ - cluster: 'Framework state and compiler reactivity'
+ references:
+ ['issue/6224', 'issue/6236', 'issue/6374', 'issue/6117', 'issue/5903']
+ finding: 'Snapshot reads, controlled updater semantics, auto resets, and compiler-hidden method reads are recurring silent failures.'
+ - cluster: 'Manual row models'
+ references:
+ [
+ 'issue/4917',
+ 'issue/5110',
+ 'issue/4771',
+ 'issue/5850',
+ 'discussion/3552',
+ 'discussion/5137',
+ ]
+ finding: 'Users routinely expect manual flags to process rows or assume off-page rows remain available as Row objects.'
+ - cluster: 'TypeScript inference'
+ references:
+ [
+ 'issue/4241',
+ 'issue/4382',
+ 'issue/4387',
+ 'discussion/4195',
+ 'discussion/4220',
+ ]
+ finding: 'Manual ColumnDef annotations and deep generics erase TValue inference or overload TypeScript; v9 helpers should lead.'
+ - cluster: 'Renderer-owned layout'
+ references:
+ [
+ 'issue/5783',
+ 'issue/5986',
+ 'discussion/4179',
+ 'discussion/4439',
+ 'discussion/3259',
+ ]
+ finding: 'Pinning, width, alignment, RTL, and responsive behavior require explicit renderer CSS and stable sizing inputs.'
+
+documentation_read:
+ narrative_docs: 'All 187 narrative Markdown documents were inventoried by title, headings, and admonitions; foundational, feature, state, migration, composable, and virtualization guides were deep-read.'
+ generated_references: 'All 828 generated reference documents were inventoried for exports and API categories; exact API truth is delegated to installed dist declarations (.d.ts) in skills.'
+ examples: 'All 277 example directories were inventoried; basic, state, composable, Query, Virtual, feature, and Devtools-relevant examples were sampled or deep-read by skill.'
+ source: 'All public package entrypoints, tableFeatures prerequisites, core construction/state precedence, all 16 feature implementations/defaults, createTableHook implementations, Devtools registration, and match-sorter-utils source were inspected.'
+ community: 'Recent v9 issues plus recurring high-signal issues and GitHub discussions were reviewed for failure modes and misconceptions.'
+
+open_gaps:
+ - skill: 'table-features'
+ question: 'Should stockFeatures be framed only as a migration/kitchen-sink convenience, or also as an acceptable default for small applications unconcerned with bundle size?'
+ status: resolved
+ decision: 'Explicit features are the default; stockFeatures is migration and kitchen-sink convenience.'
+ - skill: 'client-vs-server'
+ question: 'Should mixed pipelines such as server filtering/sorting plus client pagination be presented neutrally, or discouraged unless all required rows are loaded?'
+ status: resolved
+ decision: 'Mixed pipelines are valid, but skills must name the owner and available dataset for every stage.'
+ - skill: 'create-table-hook'
+ question: 'Should createTableHook be recommended as the standard app-level abstraction once an application has multiple tables, with standalone table creation reserved for one-offs?'
+ status: resolved
+ decision: 'Recommend createTableHook for recurring app conventions and standalone creation for one-offs.'
+ - skill: 'create-table-hook'
+ question: 'How strongly should context/injection be preferred over prop drilling when registered components need the table, cell, or header?'
+ status: resolved
+ decision: 'Prefer the typed context or injection helpers returned by the same factory inside registered components.'
+ - skill: 'migrate-v8-to-v9'
+ question: 'Should useLegacyTable be omitted unless it already appears in user code, or included as a clearly deprecated emergency bridge in a Common Mistakes note?'
+ status: resolved
+ decision: 'Mention it only when encountered and identify it as a deprecated temporary bridge, never the migration target.'
+ - skill: 'with-tanstack-virtual'
+ question: 'Should the skills cover only the maintained examples, or also mention unsupported combinations such as drag-and-drop plus virtualization as user-owned composition?'
+ status: resolved
+ decision: 'Teach maintained examples; briefly label unsupported combinations as user-owned composition without prescribing an unmaintained recipe.'
+ - skill: 'devtools'
+ question: 'Should production entrypoints be taught as supported production inspection, or should normal guidance keep Devtools development-only?'
+ status: resolved
+ decision: 'Keep normal guidance development-only; explain production entrypoints only when explicitly requested.'
+
+maintainer_interview:
+ phase_2_completed: true
+ phase_2_summary:
+ - 'Primary journeys are first table setup, adding a feature, v8-to-v9 migration, server-data decisions, and performance debugging.'
+ - 'Table is headless and compatible with component libraries/design systems, but no library-specific skills are in scope.'
+ - 'Feature skills should be short, edge-case-first, and route exact API discovery to installed dist declarations (.d.ts).'
+ - 'Framework state guides, createTableHook, Query, and Virtual require dedicated adapter guidance where source exists.'
+ - 'Worker row models are excluded and useLegacyTable must not be promoted.'
+ phase_4_completed: true
+ phase_4_answers_accepted: true
diff --git a/_artifacts/skill_spec.md b/_artifacts/skill_spec.md
new file mode 100644
index 0000000000..00de2f975d
--- /dev/null
+++ b/_artifacts/skill_spec.md
@@ -0,0 +1,399 @@
+# TanStack Table v9 skill specification
+
+Status: reviewed
+Date: 2026-07-29
+Library target: TanStack Table v9, authored in stable-release voice
+Package metadata target: exact workspace package versions; release automation keeps every shipped skill synchronized
+
+This specification is the generation contract for a deliberately smaller, foot-gun-first TanStack Intent skill set. It is not a documentation outline. The complete evidence and failure-mode inventory is in domain_map.yaml.
+
+## Outcome
+
+Generate 80 short package-local skills across all 18 public packages. A loaded skill should quickly do three things:
+
+1. Correct the user or agent mental model.
+2. Show the smallest reliable setup or decision pattern.
+3. Route exact API discovery to installed package declarations (`dist/**/*.d.ts`, Ember `declarations/**/*.d.ts`, Angular `dist/types/*.d.ts`).
+
+The skills should not enumerate every option or method. That duplicates generated reference docs, ages badly, and encourages agents to recall the wrong major version.
+
+## Maintainer intent
+
+- TanStack Table is headless. It coordinates table state and row processing; the user owns markup, styles, accessibility, and component-library integration.
+- V9 optional features are plugins. A feature API, state slice, row model, or function registry exists only when the matching feature is registered through tableFeatures.
+- The client/server row-model boundary is a first-order architecture decision. Manual modes bypass Table processing; they do not perform server work.
+- Most userland TypeScript should be inferred through helpers, features, options, and app-hook factories. Deep manual generics are a smell.
+- createTableHook is important v9 guidance for reusable app-level table infrastructure. It deserves one dedicated skill in every framework package.
+- Framework table-state guidance is fundamental and should retain substantially more depth than ordinary feature skills.
+- Data and columns are model inputs and must retain stable references between meaningful changes in every adapter and composition example.
+- V8-to-v9 migration is a primary route. Deprecated useLegacyTable is not the destination and must not be promoted.
+- TanStack Query usually owns data before it reaches Table. TanStack Virtual is intertwined with Table rendering after the final row/column model exists.
+- CSS/layout failure modes belong in the relevant pinning, sizing, resizing, and virtualization skills. Component-library-specific skills do not.
+- Worker row models are excluded.
+
+## Source-of-truth hierarchy
+
+Use evidence in this order:
+
+1. Installed package declarations (`.d.ts`) for exact exports, type signatures, feature prerequisites, defaults, and instance APIs.
+2. Current v9 guides for intended mental models and supported workflows.
+3. Current examples for maintained composition and rendering patterns.
+4. Recent and recurring GitHub issues/discussions for silent failures and misconceptions.
+
+Every skill that discusses APIs must tell the consuming agent how to inspect the matching installed declarations. Preferred routes:
+
+- Adapter API: node_modules/@tanstack/FRAMEWORK-table/dist/index.d.ts, then the matching exported `*.d.ts` file.
+- Core API: node_modules/@tanstack/table-core/dist/index.d.ts.
+- Stock feature API: node_modules/@tanstack/table-core/dist/features/FEATURE/.
+- Ember API: node_modules/@tanstack/ember-table/declarations/index.d.ts (and sibling `declarations/*.d.ts`).
+- Angular API: node_modules/@tanstack/angular-table/dist/types/\*.d.ts (bundled public API; do not expect `src/helpers/` under the published package).
+- Octane API: node_modules/@tanstack/octane-table/src/index.d.ts, the matching `*.tsrx.d.ts` sidecar, and `src/types.ts` (the package intentionally distributes authored source).
+- Devtools API: node_modules/@tanstack/FRAMEWORK-table-devtools/dist/index.d.ts or @tanstack/table-devtools/dist/index.d.ts.
+- Fuzzy ranking API: node_modules/@tanstack/match-sorter-utils/dist/index.d.ts.
+
+Do not open package `src/` under `node_modules` unless the package intentionally publishes source, as `@tanstack/octane-table` does. Do not direct agents to a GitHub main-branch source file when an installed package is available. Installed declarations and published source keep guidance aligned with the consumer package version.
+
+## Skill writing contract
+
+### Frontmatter
+
+Each generated SKILL.md must satisfy the current TanStack Intent validator:
+
+- name is the leaf directory segment.
+- description is a dense routing description no longer than 1024 characters.
+- metadata contains type, library, library_version, and framework when applicable.
+- sources remains top-level and lists only repo files/directories actually used by that skill.
+- framework skills include a top-level requires array.
+- no skill exceeds 500 lines.
+
+The metadata version must record the exact package version even though prose treats v9 as stable. Do not call ordinary v9 APIs experimental or advise waiting for stable.
+
+### Body shape
+
+Prefer 60-180 lines. Table-state, migration, createTableHook, and Virtual skills may be longer when the adapter genuinely differs.
+
+Use this default structure:
+
+1. One-paragraph mental model.
+2. Setup: imports and the smallest valid configuration.
+3. Two to four decision or implementation patterns.
+4. Common mistakes: at least three concrete failures with correction.
+5. API discovery: exact installed declaration route (`.d.ts`) and identifiers to inspect.
+6. Cross-skill routing only when another skill owns the next decision.
+
+Do not add a reference folder by default. Add one only when a large migration mapping or framework-specific content cannot stay concise in SKILL.md. Progressive disclosure is a size tool, not permission to recreate all docs as references.
+
+### Migration skill exception
+
+The table-core and seven adapter migrate-v8-to-v9 skills are intentionally comprehensive. They may approach the 500-line limit and must list every breaking change in the maintained migration guide, not merely three common mistakes or a short route to the docs.
+
+Every adapter migration skill must be usable on its own and include:
+
+- its framework-version prerequisite, package change, and construction entrypoint mapping;
+- the complete shared architecture changes for tableFeatures, all stock feature imports, row-model slots, function registries, and stockFeatures audit guidance;
+- the full logical start/end column-pinning mapping;
+- prototype-method binding and enumeration/spread consequences;
+- state access, selector/subscription, controlled-state, external-atom, precedence, and onStateChange changes for that adapter;
+- createColumnHelper/columns(), rendering, tableOptions, and createTableHook changes;
+- pinning-option, sizing/resizing, sorting, removed-internal, row, and row-selection API changes;
+- all TypeScript generic, meta, function-registry augmentation, StockFeatures, and RowData changes;
+- an exhaustive checkbox audit at the end.
+
+Do not rely on the core migration skill to hide shared changes from an adapter migration. The requires relationship supplies context, but migration users commonly load only the adapter skill and need the full audit surface there. Keep detailed mappings in SKILL.md unless the file would exceed Intent's 500-line limit.
+
+### Table-state skill exception
+
+Every framework table-state skill must preserve substantially more of its guide than an ordinary feature skill because state coordination is the library's foundational behavior. Include:
+
+- internal state as the default and the reasons to hoist only selected slices;
+- feature-gated state and typing;
+- `baseAtoms`, readonly derived `atoms`, the flat `store`, and any adapter-selected `table.state` surface;
+- snapshot reads versus the adapter's tracked/subscribed reads;
+- one owner per slice across internal state, `initialState`, external `atoms`, and `state` plus `on[State]Change`;
+- precedence, value-or-updater handling, and removal of the v8 global `onStateChange` option;
+- preferred feature-method writes, low-level base-atom writes, initial/reset semantics, and externally owned reset limitations;
+- feature-specific types and `TableState` inference;
+- framework-specific selector, subscription, compiler, signal, rune, ref, controller, or proxy behavior.
+
+Retain concrete wrong-versus-correct examples for the adapter's most likely subscription and controlled-state mistakes. Table-state skills may exceed the normal 180-line target while remaining below Intent's 500-line limit.
+
+### Stable model-input invariant
+
+Treat stable `data` and `columns` references as a correctness and performance invariant, including in client/server and Query examples. Never place `.map()`, `.filter()`, `.slice()`, a column factory, or a fresh `[]` fallback inline in table options that can be reevaluated. Use module/component-lifetime constants, framework memo/computed primitives, stable reactive containers, or stable Query result arrays. “Manual” row processing changes ownership; it does not relax reference stability.
+
+### Custom-feature completeness exception
+
+The custom-features skill must enumerate all 10 public declaration-merge FeatureMaps: table state, table options, table, column definition, column, row, cell, header, row-model functions, and cached row models. Explain that `Plugins` registers the feature key and that declarations add types only; each advertised runtime surface needs matching lifecycle wiring.
+
+Enumerate both API utilities and every installation path: `assignTableAPIs` in `constructTableAPIs`, plus `assignPrototypeAPIs` in `assignColumnPrototype`, `assignRowPrototype`, `assignCellPrototype`, and `assignHeaderPrototype`. Include the static-name prefixes, prototype self argument, optional `memoDeps`, shared-prototype constraint, `initColumnInstanceData`/`initRowInstanceData`, and the fact that per-object `assignColumnAPIs`-style utilities do not exist. Clearly label row-model maps as advanced internal pipeline surfaces requiring explicit runtime/cache wiring.
+
+Use one annotated, authoritative feature example for the complete shape. Do not stack a minimal density example, a second FeatureMap example, a third API-installation example, and then repeat their distinction under Common Mistakes. Keep selection guidance and foot-guns as compact prose around the single example.
+
+### Code examples
+
+- Use v9 names and shapes only unless a migration skill is explicitly contrasting v8.
+- Use the smallest feature set needed by the example.
+- Keep features, data, columns, and other static inputs stable. Derive changing data with the adapter's memo/computed primitive and never use fresh inline fallback arrays in repeated option evaluation.
+- Show row-model factories as slots in tableFeatures, after their prerequisite feature.
+- Keep markup generic and unstyled unless demonstrating a CSS/layout foot-gun.
+- Prefer helper inference over explicit Table feature generic plumbing.
+- Never show useLegacyTable as the recommended solution.
+
+### Common Mistakes quality bar
+
+A mistake must be plausible, consequential, and grounded in source, docs, examples, or maintainer/community evidence. Prefer failures that compile or render but behave incorrectly:
+
+- missing feature registration;
+- manual mode bypasses a row model;
+- snapshot read is not a framework subscription;
+- controlled callback does not write back the updater;
+- unstable data/columns/features redo work;
+- hidden columns rendered from non-visibility-aware APIs;
+- pinning/sizing state not applied in CSS;
+- off-page selected IDs mistaken for loaded Row objects;
+- v8 or another adapter API hallucinated from memory.
+
+Avoid padding Common Mistakes with generic advice such as read the docs, handle errors, or add tests.
+
+Use Wrong/Correct only when the Wrong form is demonstrably broken or misleading. Do not place a valid default, canonical adapter pattern, or supported tradeoff in the Wrong slot. Present those cases as decisions with consequences instead.
+
+### Executable validation
+
+- `intent validate` checks structure, frontmatter, sources, requires, and artifacts.
+- `skills:versions:check` compares each skill's `metadata.library_version` with its package and verifies artifact overrides.
+- `test:skill-content` checks high-risk generated-content invariants, including Markdown table shape, package imports, feature gating, stable empty fallbacks, adapter subscription shapes, and resize input events.
+- Add `` immediately before a self-contained TypeScript/TSX fence when its exact code is load-bearing. `test:skill-snippets` compiles each marked fence against workspace source. A marker may specify `prelude=path` or `tsconfig=path` when the snippet needs an explicit checked context.
+- Virtual composition guidance must be copied from or kept structurally faithful to the maintained adapter guide/example. When evidence is absent, route to the documented supported composition instead of inventing an adapter package or API.
+
+These checks run in `pnpm test:skills`. They supplement review; they do not justify expanding skills into API summaries.
+
+### Release version synchronization
+
+Skill versions ship with package versions. After release tooling calculates package versions, run `pnpm skills:versions:fix` before publishing and `pnpm skills:versions:check` as a guard. The sync updates package-local skill frontmatter and repo-root artifact version overrides together.
+
+## Routing taxonomy
+
+### Foundations and migration — @tanstack/table-core (7)
+
+- core — headless philosophy, core model, stable inputs, renderer ownership.
+- table-features — explicit registration, prerequisites, row-model/function slots, tree-shaking.
+- client-vs-server — choose ownership for filtering/grouping/sorting/expanding/pagination.
+- typescript — columnHelper, meta helpers, tableOptions, inference, avoid manual generics.
+- api-not-found — inspect installed declarations, feature gating, version/adapter mismatch, prototypes.
+- custom-features — plugin lifecycle after exhausting built-in APIs and meta.
+- migrate-v8-to-v9 — shared breaking changes and adapter migration routing.
+
+### Stock feature plugins — @tanstack/table-core (16)
+
+- aggregation
+- cell-selection
+- column-faceting
+- column-filtering
+- grouping
+- column-ordering
+- column-pinning
+- column-resizing
+- column-sizing
+- column-visibility
+- global-filtering
+- expanding
+- pagination
+- row-pinning
+- row-selection
+- sorting
+
+Each feature skill must:
+
+- name the feature import;
+- name only row-model and registry slots relevant to that feature;
+- state its tableFeatures prerequisites;
+- distinguish state from row processing and renderer behavior;
+- route exact API discovery to its shipped feature directory under `dist/features/`;
+- include feature-specific edge cases from domain_map.yaml.
+
+Do not combine all column layout features into one summary. Their plugin prerequisites and CSS responsibilities differ enough to route independently.
+
+### Framework adapter set
+
+React, Preact, Solid, Svelte, Vue, and Angular each ship six skills:
+
+- getting-started
+- table-state
+- migrate-v8-to-v9
+- create-table-hook
+- with-tanstack-query
+- with-tanstack-virtual
+
+Lit ships five:
+
+- getting-started
+- table-state
+- migrate-v8-to-v9
+- create-table-hook
+- with-tanstack-virtual
+
+Alpine ships three:
+
+- getting-started
+- table-state
+- create-table-hook
+
+Ember ships three:
+
+- getting-started
+- table-state
+- create-table-hook
+
+Octane ships three:
+
+- getting-started
+- table-state
+- create-table-hook
+
+Do not add Query where no maintained adapter example exists. Do not add Alpine, Ember, or Octane migration skills because none has a v8 adapter journey to teach. Do not add Ember or Octane Query or Virtual skills until maintained adapter examples exist. Do not invent Preact virtualization examples; its Virtual skill should rely on the maintained adapter guide and installed APIs.
+
+### Devtools set (6)
+
+Each Devtools package ships one skill named devtools:
+
+- @tanstack/table-devtools
+- @tanstack/react-table-devtools
+- @tanstack/preact-table-devtools
+- @tanstack/solid-table-devtools
+- @tanstack/vue-table-devtools
+- @tanstack/angular-table-devtools
+
+All Devtools skills must emphasize the required non-empty table options.key, lifecycle-aware registration, unique keys, and development/production export behavior. Keep the framework-neutral package focused on target registration and inspection; keep adapters focused on their hook/injection/plugin lifecycle.
+
+### Utility set (1)
+
+@tanstack/match-sorter-utils ships fuzzy-ranking. Teach the three-stage pattern: rank with rankItem, filter with RankingInfo.passed, then sort stored metadata with compareItems. Route Table-specific filter metadata wiring to column-filtering/global-filtering rather than turning this utility skill into a Table feature summary.
+
+## Package coverage
+
+| Package | Skills |
+| -------------------------------- | -----: |
+| @tanstack/table-core | 23 |
+| @tanstack/react-table | 6 |
+| @tanstack/preact-table | 6 |
+| @tanstack/octane-table | 3 |
+| @tanstack/solid-table | 6 |
+| @tanstack/svelte-table | 6 |
+| @tanstack/vue-table | 6 |
+| @tanstack/angular-table | 6 |
+| @tanstack/lit-table | 5 |
+| @tanstack/alpine-table | 3 |
+| @tanstack/ember-table | 3 |
+| @tanstack/table-devtools | 1 |
+| @tanstack/react-table-devtools | 1 |
+| @tanstack/preact-table-devtools | 1 |
+| @tanstack/solid-table-devtools | 1 |
+| @tanstack/vue-table-devtools | 1 |
+| @tanstack/angular-table-devtools | 1 |
+| @tanstack/match-sorter-utils | 1 |
+| Total | 80 |
+
+## Framework distinctions that must survive generation
+
+### React
+
+- useTable returns selected table.state; the default selector selects all registered state.
+- table.atoms.get and table.store.state are snapshot reads, not React subscriptions.
+- Subscribe is the supported fine-grained boundary and React Compiler escape hatch for builder-method reads hidden in memoized children.
+- Do not prescribe fine-grained subscription machinery until render cost or compiler behavior requires it.
+
+### Preact
+
+- Use the native Preact package, not React through preact/compat.
+- State selection and Subscribe resemble React but must use Preact adapter/store imports.
+
+### Octane
+
+- The package distributes authored TypeScript and TSRX; consumer tooling compiles it for the current target and mode. Components use TSRX component bodies plus keyed `@for` loops where appropriate.
+- `useTable` stages fresh options for same-render reads, selects `table.state`, and publishes controlled state only from an accepted layout commit; abandoned work cannot notify the store.
+- Render `table.Subscribe` and the createTableHook App wrappers as components so each has an independent Octane hook/context scope; never invoke them as plain functions.
+- Use `@tanstack/octane-store` for external atoms. External atoms are synchronous owners and take precedence over controlled `options.state`.
+- Native text inputs update on `onInput`; `onChange` follows native change timing rather than React's input-event alias.
+
+### Solid
+
+- createTable atoms are backed by Solid primitives; reads are reactive only inside tracked scopes.
+- Prefer native signals for framework-owned state and external TanStack Store atoms for cross-app atom ownership.
+
+### Svelte
+
+- V9 targets Svelte 5 and runes.
+- Read a slice with `table.atoms..get()` and the complete state with `table.store.get()` inside templates, `$derived`, `$derived.by`, or `$effect`; reads outside tracked scopes are current snapshots.
+- Starting in beta.59, Svelte has no table-creation selector, selected `table.state`, `subscribeTable`, or `SubscribeSource`; use native `$derived` projections instead.
+- Prefer `$state` plus getter-backed controlled slices, or `createTableState` for an updater-compatible getter/setter pair. Keep `useSelector` only for raw external atoms consumed outside the table.
+- Reactive data and controlled values commonly need getters; avoid passing snapshots.
+- The shipped `createTableHook` implementation supplies rune semantics, so an app hook that calls it may live in a normal `.ts` module.
+
+### Vue
+
+- Preserve refs/computed/reactive option shapes rather than destructuring snapshots.
+- In JSX, table.Subscribe receives children as an explicit prop.
+- The composable component registry may require explicit exported context-hook types to break circular inference.
+
+### Angular
+
+- injectTable, injectAppTable, Devtools injection, and returned context helpers require Angular injection context.
+- Signal reads inside the options initializer cause setOptions to run again; keep features/columns and other static values outside it.
+- Preserve FlexRender directive and component-vs-function rendering distinctions.
+
+### Lit
+
+- TableController is a stable host field; v9 passes options to controller.table during render.
+- Keep selector references stable.
+- createTableHook table-level controls may consume context from custom elements rather than a JSX-style tableComponents registry.
+
+### Alpine
+
+- The table proxy automatically makes API reads reactive inside Alpine bindings; there is no table.Subscribe.
+- x-html does not initialize nested Alpine directives.
+- createTableHook shares features/options/helpers, not a reusable component registry.
+
+### Ember
+
+- `useTable` and `createAppTable` take options thunks; tracked values must be read inside the thunk while features, atoms, and columns remain stable.
+- Glimmer tracks table API and Ember atom reads directly. There is no table.Subscribe, `table.store.subscribe` is intentionally a no-op, and v8 `table.getState()` is removed.
+- V9 prototype methods need their receiver, so templates use getters or module helpers rather than extracted table/column/row methods.
+- FlexRender components receive `@ctx` and optional `@options`.
+- Ember createTableHook shares features/defaults and inferred column helpers; it does not provide component or context registries.
+
+## Cross-cutting placement rules
+
+- Performance: stable inputs in getting-started/core; adapter-specific fine-grained state reads or selectors in table-state; CSS variables in resizing; measurement/overscan in Virtual; row ownership in client-vs-server.
+- CSS: pinning, sizing, resizing, and Virtual skills only. Core may state that CSS is user-owned.
+- Accessibility: core/getting-started may remind that headless rendering leaves semantics and interaction accessibility with the renderer; do not create a component-library integration skill.
+- Query: data source and manual processing boundaries, not Table rendering.
+- Virtual: final Table models and renderer geometry, never tableFeatures.
+- Context: createTableHook skills; mention context over prop drilling when a registered reusable component needs typed table/cell/header access.
+- API lookup: api-not-found establishes the workflow; every other skill includes its direct installed declaration route.
+
+## Anti-patterns forbidden during generation
+
+- A skill that is primarily a list of every exported API.
+- One giant all-features or all-frameworks skill.
+- Per-component-library skills or shadcn/MUI/Mantine-specific code.
+- Worker row-model instructions.
+- A dedicated generic performance checklist divorced from the feature causing the work.
+- V8 setup in non-migration examples.
+- useLegacyTable as a recommended quick start.
+- Deep explicit generic signatures copied from internal types when helpers can infer them.
+- Claims that pinning, sizing, resizing, expansion, or virtualization render their UI/CSS automatically.
+- Claims that a manual flag calls a backend.
+
+## Maintainer review decisions
+
+The maintainer accepted these generation positions on 2026-07-10:
+
+1. Explicit features are the default; stockFeatures is for migration and kitchen-sink convenience.
+2. Mixed client/server pipelines are valid only when the skill names the owner and available dataset for every stage.
+3. createTableHook is recommended for recurring app conventions; standalone construction remains appropriate for one-offs.
+4. Typed context/injection helpers from createTableHook are preferred over prop drilling inside registered components.
+5. useLegacyTable is mentioned only when encountered, as a deprecated temporary bridge rather than a migration target.
+6. Virtual skills teach maintained examples and only identify unsupported combinations as user-owned composition.
+7. Devtools guidance is development-only by default; production entrypoints are explained only when explicitly requested.
+
+Domain discovery is reviewed and tree generation may proceed.
diff --git a/_artifacts/skill_tree.yaml b/_artifacts/skill_tree.yaml
new file mode 100644
index 0000000000..1f2af9f60b
--- /dev/null
+++ b/_artifacts/skill_tree.yaml
@@ -0,0 +1,1201 @@
+library:
+ name: '@tanstack/table'
+ version: '9.1.2'
+ repository: 'https://github.com/TanStack/table'
+ description: 'Headless data-grid state and row processing with tree-shakeable v9 features and framework adapters.'
+ package_version_overrides:
+ '@tanstack/angular-table': '9.2.1'
+ '@tanstack/angular-table-devtools': '9.2.0'
+ '@tanstack/preact-table-devtools': '9.2.0'
+ '@tanstack/react-table-devtools': '9.2.0'
+ '@tanstack/solid-table-devtools': '9.2.0'
+ '@tanstack/table-devtools': '9.2.0'
+ '@tanstack/vue-table-devtools': '9.2.0'
+generated_from:
+ domain_map: '_artifacts/domain_map.yaml'
+ skill_spec: '_artifacts/skill_spec.md'
+generated_at: '2026-08-01'
+status: reviewed
+reviewed_at: '2026-07-29'
+batch_review: true
+structure: 'flat-per-package'
+monorepo_layout: true
+tree_decisions:
+ - 'Every domain-map entry maps one-to-one to a package-local SKILL.md.'
+ - 'Flat task-focused paths keep each feature and adapter workflow independently discoverable.'
+ - 'The table-core core skill is the lightweight router and philosophy skill; no additional synthetic router skills are added.'
+ - 'No reference files are planned initially. Generation may add one only when content cannot remain concise under the reviewed specification.'
+ - 'Cross-package requires use the package#skill identifier form; same-package requires use the local slug.'
+ - 'All migrate-v8-to-v9 skills are comprehensive exceptions to the compact default: each must enumerate every shared and adapter-specific breaking change and end with a complete audit checklist.'
+ - 'Wrong/Correct examples are used only for genuinely broken behavior; supported alternatives are presented as explicit decisions.'
+ - 'Adapter composition skills stay anchored to maintained examples and guides, especially where Virtual adapter APIs differ.'
+ - 'Skill source, content, Markdown structure, checked snippets, and package-version metadata are validated in CI.'
+ - 'All framework table-state skills are foundational depth exceptions: each preserves state surfaces, feature gating, ownership, precedence, updates/resets, typing, and adapter-specific subscription behavior from its guide.'
+ - 'Every generated example keeps data and columns stable; repeated option evaluation must not contain inline derivation, column factories, or fresh empty-array fallbacks.'
+ - 'The custom-features skill is a completeness exception expressed through one authoritative example: it inventories all 10 FeatureMaps and every table/column/row/cell/header API installation path without layering redundant examples or misconceptions.'
+
+skills:
+ - name: 'Core'
+ slug: core
+ type: core
+ domain: foundations
+ path: 'packages/table-core/skills/core/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Use TanStack Table v9 as a headless data-grid state and row-processing engine. Routes first-table setup, stable data/columns, semantic rendering, feature plugins, framework adapters, and renderer-owned CSS or accessibility.'
+ sources:
+ - 'TanStack/table:docs/overview.md'
+ - 'TanStack/table:docs/guide/tables.md'
+ - 'TanStack/table:docs/guide/data.md'
+ - 'TanStack/table:packages/table-core/src/index.ts'
+
+ - name: 'Table Features'
+ slug: table-features
+ type: sub-skill
+ domain: foundations
+ path: 'packages/table-core/skills/table-features/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Register v9 tableFeatures, feature plugins, create*RowModel factories, and filterFns/sortFns/aggregationFns slots in prerequisite order while preserving tree-shaking. Load when an API or state slice is missing or when choosing explicit features versus stockFeatures.'
+ requires: ['core']
+ sources:
+ - 'TanStack/table:docs/guide/row-models.md'
+ - 'TanStack/table:packages/table-core/src/types/TableFeatures.ts'
+ - 'TanStack/table:packages/table-core/src/features/stockFeatures.ts'
+ - 'TanStack/table:packages/table-core/src/core/table/constructTable.ts'
+
+ - name: 'Client vs Server'
+ slug: client-vs-server
+ type: sub-skill
+ domain: foundations
+ path: 'packages/table-core/skills/client-vs-server/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Choose client or server ownership for filtering, grouping, sorting, expanding, and pagination. Explains create*RowModel pipelines, manual* bypass flags, mixed pipelines, server counts, stable processed data, and the exact dataset available to every stage.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/guide/row-models.md'
+ - 'TanStack/table:packages/table-core/src/core/row-models/coreRowModelsFeature.utils.ts'
+ - 'TanStack/table:examples/react/with-tanstack-query'
+
+ - name: 'TypeScript'
+ slug: typescript
+ type: sub-skill
+ domain: foundations
+ path: 'packages/table-core/skills/typescript/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Preserve TanStack Table v9 inference with createColumnHelper, columns(), tableOptions, tableMeta/columnMeta/filterMeta helpers, typeof features, and createTableHook. Load for ColumnDef errors, reusable generic tables, or unnecessary manual feature generics.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/guide/helpers.md'
+ - 'TanStack/table:docs/guide/column-defs.md'
+ - 'TanStack/table:docs/guide/table-and-column-meta.md'
+ - 'TanStack/table:packages/table-core/src/helpers'
+
+ - name: 'API Not Found'
+ slug: api-not-found
+ type: sub-skill
+ domain: foundations
+ path: 'packages/table-core/skills/api-not-found/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Diagnose missing TanStack Table exports, options, state slices, and instance methods by checking the installed package declarations (dist/**/*.d.ts), adapter/version mismatches, tableFeatures registration, and v9 prototype APIs before inventing replacements.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:packages/table-core/src/index.ts'
+ - 'TanStack/table:packages/table-core/src/types/TableFeatures.ts'
+ - 'TanStack/table:docs/framework/react/guide/migrating.md'
+
+ - name: 'Custom Features'
+ slug: custom-features
+ type: sub-skill
+ domain: foundations
+ path: 'packages/table-core/skills/custom-features/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Author a TanStack Table v9 feature plugin across all 10 FeatureMaps and every table/column/row/cell/header API installation path, including prototypes, memoDeps, instance data, and advanced row-model maps, after checking built-ins and meta.'
+ requires: ['core', 'table-features', 'typescript']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/custom-features.md'
+ - 'TanStack/table:packages/table-core/src/types'
+ - 'TanStack/table:packages/table-core/src/types/TableFeatures.ts'
+ - 'TanStack/table:packages/table-core/src/utils.ts'
+ - 'TanStack/table:packages/table-core/src/features'
+ - 'TanStack/table:examples/react/custom-plugin'
+
+ - name: 'Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: foundations
+ path: 'packages/table-core/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Perform a complete TanStack Table v8-to-v9 migration audit: all 16 feature registrations, every row-model and registry slot, state/store changes, prototype methods, full pinning and resizing mappings, sorting and selection semantics, removed internals, helpers, meta typing, and generic changes. useLegacyTable is only a deprecated temporary bridge when already encountered.'
+ requires: ['core', 'table-features', 'typescript']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/migrating.md'
+ - 'TanStack/table:docs/framework/preact/guide/migrating.md'
+ - 'TanStack/table:docs/framework/solid/guide/migrating.md'
+ - 'TanStack/table:docs/framework/svelte/guide/migrating.md'
+ - 'TanStack/table:docs/framework/vue/guide/migrating.md'
+ - 'TanStack/table:docs/framework/angular/guide/migrating.md'
+ - 'TanStack/table:docs/framework/lit/guide/migrating.md'
+ - 'TanStack/table:packages/table-core/src/index.ts'
+ - 'TanStack/table:packages/table-core/src/types/TableFeatures.ts'
+ - 'TanStack/table:packages/table-core/src/features/column-pinning/columnPinningFeature.types.ts'
+ - 'TanStack/table:packages/table-core/src/features/column-resizing/columnResizingFeature.types.ts'
+ - 'TanStack/table:packages/react-table/src/legacy.ts'
+
+ - name: 'Column Faceting'
+ slug: column-faceting
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-faceting/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Build faceted filter UIs with columnFacetingFeature, facetedRowModel, facetedUniqueValues, and facetedMinMaxValues. Covers own-filter exclusion, other-filter context, incomplete server-page counts, and installed feature-source API lookup.'
+ requires: ['core', 'table-features', 'column-filtering']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-faceting.md'
+ - 'TanStack/table:packages/table-core/src/features/column-faceting'
+ - 'TanStack/table:examples/react/filters-faceted'
+
+ - name: 'Column Filtering'
+ slug: column-filtering
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-filtering/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Filter columns with columnFilteringFeature, filteredRowModel, filterFns, filterMeta, nested-row direction, and manualFiltering. Load for accessor/filter compatibility, controlled filter updaters, or client/server filter ownership.'
+ requires: ['core', 'table-features', 'client-vs-server']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-filtering.md'
+ - 'TanStack/table:packages/table-core/src/features/column-filtering'
+ - 'TanStack/table:examples/react/filters'
+
+ - name: 'Grouping'
+ slug: grouping
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/grouping/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Group and aggregate rows with columnGroupingFeature, groupedRowModel, aggregationFns, groupedColumnMode, and manualGrouping. Covers grouped/placeholder/aggregated cells plus expansion and pagination semantics.'
+ requires: ['core', 'table-features', 'client-vs-server']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/grouping.md'
+ - 'TanStack/table:packages/table-core/src/features/column-grouping'
+ - 'TanStack/table:examples/react/grouping'
+
+ - name: 'Aggregation'
+ slug: aggregation
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/aggregation/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Aggregate columns independently of grouping with rowAggregationFeature, built-in or custom aggregation functions, caller-selected row scopes, keyed results, grouped merges, and manual values.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/guide/aggregation.md'
+ - 'TanStack/table:docs/framework/react/guide/aggregation.md'
+ - 'TanStack/table:packages/table-core/src/features/row-aggregation'
+ - 'TanStack/table:examples/react/aggregation'
+ - 'TanStack/table:examples/react/grouped-aggregation'
+
+ - name: 'Column Ordering'
+ slug: column-ordering
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-ordering/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Control leaf columnOrder with stable IDs while respecting pinning regions, visibility, and groupedColumnMode precedence. Load for column drag-and-drop or rendered order that differs from state.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-ordering.md'
+ - 'TanStack/table:packages/table-core/src/features/column-ordering'
+ - 'TanStack/table:examples/react/column-dnd'
+
+ - name: 'Column Pinning'
+ slug: column-pinning
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-pinning/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Pin columns into logical start/center/end regions with columnPinningFeature and implement sticky CSS, RTL logical offsets, z-index, backgrounds, overflow, and widths without gaps or overlaps.'
+ requires: ['core', 'table-features', 'column-sizing']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-pinning.md'
+ - 'TanStack/table:packages/table-core/src/features/column-pinning'
+ - 'TanStack/table:examples/react/column-pinning-sticky'
+
+ - name: 'Column Resizing'
+ slug: column-resizing
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-resizing/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Wire columnResizingFeature, header.getResizeHandler, resize modes/direction, pointer or touch events, and performant CSS-variable updates. Requires columnSizingFeature and renderer-owned handles/styles.'
+ requires: ['core', 'table-features', 'column-sizing']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-resizing.md'
+ - 'TanStack/table:packages/table-core/src/features/column-resizing'
+ - 'TanStack/table:examples/react/column-resizing-performant'
+
+ - name: 'Column Sizing'
+ slug: column-sizing
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-sizing/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Use columnSizingFeature numeric size/minSize/maxSize state, getSize/getStart/getAfter offsets, and total sizes in table, grid, or flex CSS. Load for auto/percentage misconceptions or sizing/pinning layout mismatch.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-sizing.md'
+ - 'TanStack/table:packages/table-core/src/features/column-sizing'
+ - 'TanStack/table:examples/react/column-sizing'
+
+ - name: 'Column Visibility'
+ slug: column-visibility
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/column-visibility/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Hide columns with columnVisibilityFeature while rendering visibility-aware header, column, and cell collections. Covers false-versus-absent state, enableHiding semantics, and hidden columns remaining in DOM through getAll APIs.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/column-visibility.md'
+ - 'TanStack/table:packages/table-core/src/features/column-visibility'
+ - 'TanStack/table:examples/react/column-visibility'
+
+ - name: 'Global Filtering'
+ slug: global-filtering
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/global-filtering/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Apply globalFilter across eligible columns with globalFilteringFeature, columnFilteringFeature, filteredRowModel, globalFilterFn, and manual server filtering. Covers default string/number eligibility and explicit exclusions.'
+ requires: ['core', 'table-features', 'client-vs-server', 'column-filtering']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/global-filtering.md'
+ - 'TanStack/table:packages/table-core/src/features/global-filtering'
+ - 'TanStack/table:examples/react/filters'
+
+ - name: 'Expanding'
+ slug: expanding
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/expanding/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Expand hierarchical subrows or custom detail panels with rowExpandingFeature, expandedRowModel, getSubRows, getRowCanExpand, manualExpanding, and paginateExpandedRows. Separates expansion state from user-rendered detail UI.'
+ requires: ['core', 'table-features', 'client-vs-server']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/expanding.md'
+ - 'TanStack/table:packages/table-core/src/features/row-expanding'
+ - 'TanStack/table:examples/react/expanding'
+
+ - name: 'Pagination'
+ slug: pagination
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/pagination/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Paginate with rowPaginationFeature and paginatedRowModel or manualPagination. Covers pageIndex/pageSize, rowCount/pageCount, next-page limits, already-paginated server data, and autoResetPageIndex surprises.'
+ requires: ['core', 'table-features', 'client-vs-server']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/pagination.md'
+ - 'TanStack/table:packages/table-core/src/features/row-pagination'
+ - 'TanStack/table:examples/react/pagination'
+
+ - name: 'Row Pinning'
+ slug: row-pinning
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/row-pinning/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Pin stable row IDs into top/center/bottom collections with rowPinningFeature and keepPinnedRows. Covers getRowId, filtering/pagination visibility, explicit region rendering, and renderer-owned sticky CSS.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/row-pinning.md'
+ - 'TanStack/table:packages/table-core/src/features/row-pinning'
+ - 'TanStack/table:examples/react/row-pinning'
+
+ - name: 'Cell Selection'
+ slug: cell-selection
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/cell-selection/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Select, add, and subtract rectangular cell ranges with cellSelectionFeature: ordered include/exclude operations, modifier dragging, final positive bounds, selection edges, and render-order resolution under pinning. Load for spreadsheet-style or “select all except” behavior.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/cell-selection.md'
+ - 'TanStack/table:packages/table-core/src/features/cell-selection'
+ - 'TanStack/table:examples/react/cell-selection'
+
+ - name: 'Cell Spanning'
+ slug: cell-spanning
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/cell-spanning/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Merge adjacent body cells with cellSpanningFeature: value-based rowSpan via spanRows, per-row colSpan via spanColumns, and the covered-cell convention where a span of 0 means skip the cell. Load for merged grids, spans lost after sorting or paging, or ragged rows.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/cell-spanning.md'
+ - 'TanStack/table:packages/table-core/src/features/cell-spanning'
+ - 'TanStack/table:examples/react/cell-spanning'
+
+ - name: 'Row Selection'
+ slug: row-selection
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/row-selection/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Maintain rowSelection ID state with stable getRowId, single/multi/subrow rules, current/filtered/grouped selected models, and manual-pagination semantics. Load when selected IDs outlive loaded Row objects or data removal.'
+ requires: ['core', 'table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/row-selection.md'
+ - 'TanStack/table:packages/table-core/src/features/row-selection'
+ - 'TanStack/table:examples/react/row-selection'
+
+ - name: 'Sorting'
+ slug: sorting
+ type: sub-skill
+ domain: feature-plugins
+ path: 'packages/table-core/skills/sorting/SKILL.md'
+ package: 'packages/table-core'
+ description: 'Sort with rowSortingFeature, sortedRowModel, sortFns, multi-sort/removal options, sortUndefined, and manualSorting. Covers comparator direction, incoming server order, and explicit product sorting cycles.'
+ requires: ['core', 'table-features', 'client-vs-server']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/sorting.md'
+ - 'TanStack/table:packages/table-core/src/features/row-sorting'
+ - 'TanStack/table:examples/react/sorting'
+
+ - name: 'React Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/react-table/skills/getting-started/SKILL.md'
+ package: 'packages/react-table'
+ description: 'Create a TanStack React Table v9 table with useTable, tableFeatures, stable data/columns, header and row models, and FlexRender/flexRender. Load for a first React table or when adapting a kitchen-sink example without importing every feature.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/migrating.md'
+ - 'TanStack/table:examples/react/basic-use-table'
+ - 'TanStack/table:packages/react-table/src/index.ts'
+
+ - name: 'React Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/react-table/skills/table-state/SKILL.md'
+ package: 'packages/react-table'
+ description: 'Read and own React Table v9 state with selected table.state, useTable selectors, table.Subscribe/Subscribe, table.atoms, table.store, controlled state plus on*Change, and external TanStack Store atoms. Includes React Compiler builder-method subscription foot-guns.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/table-state.md'
+ - 'TanStack/table:docs/framework/react/guide/react-compiler.md'
+ - 'TanStack/table:examples/react/basic-subscribe'
+ - 'TanStack/table:packages/react-table/src/Subscribe.ts'
+ - 'TanStack/table:packages/react-table/src/useTable.ts'
+
+ - name: 'React Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/react-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/react-table'
+ description: 'Migrate @tanstack/react-table from v8 useReactTable to v9 useTable, explicit tableFeatures, create*RowModel slots, atomic state, FlexRender/Subscribe, helper changes, and composable tables. Treat useLegacyTable only as a deprecated bridge when already present.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/migrating.md'
+ - 'TanStack/table:packages/react-table/src/index.ts'
+ - 'TanStack/table:examples/react/basic-use-table'
+ - 'TanStack/table:packages/react-table/src/legacy.ts'
+
+ - name: 'React createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/react-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/react-table'
+ description: 'Create an app-level React table factory with createTableHook, useAppTable, createAppColumnHelper, shared features/defaults, optional component registries, AppTable/AppCell/AppHeader wrappers, and typed context hooks. Covers scoped contexts, HMR circular imports, and context over prop drilling.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/composable-tables.md'
+ - 'TanStack/table:docs/framework/react/guide/table-context.md'
+ - 'TanStack/table:examples/react/composable-tables'
+ - 'TanStack/table:packages/react-table/src/createTableHook.tsx'
+ - 'TanStack/table:packages/react-table/src/createTableHookContexts.tsx'
+
+ - name: 'React with TanStack Query'
+ slug: with-tanstack-query
+ type: composition
+ domain: framework-adapters
+ path: 'packages/react-table/skills/with-tanstack-query/SKILL.md'
+ package: 'packages/react-table'
+ description: 'Compose React Table v9 with TanStack Query for server filtering, sorting, pagination, and infinite data. Covers table state in query keys, manual* boundaries, server counts, previous data, and using query results directly rather than duplicating state.'
+ requires:
+ [
+ '@tanstack/table-core#client-vs-server',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:examples/react/with-tanstack-query'
+ - 'TanStack/table:examples/react/virtualized-infinite-scrolling'
+ - 'TanStack/table:docs/framework/react/guide/pagination.md'
+
+ - name: 'React with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/react-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/react-table'
+ description: 'Virtualize final React Table row or column models with TanStack Virtual. Covers scroll elements, stable row keys, data-index measurement, dynamic heights, sticky headers/columns, grid/flex geometry, infinite fetching, and Virtual as renderer composition rather than a Table feature.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/react/guide/virtualization.md'
+ - 'TanStack/table:examples/react/virtualized-rows'
+ - 'TanStack/table:examples/react/virtualized-columns'
+ - 'TanStack/table:examples/react/virtualized-infinite-scrolling'
+
+ - name: 'Preact Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/preact-table/skills/getting-started/SKILL.md'
+ package: 'packages/preact-table'
+ description: 'Create a native @tanstack/preact-table v9 table with useTable, tableFeatures, stable inputs, and Preact render helpers. Load when replacing @tanstack/react-table through preact/compat or starting a Preact table.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/preact/guide/migrating.md'
+ - 'TanStack/table:examples/preact/basic-use-table'
+ - 'TanStack/table:packages/preact-table/src/index.ts'
+
+ - name: 'Preact Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/preact-table/skills/table-state/SKILL.md'
+ package: 'packages/preact-table'
+ description: 'Read and own Preact Table state with selected table.state, useTable selectors, table.Subscribe, table.atoms/store, controlled slices, and external Preact Store atoms. Distinguishes current snapshots from reactive subscriptions and avoids React-package imports.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/preact/guide/table-state.md'
+ - 'TanStack/table:examples/preact/basic-subscribe'
+ - 'TanStack/table:packages/preact-table/src/useTable.ts'
+
+ - name: 'Preact Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/preact-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/preact-table'
+ description: 'Move a Preact v8 app from the React adapter/preact/compat to native @tanstack/preact-table v9, useTable, tableFeatures row models, atom-backed state, and current render helpers while applying shared v9 breaking changes.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/preact/guide/migrating.md'
+ - 'TanStack/table:packages/preact-table/src/index.ts'
+ - 'TanStack/table:examples/preact/basic-use-table'
+
+ - name: 'Preact createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/preact-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/preact-table'
+ description: 'Create a reusable Preact useAppTable and createAppColumnHelper with shared features/options, optional App component registries, typed table/cell/header context hooks, scoped contexts, and correct provider subscription boundaries.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/preact/guide/composable-tables.md'
+ - 'TanStack/table:docs/framework/preact/guide/table-context.md'
+ - 'TanStack/table:examples/preact/composable-tables'
+ - 'TanStack/table:packages/preact-table/src/createTableHook.tsx'
+ - 'TanStack/table:packages/preact-table/src/createTableHookContexts.tsx'
+
+ - name: 'Preact with TanStack Query'
+ slug: with-tanstack-query
+ type: composition
+ domain: framework-adapters
+ path: 'packages/preact-table/skills/with-tanstack-query/SKILL.md'
+ package: 'packages/preact-table'
+ description: 'Compose native Preact Table with TanStack Query using table state in query keys, already-processed server pages, manual filtering/sorting/pagination, server counts, and Preact-specific query/state APIs.'
+ requires:
+ [
+ '@tanstack/table-core#client-vs-server',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:examples/preact/with-tanstack-query'
+ - 'TanStack/table:docs/framework/preact/guide/pagination.md'
+
+ - name: 'Preact with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/preact-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/preact-table'
+ description: 'Apply Preact Virtual rendering to the final Preact Table row or column model. Uses the maintained adapter guide and installed source for exact APIs; covers counts, scroll targets, keys, measurements, spacer geometry, and renderer-owned sticky/sizing CSS.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/preact/guide/virtualization.md'
+ - 'TanStack/table:packages/preact-table/src/index.ts'
+
+ - name: 'Solid Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/solid-table/skills/getting-started/SKILL.md'
+ package: 'packages/solid-table'
+ description: 'Create a Solid Table v9 table with createTable, explicit tableFeatures, reactive data getters, stable static inputs, and Solid JSX rendering. Load when replacing createSolidTable or adapting React examples.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/solid/guide/migrating.md'
+ - 'TanStack/table:examples/solid/basic-use-table'
+ - 'TanStack/table:packages/solid-table/src/index.tsx'
+
+ - name: 'Solid Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/solid-table/skills/table-state/SKILL.md'
+ package: 'packages/solid-table'
+ description: 'Read Solid-backed table.atoms inside JSX, createMemo, createEffect, or table.Subscribe; own slices with native signals or external TanStack Store atoms; and apply value-or-updater callbacks without React-style rerender workarounds.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/solid/guide/table-state.md'
+ - 'TanStack/table:examples/solid/basic-external-state'
+ - 'TanStack/table:packages/solid-table/src/createTable.ts'
+
+ - name: 'Solid Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/solid-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/solid-table'
+ description: 'Migrate Solid from v8 createSolidTable to v9 createTable, explicit features and row-model slots, signal-backed atoms, current helpers/rendering, prototype methods, sortFn names, and logical start/end pinning.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/solid/guide/migrating.md'
+ - 'TanStack/table:packages/solid-table/src/index.tsx'
+ - 'TanStack/table:examples/solid/basic-use-table'
+
+ - name: 'Solid createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/solid-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/solid-table'
+ description: 'Create a reusable Solid createAppTable/createAppColumnHelper with shared features/defaults, reactive per-table getters, optional App component registries, and typed context hooks for registered table/cell/header UI.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/solid/guide/composable-tables.md'
+ - 'TanStack/table:examples/solid/composable-tables'
+ - 'TanStack/table:packages/solid-table/src/createTableHook.tsx'
+
+ - name: 'Solid with TanStack Query'
+ slug: with-tanstack-query
+ type: composition
+ domain: framework-adapters
+ path: 'packages/solid-table/skills/with-tanstack-query/SKILL.md'
+ package: 'packages/solid-table'
+ description: 'Compose Solid Query reactive options with Solid Table manual processing. Covers tracked query-key signals, query result getters, server counts, and avoiding React Query patterns or duplicated data state.'
+ requires:
+ [
+ '@tanstack/table-core#client-vs-server',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:examples/solid/with-tanstack-query'
+ - 'TanStack/table:docs/framework/solid/guide/pagination.md'
+
+ - name: 'Solid with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/solid-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/solid-table'
+ description: 'Virtualize Solid Table row/column models and infinite Query data with reactive counts, scroll targets, stable keys, dynamic measurement, transforms, sticky regions, and grid/flex sizing.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/solid/guide/virtualization.md'
+ - 'TanStack/table:examples/solid/virtualized-rows'
+ - 'TanStack/table:examples/solid/virtualized-columns'
+ - 'TanStack/table:examples/solid/virtualized-infinite-scrolling'
+
+ - name: 'Svelte Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/svelte-table/skills/getting-started/SKILL.md'
+ package: 'packages/svelte-table'
+ description: 'Create a Svelte 5 TanStack Table v9 table with createTable, explicit tableFeatures, rune-backed data getters, stable static inputs, FlexRender, and headless markup. Load when replacing createSvelteTable or pre-rune patterns.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/svelte/guide/migrating.md'
+ - 'TanStack/table:examples/svelte/basic-create-table'
+ - 'TanStack/table:packages/svelte-table/src/index.ts'
+
+ - name: 'Svelte Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/svelte-table/skills/table-state/SKILL.md'
+ package: 'packages/svelte-table'
+ description: 'Use Svelte 5 rune-aware table atoms and stores, $derived projections, reactive option getters, controlled $state or createTableState slices, external atoms, and auto-reset behavior without broad invalidation or snapshot mismatches.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/svelte/guide/table-state.md'
+ - 'TanStack/table:docs/framework/svelte/guide/pagination.md'
+ - 'TanStack/table:examples/svelte/basic-external-state'
+ - 'TanStack/table:packages/svelte-table/src/createTable.svelte.ts'
+ - 'TanStack/table:packages/svelte-table/src/createTableState.svelte.ts'
+
+ - name: 'Svelte Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/svelte-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/svelte-table'
+ description: 'Complete Svelte v8-to-v9 migration reference: Svelte 5, createTable, beta.59 selector removal, explicit features and row-model slots, atom/rune state, rendering helpers, prototype methods, type generics, sorting, sizing, selection, and logical pinning.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/svelte/guide/migrating.md'
+ - 'TanStack/table:packages/svelte-table/src/index.ts'
+ - 'TanStack/table:examples/svelte/basic-create-table'
+
+ - name: 'Svelte createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/svelte-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/svelte-table'
+ description: "Define a Svelte createAppTable/createAppColumnHelper using the adapter's rune-capable createTableHook implementation, shared features/defaults, reactive per-table getters, optional App component registries, and typed table/cell/header context hooks."
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/svelte/guide/composable-tables.md'
+ - 'TanStack/table:examples/svelte/composable-tables'
+ - 'TanStack/table:packages/svelte-table/src/createTableHook.svelte.ts'
+
+ - name: 'Svelte with TanStack Query'
+ slug: with-tanstack-query
+ type: composition
+ domain: framework-adapters
+ path: 'packages/svelte-table/skills/with-tanstack-query/SKILL.md'
+ package: 'packages/svelte-table'
+ description: 'Compose Svelte Query with Svelte Table manual filtering, sorting, and pagination using reactive query inputs, query-result data getters, server counts, and a single source of server-data truth.'
+ requires:
+ [
+ '@tanstack/table-core#client-vs-server',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:examples/svelte/with-tanstack-query'
+ - 'TanStack/table:docs/framework/svelte/guide/pagination.md'
+
+ - name: 'Svelte with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/svelte-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/svelte-table'
+ description: 'Virtualize Svelte Table final row or column models with reactive counts and scroll targets, stable keys, dynamic measurement, absolute transforms, sticky regions, grid/flex sizing, and infinite data.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/svelte/guide/virtualization.md'
+ - 'TanStack/table:examples/svelte/virtualized-rows'
+ - 'TanStack/table:examples/svelte/virtualized-columns'
+ - 'TanStack/table:examples/svelte/virtualized-infinite-scrolling'
+
+ - name: 'Vue Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/vue-table/skills/getting-started/SKILL.md'
+ package: 'packages/vue-table'
+ description: 'Create a Vue TanStack Table v9 table with useTable, explicit tableFeatures, stable columns/features, reactive ref or computed data, and Vue template/render helpers without destructuring reactive snapshots.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/vue/guide/migrating.md'
+ - 'TanStack/table:examples/vue/basic-use-table'
+ - 'TanStack/table:packages/vue-table/src/index.ts'
+
+ - name: 'Vue Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/vue-table/skills/table-state/SKILL.md'
+ package: 'packages/vue-table'
+ description: 'Read Vue-backed table.atoms/store in templates, computed, watch, or table.Subscribe; own slices with refs/computed or external Vue Store atoms; and apply updater callbacks while preserving reactive option shapes.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/vue/guide/table-state.md'
+ - 'TanStack/table:examples/vue/basic-external-state'
+ - 'TanStack/table:packages/vue-table/src/useTable.ts'
+
+ - name: 'Vue Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/vue-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/vue-table'
+ description: 'Migrate Vue v8 construction, implicit features, row-model options, state, helpers, rendering, instance methods, sorting names, meta typing, and physical pinning to the Vue v9 useTable architecture.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/vue/guide/migrating.md'
+ - 'TanStack/table:packages/vue-table/src/index.ts'
+ - 'TanStack/table:examples/vue/basic-use-table'
+
+ - name: 'Vue createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/vue-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/vue-table'
+ description: 'Create a reusable Vue useAppTable/createAppColumnHelper with shared features/defaults, reactive per-table options, optional component registries, dynamic App wrappers, typed context hooks, and explicit types that break circular inference.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/vue/guide/composable-tables.md'
+ - 'TanStack/table:examples/vue/composable-tables'
+ - 'TanStack/table:packages/vue-table/src/createTableHook.ts'
+
+ - name: 'Vue with TanStack Query'
+ slug: with-tanstack-query
+ type: composition
+ domain: framework-adapters
+ path: 'packages/vue-table/skills/with-tanstack-query/SKILL.md'
+ package: 'packages/vue-table'
+ description: 'Compose reactive Vue Query keys and results with Vue Table manual row processing, refs/computed state, server counts, and already-processed pages without duplicating query data into a drifting local ref.'
+ requires:
+ [
+ '@tanstack/table-core#client-vs-server',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:examples/vue/with-tanstack-query'
+ - 'TanStack/table:docs/framework/vue/guide/pagination.md'
+
+ - name: 'Vue with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/vue-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/vue-table'
+ description: 'Virtualize Vue Table final row or column models with reactive counts/scroll targets, stable keys, measurement, spacer geometry, sticky CSS, grid/flex widths, and infinite server data.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/vue/guide/virtualization.md'
+ - 'TanStack/table:examples/vue/virtualized-rows'
+ - 'TanStack/table:examples/vue/virtualized-columns'
+ - 'TanStack/table:examples/vue/virtualized-infinite-scrolling'
+
+ - name: 'Angular Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/angular-table/skills/getting-started/SKILL.md'
+ package: 'packages/angular-table'
+ description: 'Create an Angular TanStack Table v9 table with injectTable inside injection context, explicit stable tableFeatures/columns, signal-backed data, and FlexRender structural directives or helpers.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/angular/guide/migrating.md'
+ - 'TanStack/table:docs/framework/angular/guide/rendering.md'
+ - 'TanStack/table:examples/angular/basic-inject-table'
+ - 'TanStack/table:packages/angular-table/src/index.ts'
+
+ - name: 'Angular Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/angular-table/skills/table-state/SKILL.md'
+ package: 'packages/angular-table'
+ description: 'Use Angular-signal-backed table.atoms, direct template reads, computed selectors, controlled signals, value-or-updater callbacks, and external Angular Store atoms while accounting for injectTable initializer reruns.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/angular/guide/table-state.md'
+ - 'TanStack/table:examples/angular/basic-external-state'
+ - 'TanStack/table:packages/angular-table/src/injectTable.ts'
+
+ - name: 'Angular Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/angular-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/angular-table'
+ description: 'Migrate createAngularTable v8 code to injectTable v9 in injection context, tableFeatures row models, signal-backed state, stable reactive initializers, current FlexRender directives, helpers, prototype methods, sorting, and logical pinning.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/angular/guide/migrating.md'
+ - 'TanStack/table:packages/angular-table/src/index.ts'
+ - 'TanStack/table:examples/angular/basic-inject-table'
+
+ - name: 'Angular createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/angular-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/angular-table'
+ description: 'Create an Angular injectAppTable/createAppColumnHelper abstraction with shared features/defaults, registered components, injectTableContext/injectTableCellContext/injectTableHeaderContext, and correct FlexRender component versus function handling.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/angular/guide/composable-tables.md'
+ - 'TanStack/table:examples/angular/composable-tables'
+ - 'TanStack/table:packages/angular-table/src/helpers/createTableHook.ts'
+
+ - name: 'Angular with TanStack Query'
+ slug: with-tanstack-query
+ type: composition
+ domain: framework-adapters
+ path: 'packages/angular-table/skills/with-tanstack-query/SKILL.md'
+ package: 'packages/angular-table'
+ description: 'Compose Angular Query with signal-owned Table filtering, sorting, and pagination state. Covers reactive query options/keys, manual row-model boundaries, direct query data, server row/page counts, and injection context.'
+ requires:
+ [
+ '@tanstack/table-core#client-vs-server',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:examples/angular/with-tanstack-query'
+ - 'TanStack/table:docs/framework/angular/guide/table-state.md'
+ - 'TanStack/table:docs/framework/angular/guide/pagination.md'
+
+ - name: 'Angular with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/angular-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/angular-table'
+ description: 'Virtualize Angular Table final row or column models inside the correct injection/reactive lifecycle. Covers signal counts, scroll elements, keys, measurement, transforms, sticky regions, grid/flex sizing, and infinite data.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/angular/guide/virtualization.md'
+ - 'TanStack/table:examples/angular/virtualized-rows'
+ - 'TanStack/table:examples/angular/virtualized-columns'
+ - 'TanStack/table:examples/angular/virtualized-infinite-scrolling'
+
+ - name: 'Lit Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/lit-table/skills/getting-started/SKILL.md'
+ package: 'packages/lit-table'
+ description: 'Create a Lit TanStack Table v9 table with a stable TableController host field, explicit tableFeatures, controller.table(options, selector) during render, and headless Lit templates.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/lit/guide/migrating.md'
+ - 'TanStack/table:examples/lit/basic-table-controller'
+ - 'TanStack/table:packages/lit-table/src/index.ts'
+
+ - name: 'Lit Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/lit-table/skills/table-state/SKILL.md'
+ package: 'packages/lit-table'
+ description: 'Use TableController-selected table.state, table.atoms/store, stable table.subscribe selectors, controlled reactive properties plus on*Change, and external TanStack Store atoms while preserving Lit host update behavior.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/lit/guide/table-state.md'
+ - 'TanStack/table:examples/lit/basic-external-state'
+ - 'TanStack/table:packages/lit-table/src/TableController.ts'
+
+ - name: 'Lit Migrate v8 to v9'
+ slug: migrate-v8-to-v9
+ type: lifecycle
+ domain: framework-adapters
+ path: 'packages/lit-table/skills/migrate-v8-to-v9/SKILL.md'
+ package: 'packages/lit-table'
+ description: 'Migrate Lit v8 controller construction to a stable v9 TableController plus controller.table(options), explicit feature/row-model slots, selected state, helpers, prototype methods, sortFn names, and logical start/end pinning.'
+ requires:
+ [
+ '@tanstack/table-core#migrate-v8-to-v9',
+ 'getting-started',
+ 'table-state',
+ ]
+ sources:
+ - 'TanStack/table:docs/framework/lit/guide/migrating.md'
+ - 'TanStack/table:packages/lit-table/src/index.ts'
+ - 'TanStack/table:examples/lit/basic-table-controller'
+
+ - name: 'Lit createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/lit-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/lit-table'
+ description: 'Create a reusable Lit useAppTable/createAppColumnHelper layer with host-backed controllers, shared features/defaults, typed cell/header renderers, and useTableContext for custom-element controls instead of prop drilling.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/lit/guide/composable-tables.md'
+ - 'TanStack/table:examples/lit/composable-tables'
+ - 'TanStack/table:packages/lit-table/src/createTableHook.ts'
+
+ - name: 'Lit with TanStack Virtual'
+ slug: with-tanstack-virtual
+ type: composition
+ domain: framework-adapters
+ path: 'packages/lit-table/skills/with-tanstack-virtual/SKILL.md'
+ package: 'packages/lit-table'
+ description: 'Virtualize Lit Table final row or column models with host lifecycle-aware virtualizers, stable counts/keys, dynamic measurement, scroll geometry, sticky CSS, grid/flex sizing, and infinite data.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/lit/guide/virtualization.md'
+ - 'TanStack/table:examples/lit/virtualized-rows'
+ - 'TanStack/table:examples/lit/virtualized-columns'
+ - 'TanStack/table:examples/lit/virtualized-infinite-scrolling'
+
+ - name: 'Octane Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/octane-table/skills/getting-started/SKILL.md'
+ package: 'packages/octane-table'
+ description: 'Create an @tanstack/octane-table v9 table with useTable, tableFeatures, stable inputs, TSRX component bodies, keyed @for rendering, and FlexRender. Load when starting an Octane table or translating a React/Preact example without changing its behavior.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/octane/quick-start.md'
+ - 'TanStack/table:examples/octane/basic-use-table'
+ - 'TanStack/table:packages/octane-table/src/index.ts'
+ - 'TanStack/table:packages/octane-table/src/useTable.tsrx'
+
+ - name: 'Octane Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/octane-table/skills/table-state/SKILL.md'
+ package: 'packages/octane-table'
+ description: 'Read and own Octane Table v9 state with useTable selectors, table.state, table.Subscribe, controlled slices, and @tanstack/octane-store atoms. Load for state ownership, render timing, snapshot-versus-subscription bugs, or fine-grained rendering.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/octane/guide/table-state.md'
+ - 'TanStack/table:examples/octane/basic-subscribe'
+ - 'TanStack/table:examples/octane/basic-external-atoms'
+ - 'TanStack/table:packages/octane-table/src/useTable.tsrx'
+ - 'TanStack/table:packages/octane-table/src/Subscribe.tsrx'
+
+ - name: 'Octane createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/octane-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/octane-table'
+ description: 'Create reusable Octane table infrastructure with createTableHook, useAppTable, createAppColumnHelper, registered components, stable App wrappers, and typed context hooks. Load for recurring conventions, scoped contexts, or prop drilling.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/octane/guide/composable-tables.md'
+ - 'TanStack/table:docs/framework/octane/guide/table-context.md'
+ - 'TanStack/table:examples/octane/composable-tables'
+ - 'TanStack/table:packages/octane-table/src/createTableHook.tsrx'
+ - 'TanStack/table:packages/octane-table/src/createTableHookContexts.ts'
+
+ - name: 'Ember Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/ember-table/skills/getting-started/SKILL.md'
+ package: 'packages/ember-table'
+ description: "Create a TanStack Ember Table v9 table with useTable, a tracked options thunk, stable tableFeatures and columns, .gts templates, FlexRenderCell/Header/Footer, and correctly bound template helpers. Load for first-table setup, Glimmer reactivity, component cell renderers, or adapting another framework's example to Ember."
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/ember/quick-start.md'
+ - 'TanStack/table:examples/ember/basic-table'
+ - 'TanStack/table:packages/ember-table/src/index.ts'
+ - 'TanStack/table:packages/ember-table/src/use-table.ts'
+ - 'TanStack/table:packages/ember-table/src/FlexRender.gts'
+
+ - name: 'Ember Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/ember-table/skills/table-state/SKILL.md'
+ package: 'packages/ember-table'
+ description: 'Read, track, initialize, control, and reset TanStack Ember Table v9 state through Glimmer-reactive table APIs, baseAtoms, atoms, store, Ember createAtom, or @tracked state plus on*Change. Load for ownership precedence, updater callbacks, stale template state, options-thunk reactivity, or incorrect table.Subscribe/store.subscribe usage.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/ember/guide/table-state.md'
+ - 'TanStack/table:examples/ember/basic-external-atoms'
+ - 'TanStack/table:examples/ember/basic-external-state'
+ - 'TanStack/table:packages/ember-table/src/use-table.ts'
+ - 'TanStack/table:packages/ember-table/src/reactivity.ts'
+ - 'TanStack/table:packages/ember-table/src/signal.ts'
+
+ - name: 'Ember createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/ember-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/ember-table'
+ description: 'Share TanStack Ember Table v9 features, row-model slots, defaults, and inferred column helpers with createTableHook, createAppTable, createAppColumnHelper, and appFeatures. Load for recurring Ember table conventions, per-table overrides, or confusion with component/context registries from other adapters.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/ember/guide/composable-tables.md'
+ - 'TanStack/table:examples/ember/basic-app-table'
+ - 'TanStack/table:packages/ember-table/src/create-table-hook.ts'
+
+ - name: 'Alpine Getting Started'
+ slug: getting-started
+ type: framework
+ domain: framework-adapters
+ path: 'packages/alpine-table/skills/getting-started/SKILL.md'
+ package: 'packages/alpine-table'
+ description: 'Create an Alpine TanStack Table v9 table with createTable, explicit tableFeatures, Alpine.reactive data/getters, real x-for/x-text/x-html markup, and renderer-owned styles. Covers why x-html does not initialize nested Alpine directives.'
+ requires:
+ ['@tanstack/table-core#core', '@tanstack/table-core#table-features']
+ sources:
+ - 'TanStack/table:docs/framework/alpine/guide/table-state.md'
+ - 'TanStack/table:examples/alpine/basic-create-table'
+ - 'TanStack/table:packages/alpine-table/src/index.ts'
+
+ - name: 'Alpine Table State'
+ slug: table-state
+ type: framework
+ domain: framework-adapters
+ path: 'packages/alpine-table/skills/table-state/SKILL.md'
+ package: 'packages/alpine-table'
+ description: 'Read automatically reactive Alpine table APIs directly in bindings; own slices with Alpine.reactive getters plus on*Change or external TanStack Store atoms; and apply updater callbacks without inventing table.Subscribe.'
+ requires: ['@tanstack/table-core#core', 'getting-started']
+ sources:
+ - 'TanStack/table:docs/framework/alpine/guide/table-state.md'
+ - 'TanStack/table:examples/alpine/basic-create-table'
+ - 'TanStack/table:packages/alpine-table/src/createTable.ts'
+
+ - name: 'Alpine createTableHook'
+ slug: create-table-hook
+ type: framework
+ domain: framework-adapters
+ path: 'packages/alpine-table/skills/create-table-hook/SKILL.md'
+ package: 'packages/alpine-table'
+ description: 'Share Alpine tableFeatures, defaults, createAppTable, and createAppColumnHelper with createTableHook. Clarifies that Alpine has no registered component/context registry and interactive reuse belongs in real markup or Alpine.bind bundles.'
+ requires: ['@tanstack/table-core#core', 'getting-started', 'table-state']
+ sources:
+ - 'TanStack/table:docs/framework/alpine/guide/composable-tables.md'
+ - 'TanStack/table:examples/alpine/basic-app-table'
+ - 'TanStack/table:packages/alpine-table/src/createTableHook.ts'
+
+ - name: 'Table Devtools'
+ slug: devtools
+ type: core
+ domain: observability
+ path: 'packages/table-devtools/skills/devtools/SKILL.md'
+ package: 'packages/table-devtools'
+ description: 'Register TanStack Table targets and inspect options, state, features, columns, rows, and row models with @tanstack/table-devtools. Load for missing connections, required unique table options.key, target replacement/cleanup, or explicit production entrypoints.'
+ requires: ['@tanstack/table-core#core']
+ sources:
+ - 'TanStack/table:docs/devtools.md'
+ - 'TanStack/table:packages/table-devtools/src/index.ts'
+ - 'TanStack/table:packages/table-devtools/src/tableTarget.ts'
+ - 'TanStack/table:packages/table-devtools/src/production.ts'
+
+ - name: 'React Table Devtools'
+ slug: devtools
+ type: framework
+ domain: observability
+ path: 'packages/react-table-devtools/skills/devtools/SKILL.md'
+ package: 'packages/react-table-devtools'
+ description: 'Connect React Table v9 instances to Devtools with ReactTableDevtools, useTanStackTableDevtools, or the plugin lifecycle. Covers stable table identity, required unique options.key, cleanup, enabled state, and development-gated exports.'
+ requires: ['@tanstack/table-core#core', '@tanstack/table-devtools#devtools']
+ sources:
+ - 'TanStack/table:docs/devtools.md'
+ - 'TanStack/table:packages/react-table-devtools/src/index.ts'
+ - 'TanStack/table:packages/react-table-devtools/src/useTanStackTableDevtools.ts'
+
+ - name: 'Preact Table Devtools'
+ slug: devtools
+ type: framework
+ domain: observability
+ path: 'packages/preact-table-devtools/skills/devtools/SKILL.md'
+ package: 'packages/preact-table-devtools'
+ description: 'Connect native Preact Table instances to Devtools with the Preact component, hook, or plugin lifecycle. Covers correct package imports, required unique options.key, target cleanup, enabled state, and development gating.'
+ requires: ['@tanstack/table-core#core', '@tanstack/table-devtools#devtools']
+ sources:
+ - 'TanStack/table:docs/devtools.md'
+ - 'TanStack/table:packages/preact-table-devtools/src/index.ts'
+ - 'TanStack/table:packages/preact-table-devtools/src/useTanStackTableDevtools.ts'
+
+ - name: 'Solid Table Devtools'
+ slug: devtools
+ type: framework
+ domain: observability
+ path: 'packages/solid-table-devtools/skills/devtools/SKILL.md'
+ package: 'packages/solid-table-devtools'
+ description: 'Connect Solid Table instances to Devtools in the proper reactive owner using the Solid component, hook, or plugin. Covers required unique options.key, target cleanup, enabled state, and development versus explicit production exports.'
+ requires: ['@tanstack/table-core#core', '@tanstack/table-devtools#devtools']
+ sources:
+ - 'TanStack/table:docs/devtools.md'
+ - 'TanStack/table:packages/solid-table-devtools/src/index.ts'
+ - 'TanStack/table:packages/solid-table-devtools/src/useTanStackTableDevtools.ts'
+
+ - name: 'Vue Table Devtools'
+ slug: devtools
+ type: framework
+ domain: observability
+ path: 'packages/vue-table-devtools/skills/devtools/SKILL.md'
+ package: 'packages/vue-table-devtools'
+ description: 'Connect Vue Table refs to Devtools with reactive target tracking, required unique options.key, lifecycle cleanup, enabled state, and development-gated component/plugin exports.'
+ requires: ['@tanstack/table-core#core', '@tanstack/table-devtools#devtools']
+ sources:
+ - 'TanStack/table:docs/devtools.md'
+ - 'TanStack/table:packages/vue-table-devtools/src/index.ts'
+ - 'TanStack/table:packages/vue-table-devtools/src/useTanStackTableDevtools.ts'
+
+ - name: 'Angular Table Devtools'
+ slug: devtools
+ type: framework
+ domain: observability
+ path: 'packages/angular-table-devtools/skills/devtools/SKILL.md'
+ package: 'packages/angular-table-devtools'
+ description: 'Register Angular Table instances with injectTanStackTableDevtools inside injection context. Covers reactive options, enabled/undefined tables, required unique options.key, cleanup, Angular isDevMode gating, and explicit production exports.'
+ requires: ['@tanstack/table-core#core', '@tanstack/table-devtools#devtools']
+ sources:
+ - 'TanStack/table:docs/devtools.md'
+ - 'TanStack/table:packages/angular-table-devtools/src/index.ts'
+ - 'TanStack/table:packages/angular-table-devtools/src/injectTanStackTableDevtools.ts'
+
+ - name: 'Fuzzy Ranking'
+ slug: fuzzy-ranking
+ type: core
+ domain: utilities
+ path: 'packages/match-sorter-utils/skills/fuzzy-ranking/SKILL.md'
+ package: 'packages/match-sorter-utils'
+ description: 'Rank fuzzy matches with rankItem, filter with RankingInfo.passed, compare saved ranking metadata with compareItems, and configure rankings, thresholds, accessors, bounds, and diacritic handling. Routes TanStack Table filterMeta wiring to filtering skills.'
+ sources:
+ - 'TanStack/table:packages/match-sorter-utils/src/index.ts'
+ - 'TanStack/table:docs/framework/react/guide/fuzzy-filtering.md'
+ - 'TanStack/table:examples/react/filters-fuzzy'
diff --git a/babel.config.cjs b/babel.config.cjs
deleted file mode 100644
index 84a3ee4ebe..0000000000
--- a/babel.config.cjs
+++ /dev/null
@@ -1,35 +0,0 @@
-const { NODE_ENV, BABEL_ENV } = process.env
-const cjs = NODE_ENV === 'test' || BABEL_ENV === 'commonjs'
-const loose = true
-
-module.exports = {
- targets: 'defaults, not ie 11, not ie_mob 11',
- presets: [
- [
- '@babel/preset-env',
- {
- loose,
- modules: false,
- include: [
- '@babel/plugin-proposal-nullish-coalescing-operator',
- '@babel/plugin-proposal-optional-chaining',
- ],
- // exclude: ['@babel/plugin-transform-regenerator'],
- },
- ],
- '@babel/react',
- '@babel/preset-typescript',
- ],
- plugins: [
- cjs && ['@babel/transform-modules-commonjs', { loose }],
- // [
- // '@babel/transform-runtime',
- // {
- // useESModules: !cjs,
- // version: require('./package.json').dependencies[
- // '@babel/runtime'
- // ].replace(/^[^0-9]*/, ''),
- // },
- // ],
- ].filter(Boolean),
-}
diff --git a/docs/agent-skills.md b/docs/agent-skills.md
new file mode 100644
index 0000000000..37da780155
--- /dev/null
+++ b/docs/agent-skills.md
@@ -0,0 +1,129 @@
+---
+title: Agent Skills (TanStack Intent)
+id: agent-skills
+description: "Use TanStack Intent to wire TanStack Table's bundled Agent Skills into Claude Code, Cursor, GitHub Copilot, Codex, and other AI coding assistants."
+keywords:
+ - tanstack table
+ - tanstack intent
+ - agent skills
+ - claude code
+ - cursor
+ - github copilot
+ - codex
+ - ai coding agents
+ - SKILL.md
+ - AGENTS.md
+---
+
+You're building with TanStack Table and using an AI coding agent such as Claude Code, Cursor, GitHub Copilot, or Codex. The agent keeps suggesting v8 APIs such as `useReactTable`, configures row models without explicit features, or renders with adapter patterns that no longer match v9. By the end of this guide, your agent will load TanStack Table's bundled skills automatically whenever you work on table code, and those skills will stay in sync with whichever TanStack Table version your project installs.
+
+## What are Agent Skills?
+
+Agent Skills are markdown documents (`SKILL.md`) that ship inside npm packages and tell AI coding agents how to use a library correctly: which functions to use, which patterns to avoid, and when to reach for a particular feature. The format is an open standard supported by Claude Code, Cursor, GitHub Copilot, Codex, and others.
+
+TanStack Table publishes skills inside its packages so the guidance travels with `npm update` instead of being pinned in a model's training data or copied into an agent configuration file manually.
+
+## Skills Shipped by TanStack Table
+
+The skills available to your agent depend on which packages your project installs:
+
+| Package | Skills | What they teach |
+| ---------------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `@tanstack/table-core` | `core`, `table-features`, and focused feature skills | Headless table architecture, explicit feature registration, TypeScript, client/server boundaries, migration, and features such as sorting, filtering, grouping, pagination, pinning, sizing, selection, and aggregation |
+| `@tanstack/-table` | Framework-specific setup and state skills | Creating, rendering, and controlling a table with your framework adapter; supported adapters also include migration and TanStack Query/Virtual composition skills |
+| `@tanstack/table-devtools` and framework devtools adapters | `devtools` | Registering table instances and inspecting features, state, options, rows, and columns |
+| `@tanstack/match-sorter-utils` | `fuzzy-ranking` | Fuzzy filtering, ranking metadata, and rank-aware sorting |
+
+Each skill lives under `node_modules//skills//SKILL.md` once the package is installed. Skills can declare prerequisites, so your agent can load the core guidance before a framework or feature-specific skill.
+
+## Step 1: Install TanStack Table
+
+If you haven't already, install the adapter for your framework. See [Installation](./installation) for the full package list.
+
+```bash
+pnpm add @tanstack/react-table
+```
+
+Framework adapters install `@tanstack/table-core` as a dependency, so both the framework-specific and core skills are available to the installer.
+
+## Step 2: Run `intent install`
+
+From the root of your project, run:
+
+```bash
+npx @tanstack/intent@latest install
+```
+
+The CLI writes lightweight skill-loading guidance into your agent's config file. That guidance tells the agent to discover skills from the packages installed in your project and load the most relevant one before it starts a substantial task.
+
+By default the guidance lands in `AGENTS.md`. The CLI can also update:
+
+- `CLAUDE.md` for Claude Code
+- `.cursorrules` for Cursor
+- `.github/copilot-instructions.md` for GitHub Copilot
+
+## Step 3: Review the Generated Guidance
+
+The install command appends (or creates) an `intent-skills` block that looks like this:
+
+```markdown
+
+
+## Skill Loading
+
+Before editing files for a substantial task:
+
+- Run `npx @tanstack/intent@latest list` from the workspace root to see available local skills.
+- If a listed skill matches the task, run `npx @tanstack/intent@latest load #` before changing files.
+- Use the loaded `SKILL.md` guidance while making the change.
+- Monorepos: when working across packages, run the skill check from the workspace root and prefer the local skill for the package being changed.
+- Multiple matches: prefer the most specific local skill for the package or concern you are changing; load additional skills only when the task spans multiple packages or concerns.
+
+
+```
+
+Keep the block near the top of the config file so your agent sees it before task-specific instructions.
+
+You can inspect and load Table skills yourself with the same commands:
+
+```bash
+npx @tanstack/intent@latest list
+npx @tanstack/intent@latest load @tanstack/react-table#getting-started
+npx @tanstack/intent@latest load @tanstack/table-core#sorting
+```
+
+If you prefer explicit task-to-skill entries, run `npx @tanstack/intent@latest install --map`. Mapping mode scans your installed intent-enabled packages and writes compact `id`, `run`, and `for` entries into the managed block.
+
+## Step 4: Confirm It's Wired Up
+
+Open a fresh session in your coding agent and ask it to build something with TanStack Table, for example: _"Build a sortable, paginated React table with TanStack Table v9."_
+
+You should see:
+
+- The agent uses `useTable()` instead of the v8 `useReactTable()` API.
+- Features and row-model slots are declared explicitly with `tableFeatures()`.
+- Static data, columns, and features keep stable references.
+- The adapter's current rendering APIs are used instead of copied v8 rendering patterns.
+- Table owns the headless model and state while your application owns markup, styles, interactions, and accessibility.
+
+If the agent still falls back to v8 patterns, reopen its config file and confirm the `intent-skills` block is present. You can also run `intent list` to confirm that the installed Table packages are detected and `intent load` to inspect the matching guidance directly.
+
+## Keeping Skills Current
+
+Skills are versioned with each package. When you update your TanStack Table packages, the `SKILL.md` files under `node_modules` update with them. No CLI rerun is needed. If you use explicit mappings, rerun `npx @tanstack/intent@latest install --map` after adding another intent-enabled package, such as a Table devtools adapter, or when you want to refresh the mappings.
+
+## Using Skills Without the CLI
+
+If you'd rather wire skills in yourself, reference them directly from `node_modules` in any agent config file. The minimum your agent needs is a pointer to the relevant file:
+
+```markdown
+When working on TanStack React Table code, read and follow:
+node_modules/@tanstack/react-table/skills/getting-started/SKILL.md
+```
+
+The CLI is recommended because it discovers installed packages automatically and stays consistent with the Agent Skills standard, but the underlying file paths are stable.
+
+## Learn More
+
+- [TanStack Intent documentation](https://tanstack.com/intent/latest/docs/overview), the CLI's full reference, including `scaffold`, `validate`, and CI setup for library maintainers.
+- [Agent Skills registry](https://tanstack.com/intent/registry), where you can browse other intent-enabled packages.
diff --git a/docs/api/core/cell.md b/docs/api/core/cell.md
deleted file mode 100644
index e02aa1e59c..0000000000
--- a/docs/api/core/cell.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: Cell APIs
----
-
-These are **core** options and API properties for all cells. More options and API properties are available for other [table features](../../../guide/features.md).
-
-## Cell API
-
-All cell objects have the following properties:
-
-### `id`
-
-```tsx
-id: string
-```
-
-The unique ID for the cell across the entire table.
-
-### `getValue`
-
-```tsx
-getValue: () => any
-```
-
-Returns the value for the cell, accessed via the associated column's accessor key or accessor function.
-
-### `renderValue`
-
-```tsx
-renderValue: () => any
-```
-
-Renders the value for a cell the same as `getValue`, but will return the `renderFallbackValue` if no value is found.
-
-### `row`
-
-```tsx
-row: Row
-```
-
-The associated Row object for the cell.
-
-### `column`
-
-```tsx
-column: Column
-```
-
-The associated Column object for the cell.
-
-### `getContext`
-
-```tsx
-getContext: () => {
- table: Table
- column: Column
- row: Row
- cell: Cell
- getValue: () => TTValue
- renderValue: () => TTValue | null
-}
-```
-
-Returns the rendering context (or props) for cell-based components like cells and aggregated cells. Use these props with your framework's `flexRender` utility to render these using the template of your choice:
-
-```tsx
-flexRender(cell.column.columnDef.cell, cell.getContext())
-```
diff --git a/docs/api/core/column-def.md b/docs/api/core/column-def.md
deleted file mode 100644
index 3522e9da62..0000000000
--- a/docs/api/core/column-def.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: ColumnDef APIs
----
-
-Column definitions are plain objects with the following options:
-
-## Options
-
-### `id`
-
-```tsx
-id: string
-```
-
-The unique identifier for the column.
-
-> 🧠 A column ID is optional when:
->
-> - An accessor column is created with an object key accessor
-> - The column header is defined as a string
-
-### `accessorKey`
-
-```tsx
-accessorKey?: string & typeof TData
-```
-
-The key of the row object to use when extracting the value for the column.
-
-### `accessorFn`
-
-```tsx
-accessorFn?: (originalRow: TData, index: number) => any
-```
-
-The accessor function to use when extracting the value for the column from each row.
-
-### `columns`
-
-```tsx
-columns?: ColumnDef[]
-```
-
-The child column defs to include in a group column.
-
-### `header`
-
-```tsx
-header?:
- | string
- | ((props: {
- table: Table
- header: Header
- column: Column
- }) => unknown)
-```
-
-The header to display for the column. If a string is passed, it can be used as a default for the column ID. If a function is passed, it will be passed a props object for the header and should return the rendered header value (the exact type depends on the adapter being used).
-
-### `footer`
-
-```tsx
-footer?:
- | string
- | ((props: {
- table: Table
- header: Header
- column: Column
- }) => unknown)
-```
-
-The footer to display for the column. If a function is passed, it will be passed a props object for the footer and should return the rendered footer value (the exact type depends on the adapter being used).
-
-### `cell`
-
-```tsx
-cell?:
- | string
- | ((props: {
- table: Table
- row: Row
- column: Column
- cell: Cell
- getValue: () => any
- renderValue: () => any
- }) => unknown)
-```
-
-The cell to display each row for the column. If a function is passed, it will be passed a props object for the cell and should return the rendered cell value (the exact type depends on the adapter being used).
-
-### `meta`
-
-```tsx
-meta?: ColumnMeta // This interface is extensible via declaration merging. See below!
-```
-
-The meta data to be associated with the column. We can access it anywhere when the column is available via `column.columnDef.meta`. This type is global to all tables and can be extended like so:
-
-```tsx
-import '@tanstack/react-table' //or vue, svelte, solid, qwik, etc.
-
-declare module '@tanstack/react-table' {
- interface ColumnMeta {
- foo: string
- }
-}
-```
diff --git a/docs/api/core/column.md b/docs/api/core/column.md
deleted file mode 100644
index 18a11ac9ba..0000000000
--- a/docs/api/core/column.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: Column APIs
----
-
-These are **core** options and API properties for all columns. More options and API properties are available for other [table features](../../../guide/features.md).
-
-## Column API
-
-All column objects have the following properties:
-
-### `id`
-
-```tsx
-id: string
-```
-
-The resolved unique identifier for the column resolved in this priority:
-
-- A manual `id` property from the column def
-- The accessor key from the column def
-- The header string from the column def
-
-### `depth`
-
-```tsx
-depth: number
-```
-
-The depth of the column (if grouped) relative to the root column def array.
-
-### `accessorFn`
-
-```tsx
-accessorFn?: AccessorFn
-```
-
-The resolved accessor function to use when extracting the value for the column from each row. Will only be defined if the column def has a valid accessor key or function defined.
-
-### `columnDef`
-
-```tsx
-columnDef: ColumnDef
-```
-
-The original column def used to create the column.
-
-### `columns`
-
-```tsx
-type columns = ColumnDef[]
-```
-
-The child column (if the column is a group column). Will be an empty array if the column is not a group column.
-
-### `parent`
-
-```tsx
-parent?: Column
-```
-
-The parent column for this column. Will be undefined if this is a root column.
-
-### `getFlatColumns`
-
-```tsx
-type getFlatColumns = () => Column[]
-```
-
-Returns the flattened array of this column and all child/grand-child columns for this column.
-
-### `getLeafColumns`
-
-```tsx
-type getLeafColumns = () => Column[]
-```
-
-Returns an array of all leaf-node columns for this column. If a column has no children, it is considered the only leaf-node column.
diff --git a/docs/api/core/header-group.md b/docs/api/core/header-group.md
deleted file mode 100644
index c4881dd27c..0000000000
--- a/docs/api/core/header-group.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: HeaderGroup APIs
----
-
-These are **core** options and API properties for all header groups. More options and API properties may be available for other [table features](../../../guide/features.md).
-
-## Header Group API
-
-All header group objects have the following properties:
-
-### `id`
-
-```tsx
-id: string
-```
-
-The unique identifier for the header group.
-
-### `depth`
-
-```tsx
-depth: number
-```
-
-The depth of the header group, zero-indexed based.
-
-### `headers`
-
-```tsx
-type headers = Header[]
-```
-
-An array of [Header](../header.md) objects that belong to this header group
diff --git a/docs/api/core/header.md b/docs/api/core/header.md
deleted file mode 100644
index cc6db9f687..0000000000
--- a/docs/api/core/header.md
+++ /dev/null
@@ -1,243 +0,0 @@
----
-title: Header APIs
----
-
-These are **core** options and API properties for all headers. More options and API properties may be available for other [table features](../../../guide/features.md).
-
-## Header API
-
-All header objects have the following properties:
-
-### `id`
-
-```tsx
-id: string
-```
-
-The unique identifier for the header.
-
-### `index`
-
-```tsx
-index: number
-```
-
-The index for the header within the header group.
-
-### `depth`
-
-```tsx
-depth: number
-```
-
-The depth of the header, zero-indexed based.
-
-### `column`
-
-```tsx
-column: Column
-```
-
-The header's associated [Column](../column.md) object
-
-### `headerGroup`
-
-```tsx
-headerGroup: HeaderGroup
-```
-
-The header's associated [HeaderGroup](../header-group.md) object
-
-### `subHeaders`
-
-```tsx
-type subHeaders = Header[]
-```
-
-The header's hierarchical sub/child headers. Will be empty if the header's associated column is a leaf-column.
-
-### `colSpan`
-
-```tsx
-colSpan: number
-```
-
-The col-span for the header.
-
-### `rowSpan`
-
-```tsx
-rowSpan: number
-```
-
-The row-span for the header.
-
-### `getLeafHeaders`
-
-```tsx
-type getLeafHeaders = () => Header[]
-```
-
-Returns the leaf headers hierarchically nested under this header.
-
-### `isPlaceholder`
-
-```tsx
-isPlaceholder: boolean
-```
-
-A boolean denoting if the header is a placeholder header
-
-### `placeholderId`
-
-```tsx
-placeholderId?: string
-```
-
-If the header is a placeholder header, this will be a unique header ID that does not conflict with any other headers across the table
-
-### `getContext`
-
-```tsx
-getContext: () => {
- table: Table
- header: Header
- column: Column
-}
-```
-
-Returns the rendering context (or props) for column-based components like headers, footers and filters. Use these props with your framework's `flexRender` utility to render these using the template of your choice:
-
-```tsx
-flexRender(header.column.columnDef.header, header.getContext())
-```
-
-## Table API
-
-### `getHeaderGroups`
-
-```tsx
-type getHeaderGroups = () => HeaderGroup[]
-```
-
-Returns all header groups for the table.
-
-### `getLeftHeaderGroups`
-
-```tsx
-type getLeftHeaderGroups = () => HeaderGroup[]
-```
-
-If pinning, returns the header groups for the left pinned columns.
-
-### `getCenterHeaderGroups`
-
-```tsx
-type getCenterHeaderGroups = () => HeaderGroup[]
-```
-
-If pinning, returns the header groups for columns that are not pinned.
-
-### `getRightHeaderGroups`
-
-```tsx
-type getRightHeaderGroups = () => HeaderGroup[]
-```
-
-If pinning, returns the header groups for the right pinned columns.
-
-### `getFooterGroups`
-
-```tsx
-type getFooterGroups = () => HeaderGroup[]
-```
-
-Returns all footer groups for the table.
-
-### `getLeftFooterGroups`
-
-```tsx
-type getLeftFooterGroups = () => HeaderGroup[]
-```
-
-If pinning, returns the footer groups for the left pinned columns.
-
-### `getCenterFooterGroups`
-
-```tsx
-type getCenterFooterGroups = () => HeaderGroup[]
-```
-
-If pinning, returns the footer groups for columns that are not pinned.
-
-### `getRightFooterGroups`
-
-```tsx
-type getRightFooterGroups = () => HeaderGroup[]
-```
-
-If pinning, returns the footer groups for the right pinned columns.
-
-### `getFlatHeaders`
-
-```tsx
-type getFlatHeaders = () => Header[]
-```
-
-Returns headers for all columns in the table, including parent headers.
-
-### `getLeftFlatHeaders`
-
-```tsx
-type getLeftFlatHeaders = () => Header[]
-```
-
-If pinning, returns headers for all left pinned columns in the table, including parent headers.
-
-### `getCenterFlatHeaders`
-
-```tsx
-type getCenterFlatHeaders = () => Header[]
-```
-
-If pinning, returns headers for all columns that are not pinned, including parent headers.
-
-### `getRightFlatHeaders`
-
-```tsx
-type getRightFlatHeaders = () => Header[]
-```
-
-If pinning, returns headers for all right pinned columns in the table, including parent headers.
-
-### `getLeafHeaders`
-
-```tsx
-type getLeafHeaders = () => Header[]
-```
-
-Returns headers for all leaf columns in the table, (not including parent headers).
-
-### `getLeftLeafHeaders`
-
-```tsx
-type getLeftLeafHeaders = () => Header[]
-```
-
-If pinning, returns headers for all left pinned leaf columns in the table, (not including parent headers).
-
-### `getCenterLeafHeaders`
-
-```tsx
-type getCenterLeafHeaders = () => Header[]
-```
-
-If pinning, returns headers for all columns that are not pinned, (not including parent headers).
-
-### `getRightLeafHeaders`
-
-```tsx
-type getRightLeafHeaders = () => Header[]
-```
-
-If pinning, returns headers for all right pinned leaf columns in the table, (not including parent headers).
diff --git a/docs/api/core/row.md b/docs/api/core/row.md
deleted file mode 100644
index c478062f56..0000000000
--- a/docs/api/core/row.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-title: Row APIs
----
-
-These are **core** options and API properties for all rows. More options and API properties are available for other [table features](../../../guide/features.md).
-
-## Row API
-
-All row objects have the following properties:
-
-### `id`
-
-```tsx
-id: string
-```
-
-The resolved unique identifier for the row resolved via the `options.getRowId` option. Defaults to the row's index (or relative index if it is a subRow)
-
-### `depth`
-
-```tsx
-depth: number
-```
-
-The depth of the row (if nested or grouped) relative to the root row array.
-
-### `index`
-
-```tsx
-index: number
-```
-
-The index of the row within its parent array (or the root data array)
-
-### `original`
-
-```tsx
-original: TData
-```
-
-The original row object provided to the table.
-
-> 🧠 If the row is a grouped row, the original row object will be the first original in the group.
-
-### `parentId`
-
-```tsx
-parentId?: string
-```
-
-If nested, this row's parent row id.
-
-### `getValue`
-
-```tsx
-getValue: (columnId: string) => TValue
-```
-
-Returns the value from the row for a given columnId
-
-### `renderValue`
-
-```tsx
-renderValue: (columnId: string) => TValue
-```
-
-Renders the value from the row for a given columnId, but will return the `renderFallbackValue` if no value is found.
-
-### `getUniqueValues`
-
-```tsx
-getUniqueValues: (columnId: string) => TValue[]
-```
-
-Returns a unique array of values from the row for a given columnId.
-
-### `subRows`
-
-```tsx
-type subRows = Row[]
-```
-
-An array of subRows for the row as returned and created by the `options.getSubRows` option.
-
-### `getParentRow`
-
-```tsx
-type getParentRow = () => Row | undefined
-```
-
-Returns the parent row for the row, if it exists.
-
-### `getParentRows`
-
-```tsx
-type getParentRows = () => Row[]
-```
-
-Returns the parent rows for the row, all the way up to a root row.
-
-### `getLeafRows`
-
-```tsx
-type getLeafRows = () => Row[]
-```
-
-Returns the leaf rows for the row, not including any parent rows.
-
-### `originalSubRows`
-
-```tsx
-originalSubRows?: TData[]
-```
-
-An array of the original subRows as returned by the `options.getSubRows` option.
-
-### `getAllCells`
-
-```tsx
-type getAllCells = () => Cell[]
-```
-
-Returns all of the [Cells](../cell.md) for the row.
diff --git a/docs/api/core/table.md b/docs/api/core/table.md
deleted file mode 100644
index fbd1e06cf8..0000000000
--- a/docs/api/core/table.md
+++ /dev/null
@@ -1,385 +0,0 @@
----
-title: Table APIs
----
-
-## `useReactTable` / `createSolidTable` / `useQwikTable` / `useVueTable` / `createSvelteTable`
-
-```tsx
-type useReactTable = (
- options: TableOptions
-) => Table
-```
-
-These functions are used to create a table. Which one you use depends on which framework adapter you are using.
-
-## Options
-
-These are **core** options and API properties for the table. More options and API properties are available for other [table features](../../../guide/features.md).
-
-### `data`
-
-```tsx
-data: TData[]
-```
-
-The data for the table to display. This array should match the type you provided to `table.setRowType<...>`, but in theory could be an array of anything. It's common for each item in the array to be an object of key/values but this is not required. Columns can access this data via string/index or a functional accessor to return anything they want.
-
-When the `data` option changes reference (compared via `Object.is`), the table will reprocess the data. Any other data processing that relies on the core data model (such as grouping, sorting, filtering, etc) will also be reprocessed.
-
-> 🧠 Make sure your `data` option is only changing when you want the table to reprocess. Providing an inline `[]` or constructing the data array as a new object every time you want to render the table will result in a _lot_ of unnecessary re-processing. This can easily go unnoticed in smaller tables, but you will likely notice it in larger tables.
-
-### `columns`
-
-```tsx
-type columns = ColumnDef[]
-```
-
-The array of column defs to use for the table. See the [Column Def Guide](../../../guide/column-defs.md) for more information on creating column definitions.
-
-### `defaultColumn`
-
-```tsx
-defaultColumn?: Partial>
-```
-
-Default column options to use for all column defs supplied to the table. This is useful for providing default cell/header/footer renderers, sorting/filtering/grouping options, etc. All column definitions passed to `options.columns` are merged with this default column definition to produce the final column definitions.
-
-### `initialState`
-
-```tsx
-initialState?: Partial<
- VisibilityTableState &
- ColumnOrderTableState &
- ColumnPinningTableState &
- FiltersTableState &
- SortingTableState &
- ExpandedTableState &
- GroupingTableState &
- ColumnSizingTableState &
- PaginationTableState &
- RowSelectionTableState
->
-```
-
-Use this option to optionally pass initial state to the table. This state will be used when resetting various table states either automatically by the table (eg. `options.autoResetPageIndex`) or via functions like `table.resetRowSelection()`. Most reset function allow you optionally pass a flag to reset to a blank/default state instead of the initial state.
-
-> 🧠 Table state will not be reset when this object changes, which also means that the initial state object does not need to be stable.
-
-### `autoResetAll`
-
-```tsx
-autoResetAll?: boolean
-```
-
-Set this option to override any of the `autoReset...` feature options.
-
-### `meta`
-
-```tsx
-meta?: TableMeta // This interface is extensible via declaration merging. See below!
-```
-
-You can pass any object to `options.meta` and access it anywhere the `table` is available via `table.options.meta` This type is global to all tables and can be extended like so:
-
-```tsx
-declare module '@tanstack/table-core' {
- interface TableMeta {
- foo: string
- }
-}
-```
-
-> 🧠 Think of this option as an arbitrary "context" for your table. This is a great way to pass arbitrary data or functions to your table without having to pass it to every thing the table touches. A good example is passing a locale object to your table to use for formatting dates, numbers, etc or even a function that can be used to update editable data like in the [editable-data](https://github.com/TanStack/table/tree/main/examples/react/editable-data) example.
-
-### `state`
-
-```tsx
-state?: Partial<
- VisibilityTableState &
- ColumnOrderTableState &
- ColumnPinningTableState &
- FiltersTableState &
- SortingTableState &
- ExpandedTableState &
- GroupingTableState &
- ColumnSizingTableState &
- PaginationTableState &
- RowSelectionTableState
->
-```
-
-The `state` option can be used to optionally _control_ part or all of the table state. The state you pass here will merge with and overwrite the internal automatically-managed state to produce the final state for the table. You can also listen to state changes via the `onStateChange` option.
-
-### `onStateChange`
-
-```tsx
-onStateChange: (updater: Updater) => void
-```
-
-The `onStateChange` option can be used to optionally listen to state changes within the table. If you provide this options, you will be responsible for controlling and updating the table state yourself. You can provide the state back to the table with the `state` option.
-
-### `debugAll`
-
-> ⚠️ Debugging is only available in development mode.
-
-```tsx
-debugAll?: boolean
-```
-
-Set this option to true to output all debugging information to the console.
-
-### `debugTable`
-
-> ⚠️ Debugging is only available in development mode.
-
-```tsx
-debugTable?: boolean
-```
-
-Set this option to true to output table debugging information to the console.
-
-### `debugHeaders`
-
-> ⚠️ Debugging is only available in development mode.
-
-```tsx
-debugHeaders?: boolean
-```
-
-Set this option to true to output header debugging information to the console.
-
-### `debugColumns`
-
-> ⚠️ Debugging is only available in development mode.
-
-```tsx
-debugColumns?: boolean
-```
-
-Set this option to true to output column debugging information to the console.
-
-### `debugRows`
-
-> ⚠️ Debugging is only available in development mode.
-
-```tsx
-debugRows?: boolean
-```
-
-Set this option to true to output row debugging information to the console.
-
-### `_features`
-
-```tsx
-_features?: TableFeature[]
-```
-
-An array of extra features that you can add to the table instance.
-
-### `render`
-
-> ⚠️ This option is only necessary if you are implementing a table adapter.
-
-```tsx
-type render = (template: Renderable, props: TProps) => any
-```
-
-The `render` option provides a renderer implementation for the table. This implementation is used to turn a table's various column header and cell templates into a result that is supported by the user's framework.
-
-### `mergeOptions`
-
-> ⚠️ This option is only necessary if you are implementing a table adapter.
-
-```tsx
-type mergeOptions = (defaultOptions: T, options: Partial) => T
-```
-
-This option is used to optionally implement the merging of table options. Some framework like solid-js use proxies to track reactivity and usage, so merging reactive objects needs to be handled carefully. This option inverts control of this process to the adapter.
-
-### `getCoreRowModel`
-
-```tsx
-getCoreRowModel: (table: Table) => () => RowModel
-```
-
-This required option is a factory for a function that computes and returns the core row model for the table. It is called **once** per table and should return a **new function** which will calculate and return the row model for the table.
-
-A default implementation is provided via any table adapter's `{ getCoreRowModel }` export.
-
-### `getSubRows`
-
-```tsx
-getSubRows?: (
- originalRow: TData,
- index: number
-) => undefined | TData[]
-```
-
-This optional function is used to access the sub rows for any given row. If you are using nested rows, you will need to use this function to return the sub rows object (or undefined) from the row.
-
-### `getRowId`
-
-```tsx
-getRowId?: (
- originalRow: TData,
- index: number,
- parent?: Row
-) => string
-```
-
-This optional function is used to derive a unique ID for any given row. If not provided the rows index is used (nested rows join together with `.` using their grandparents' index eg. `index.index.index`). If you need to identify individual rows that are originating from any server-side operations, it's suggested you use this function to return an ID that makes sense regardless of network IO/ambiguity eg. a userId, taskId, database ID field, etc.
-
-## Table API
-
-These properties and methods are available on the table object:
-
-### `initialState`
-
-```tsx
-initialState: VisibilityTableState &
- ColumnOrderTableState &
- ColumnPinningTableState &
- FiltersTableState &
- SortingTableState &
- ExpandedTableState &
- GroupingTableState &
- ColumnSizingTableState &
- PaginationTableState &
- RowSelectionTableState
-```
-
-This is the resolved initial state of the table.
-
-### `reset`
-
-```tsx
-reset: () => void
-```
-
-Call this function to reset the table state to the initial state.
-
-### `getState`
-
-```tsx
-getState: () => TableState
-```
-
-Call this function to get the table's current state. It's recommended to use this function and its state, especially when managing the table state manually. It is the exact same state used internally by the table for every feature and function it provides.
-
-> 🧠 The state returned by this function is the shallow-merged result of the automatically-managed internal table-state and any manually-managed state passed via `options.state`.
-
-### `setState`
-
-```tsx
-setState: (updater: Updater) => void
-```
-
-Call this function to update the table state. It's recommended you pass an updater function in the form of `(prevState) => newState` to update the state, but a direct object can also be passed.
-
-> 🧠 If `options.onStateChange` is provided, it will be triggered by this function with the new state.
-
-### `options`
-
-```tsx
-options: TableOptions
-```
-
-A read-only reference to the table's current options.
-
-> ⚠️ This property is generally used internally or by adapters. It can be updated by passing new options to your table. This is different per adapter. For adapters themselves, table options must be updated via the `setOptions` function.
-
-### `setOptions`
-
-```tsx
-setOptions: (newOptions: Updater>) => void
-```
-
-> ⚠️ This function is generally used by adapters to update the table options. It can be used to update the table options directly, but it is generally not recommended to bypass your adapters strategy for updating table options.
-
-### `getCoreRowModel`
-
-```tsx
-getCoreRowModel: () => {
- rows: Row[],
- flatRows: Row[],
- rowsById: Record>,
-}
-```
-
-Returns the core row model before any processing has been applied.
-
-### `getRowModel`
-
-```tsx
-getRowModel: () => {
- rows: Row[],
- flatRows: Row[],
- rowsById: Record>,
-}
-```
-
-Returns the final model after all processing from other used features has been applied.
-
-### `getAllColumns`
-
-```tsx
-type getAllColumns = () => Column[]
-```
-
-Returns all columns in the table in their normalized and nested hierarchy, mirrored from the column defs passed to the table.
-
-### `getAllFlatColumns`
-
-```tsx
-type getAllFlatColumns = () => Column[]
-```
-
-Returns all columns in the table flattened to a single level. This includes parent column objects throughout the hierarchy.
-
-### `getAllLeafColumns`
-
-```tsx
-type getAllLeafColumns = () => Column[]
-```
-
-Returns all leaf-node columns in the table flattened to a single level. This does not include parent columns.
-
-### `getColumn`
-
-```tsx
-type getColumn = (id: string) => Column | undefined
-```
-
-Returns a single column by its ID.
-
-### `getHeaderGroups`
-
-```tsx
-type getHeaderGroups = () => HeaderGroup[]
-```
-
-Returns the header groups for the table.
-
-### `getFooterGroups`
-
-```tsx
-type getFooterGroups = () => HeaderGroup[]
-```
-
-Returns the footer groups for the table.
-
-### `getFlatHeaders`
-
-```tsx
-type getFlatHeaders = () => Header[]
-```
-
-Returns a flattened array of Header objects for the table, including parent headers.
-
-### `getLeafHeaders`
-
-```tsx
-type getLeafHeaders = () => Header[]
-```
-
-Returns a flattened array of leaf-node Header objects for the table.
diff --git a/docs/api/features/column-faceting.md b/docs/api/features/column-faceting.md
deleted file mode 100644
index 2a951da447..0000000000
--- a/docs/api/features/column-faceting.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: Column Faceting APIs
-id: column-faceting
----
-
-## Column API
-
-### `getFacetedRowModel`
-
-```tsx
-type getFacetedRowModel = () => RowModel
-```
-
-> ⚠️ Requires that you pass a valid `getFacetedRowModel` function to `options.facetedRowModel`. A default implementation is provided via the exported `getFacetedRowModel` function.
-
-Returns the row model with all other column filters applied, excluding its own filter. Useful for displaying faceted result counts.
-
-### `getFacetedUniqueValues`
-
-```tsx
-getFacetedUniqueValues: () => Map
-```
-
-> ⚠️ Requires that you pass a valid `getFacetedUniqueValues` function to `options.getFacetedUniqueValues`. A default implementation is provided via the exported `getFacetedUniqueValues` function.
-
-A function that **computes and returns** a `Map` of unique values and their occurrences derived from `column.getFacetedRowModel`. Useful for displaying faceted result values.
-
-### `getFacetedMinMaxValues`
-
-```tsx
-getFacetedMinMaxValues: () => Map
-```
-
-> ⚠️ Requires that you pass a valid `getFacetedMinMaxValues` function to `options.getFacetedMinMaxValues`. A default implementation is provided via the exported `getFacetedMinMaxValues` function.
-
-A function that **computes and returns** a min/max tuple derived from `column.getFacetedRowModel`. Useful for displaying faceted result values.
-
-## Table Options
-
-### `getColumnFacetedRowModel`
-
-```tsx
-getColumnFacetedRowModel: (columnId: string) => RowModel
-```
-
-Returns the faceted row model for a given columnId.
diff --git a/docs/api/features/column-filtering.md b/docs/api/features/column-filtering.md
deleted file mode 100644
index b32d4f314c..0000000000
--- a/docs/api/features/column-filtering.md
+++ /dev/null
@@ -1,396 +0,0 @@
----
-title: Column Filtering APIs
-id: column-filtering
----
-
-## Can-Filter
-
-The ability for a column to be **column** filtered is determined by the following:
-
-- The column was defined with a valid `accessorKey`/`accessorFn`.
-- `column.enableColumnFilter` is not set to `false`
-- `options.enableColumnFilters` is not set to `false`
-- `options.enableFilters` is not set to `false`
-
-## State
-
-Filter state is stored on the table using the following shape:
-
-```tsx
-export interface ColumnFiltersTableState {
- columnFilters: ColumnFiltersState
-}
-
-export type ColumnFiltersState = ColumnFilter[]
-
-export interface ColumnFilter {
- id: string
- value: unknown
-}
-```
-
-## Filter Functions
-
-The following filter functions are built-in to the table core:
-
-- `includesString`
- - Case-insensitive string inclusion
-- `includesStringSensitive`
- - Case-sensitive string inclusion
-- `equalsString`
- - Case-insensitive string equality
-- `equalsStringSensitive`
- - Case-sensitive string equality
-- `arrIncludes`
- - Item inclusion within an array
-- `arrIncludesAll`
- - All items included in an array
-- `arrIncludesSome`
- - Some items included in an array
-- `equals`
- - Object/referential equality `Object.is`/`===`
-- `weakEquals`
- - Weak object/referential equality `==`
-- `inNumberRange`
- - Number range inclusion
-
-Every filter function receives:
-
-- The row to filter
-- The columnId to use to retrieve the row's value
-- The filter value
-
-and should return `true` if the row should be included in the filtered rows, and `false` if it should be removed.
-
-This is the type signature for every filter function:
-
-```tsx
-export type FilterFn = {
- (
- row: Row,
- columnId: string,
- filterValue: any,
- addMeta: (meta: any) => void
- ): boolean
- resolveFilterValue?: TransformFilterValueFn
- autoRemove?: ColumnFilterAutoRemoveTestFn
- addMeta?: (meta?: any) => void
-}
-
-export type TransformFilterValueFn = (
- value: any,
- column?: Column
-) => unknown
-
-export type ColumnFilterAutoRemoveTestFn = (
- value: any,
- column?: Column
-) => boolean
-
-export type CustomFilterFns = Record<
- string,
- FilterFn
->
-```
-
-### `filterFn.resolveFilterValue`
-
-This optional "hanging" method on any given `filterFn` allows the filter function to transform/sanitize/format the filter value before it is passed to the filter function.
-
-### `filterFn.autoRemove`
-
-This optional "hanging" method on any given `filterFn` is passed a filter value and expected to return `true` if the filter value should be removed from the filter state. eg. Some boolean-style filters may want to remove the filter value from the table state if the filter value is set to `false`.
-
-#### Using Filter Functions
-
-Filter functions can be used/referenced/defined by passing the following to `columnDefinition.filterFn`:
-
-- A `string` that references a built-in filter function
-- A function directly provided to the `columnDefinition.filterFn` option
-
-The final list of filter functions available for the `columnDef.filterFn` option use the following type:
-
-```tsx
-export type FilterFnOption =
- | 'auto'
- | BuiltInFilterFn
- | FilterFn
-```
-
-#### Filter Meta
-
-Filtering data can often expose additional information about the data that can be used to aid other future operations on the same data. A good example of this concept is a ranking-system like that of [`match-sorter`](https://github.com/kentcdodds/match-sorter) that simultaneously ranks, filters and sorts data. While utilities like `match-sorter` make a lot of sense for single-dimensional filter+sort tasks, the decoupled filtering/sorting architecture of building a table makes them very difficult and slow to use.
-
-To make a ranking/filtering/sorting system work with tables, `filterFn`s can optionally mark results with a **filter meta** value that can be used later to sort/group/etc the data to your liking. This is done by calling the `addMeta` function supplied to your custom `filterFn`.
-
-Below is an example using our own `match-sorter-utils` package (a utility fork of `match-sorter`) to rank, filter, and sort the data
-
-```tsx
-import { sortingFns } from '@tanstack/react-table'
-
-import { rankItem, compareItems } from '@tanstack/match-sorter-utils'
-
-const fuzzyFilter = (row, columnId, value, addMeta) => {
- // Rank the item
- const itemRank = rankItem(row.getValue(columnId), value)
-
- // Store the ranking info
- addMeta(itemRank)
-
- // Return if the item should be filtered in/out
- return itemRank.passed
-}
-
-const fuzzySort = (rowA, rowB, columnId) => {
- let dir = 0
-
- // Only sort by rank if the column has ranking information
- if (rowA.columnFiltersMeta[columnId]) {
- dir = compareItems(
- rowA.columnFiltersMeta[columnId]!,
- rowB.columnFiltersMeta[columnId]!
- )
- }
-
- // Provide an alphanumeric fallback for when the item ranks are equal
- return dir === 0 ? sortingFns.alphanumeric(rowA, rowB, columnId) : dir
-}
-```
-
-## Column Def Options
-
-### `filterFn`
-
-```tsx
-filterFn?: FilterFn | keyof FilterFns | keyof BuiltInFilterFns
-```
-
-The filter function to use with this column.
-
-Options:
-
-- A `string` referencing a [built-in filter function](#filter-functions))
-- A [custom filter function](#filter-functions)
-
-### `enableColumnFilter`
-
-```tsx
-enableColumnFilter?: boolean
-```
-
-Enables/disables the **column** filter for this column.
-
-## Column API
-
-### `getCanFilter`
-
-```tsx
-getCanFilter: () => boolean
-```
-
-Returns whether or not the column can be **column** filtered.
-
-### `getFilterIndex`
-
-```tsx
-getFilterIndex: () => number
-```
-
-Returns the index (including `-1`) of the column filter in the table's `state.columnFilters` array.
-
-### `getIsFiltered`
-
-```tsx
-getIsFiltered: () => boolean
-```
-
-Returns whether or not the column is currently filtered.
-
-### `getFilterValue`
-
-```tsx
-getFilterValue: () => unknown
-```
-
-Returns the current filter value of the column.
-
-### `setFilterValue`
-
-```tsx
-setFilterValue: (updater: Updater) => void
-```
-
-A function that sets the current filter value for the column. You can pass it a value or an updater function for immutability-safe operations on existing values.
-
-### `getAutoFilterFn`
-
-```tsx
-getAutoFilterFn: (columnId: string) => FilterFn | undefined
-```
-
-Returns an automatically calculated filter function for the column based off of the columns first known value.
-
-### `getFilterFn`
-
-```tsx
-getFilterFn: (columnId: string) => FilterFn | undefined
-```
-
-Returns the filter function (either user-defined or automatic, depending on configuration) for the columnId specified.
-
-## Row API
-
-### `columnFilters`
-
-```tsx
-columnFilters: Record
-```
-
-The column filters map for the row. This object tracks whether a row is passing/failing specific filters by their column ID.
-
-### `columnFiltersMeta`
-
-```tsx
-columnFiltersMeta: Record
-```
-
-The column filters meta map for the row. This object tracks any filter meta for a row as optionally provided during the filtering process.
-
-## Table Options
-
-### `filterFns`
-
-```tsx
-filterFns?: Record
-```
-
-This option allows you to define custom filter functions that can be referenced in a column's `filterFn` option by their key.
-Example:
-
-```tsx
-declare module '@tanstack/[adapter]-table' {
- interface FilterFns {
- myCustomFilter: FilterFn
- }
-}
-
-const column = columnHelper.data('key', {
- filterFn: 'myCustomFilter',
-})
-
-const table = useReactTable({
- columns: [column],
- filterFns: {
- myCustomFilter: (rows, columnIds, filterValue) => {
- // return the filtered rows
- },
- },
-})
-```
-
-### `filterFromLeafRows`
-
-```tsx
-filterFromLeafRows?: boolean
-```
-
-By default, filtering is done from parent rows down (so if a parent row is filtered out, all of its children will be filtered out as well). Setting this option to `true` will cause filtering to be done from leaf rows up (which means parent rows will be included so long as one of their child or grand-child rows is also included).
-
-### `maxLeafRowFilterDepth`
-
-```tsx
-maxLeafRowFilterDepth?: number
-```
-
-By default, filtering is done for all rows (max depth of 100), no matter if they are root level parent rows or the child leaf rows of a parent row. Setting this option to `0` will cause filtering to only be applied to the root level parent rows, with all sub-rows remaining unfiltered. Similarly, setting this option to `1` will cause filtering to only be applied to child leaf rows 1 level deep, and so on.
-
-This is useful for situations where you want a row's entire child hierarchy to be visible regardless of the applied filter.
-
-### `enableFilters`
-
-```tsx
-enableFilters?: boolean
-```
-
-Enables/disables all filters for the table.
-
-### `manualFiltering`
-
-```tsx
-manualFiltering?: boolean
-```
-
-Disables the `getFilteredRowModel` from being used to filter data. This may be useful if your table needs to dynamically support both client-side and server-side filtering.
-
-### `onColumnFiltersChange`
-
-```tsx
-onColumnFiltersChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.columnFilters` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
-
-### `enableColumnFilters`
-
-```tsx
-enableColumnFilters?: boolean
-```
-
-Enables/disables **all** column filters for the table.
-
-### `getFilteredRowModel`
-
-```tsx
-getFilteredRowModel?: (
- table: Table
-) => () => RowModel
-```
-
-If provided, this function is called **once** per table and should return a **new function** which will calculate and return the row model for the table when it's filtered.
-
-- For server-side filtering, this function is unnecessary and can be ignored since the server should already return the filtered row model.
-- For client-side filtering, this function is required. A default implementation is provided via any table adapter's `{ getFilteredRowModel }` export.
-
-Example:
-
-```tsx
-import { getFilteredRowModel } from '@tanstack/[adapter]-table'
-
-
- getFilteredRowModel: getFilteredRowModel(),
-})
-```
-
-## Table API
-
-### `setColumnFilters`
-
-```tsx
-setColumnFilters: (updater: Updater) => void
-```
-
-Sets or updates the `state.columnFilters` state.
-
-### `resetColumnFilters`
-
-```tsx
-resetColumnFilters: (defaultState?: boolean) => void
-```
-
-Resets the **columnFilters** state to `initialState.columnFilters`, or `true` can be passed to force a default blank state reset to `[]`.
-
-### `getPreFilteredRowModel`
-
-```tsx
-getPreFilteredRowModel: () => RowModel
-```
-
-Returns the row model for the table before any **column** filtering has been applied.
-
-### `getFilteredRowModel`
-
-```tsx
-getFilteredRowModel: () => RowModel
-```
-
-Returns the row model for the table after **column** filtering has been applied.
diff --git a/docs/api/features/column-ordering.md b/docs/api/features/column-ordering.md
deleted file mode 100644
index 37bfb95337..0000000000
--- a/docs/api/features/column-ordering.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: Column Ordering APIs
-id: column-ordering
----
-
-## State
-
-Column ordering state is stored on the table using the following shape:
-
-```tsx
-export type ColumnOrderTableState = {
- columnOrder: ColumnOrderState
-}
-
-export type ColumnOrderState = string[]
-```
-
-## Table Options
-
-### `onColumnOrderChange`
-
-```tsx
-onColumnOrderChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.columnOrder` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
-
-## Table API
-
-### `setColumnOrder`
-
-```tsx
-setColumnOrder: (updater: Updater) => void
-```
-
-Sets or updates the `state.columnOrder` state.
-
-### `resetColumnOrder`
-
-```tsx
-resetColumnOrder: (defaultState?: boolean) => void
-```
-
-Resets the **columnOrder** state to `initialState.columnOrder`, or `true` can be passed to force a default blank state reset to `[]`.
-
-## Column API
-
-### `getIndex`
-
-```tsx
-getIndex: (position?: ColumnPinningPosition) => number
-```
-
-Returns the index of the column in the order of the visible columns. Optionally pass a `position` parameter to get the index of the column in a sub-section of the table.
-
-### `getIsFirstColumn`
-
-```tsx
-getIsFirstColumn: (position?: ColumnPinningPosition) => boolean
-```
-
-Returns `true` if the column is the first column in the order of the visible columns. Optionally pass a `position` parameter to check if the column is the first in a sub-section of the table.
-
-### `getIsLastColumn`
-
-```tsx
-getIsLastColumn: (position?: ColumnPinningPosition) => boolean
-```
-
-Returns `true` if the column is the last column in the order of the visible columns. Optionally pass a `position` parameter to check if the column is the last in a sub-section of the table.
\ No newline at end of file
diff --git a/docs/api/features/column-pinning.md b/docs/api/features/column-pinning.md
deleted file mode 100644
index a312b33823..0000000000
--- a/docs/api/features/column-pinning.md
+++ /dev/null
@@ -1,266 +0,0 @@
----
-title: Column Pinning APIs
-id: column-pinning
----
-
-## Can-Pin
-
-The ability for a column to be **pinned** is determined by the following:
-
-- `options.enablePinning` is not set to `false`
-- `options.enableColumnPinning` is not set to `false`
-- `columnDefinition.enablePinning` is not set to `false`
-
-## State
-
-Pinning state is stored on the table using the following shape:
-
-```tsx
-export type ColumnPinningPosition = false | 'left' | 'right'
-
-export type ColumnPinningState = {
- left?: string[]
- right?: string[]
-}
-
-
-export type ColumnPinningTableState = {
- columnPinning: ColumnPinningState
-}
-```
-
-## Table Options
-
-### `enableColumnPinning`
-
-```tsx
-enableColumnPinning?: boolean
-```
-
-Enables/disables column pinning for all columns in the table.
-
-### `onColumnPinningChange`
-
-```tsx
-onColumnPinningChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.columnPinning` changes. This overrides the default internal state management, so you will also need to supply `state.columnPinning` from your own managed state.
-
-## Column Def Options
-
-### `enablePinning`
-
-```tsx
-enablePinning?: boolean
-```
-
-Enables/disables pinning for the column.
-
-## Table API
-
-### `setColumnPinning`
-
-```tsx
-setColumnPinning: (updater: Updater) => void
-```
-
-Sets or updates the `state.columnPinning` state.
-
-### `resetColumnPinning`
-
-```tsx
-resetColumnPinning: (defaultState?: boolean) => void
-```
-
-Resets the **columnPinning** state to `initialState.columnPinning`, or `true` can be passed to force a default blank state reset to `{ left: [], right: [], }`.
-
-### `getIsSomeColumnsPinned`
-
-```tsx
-getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean
-```
-
-Returns whether or not any columns are pinned. Optionally specify to only check for pinned columns in either the `left` or `right` position.
-
-_Note: Does not account for column visibility_
-
-### `getLeftHeaderGroups`
-
-```tsx
-getLeftHeaderGroups: () => HeaderGroup[]
-```
-
-Returns the left pinned header groups for the table.
-
-### `getCenterHeaderGroups`
-
-```tsx
-getCenterHeaderGroups: () => HeaderGroup[]
-```
-
-Returns the unpinned/center header groups for the table.
-
-### `getRightHeaderGroups`
-
-```tsx
-getRightHeaderGroups: () => HeaderGroup[]
-```
-
-Returns the right pinned header groups for the table.
-
-### `getLeftFooterGroups`
-
-```tsx
-getLeftFooterGroups: () => HeaderGroup[]
-```
-
-Returns the left pinned footer groups for the table.
-
-### `getCenterFooterGroups`
-
-```tsx
-getCenterFooterGroups: () => HeaderGroup[]
-```
-
-Returns the unpinned/center footer groups for the table.
-
-### `getRightFooterGroups`
-
-```tsx
-getRightFooterGroups: () => HeaderGroup[]
-```
-
-Returns the right pinned footer groups for the table.
-
-### `getLeftFlatHeaders`
-
-```tsx
-getLeftFlatHeaders: () => Header[]
-```
-
-Returns a flat array of left pinned headers for the table, including parent headers.
-
-### `getCenterFlatHeaders`
-
-```tsx
-getCenterFlatHeaders: () => Header[]
-```
-
-Returns a flat array of unpinned/center headers for the table, including parent headers.
-
-### `getRightFlatHeaders`
-
-```tsx
-getRightFlatHeaders: () => Header[]
-```
-
-Returns a flat array of right pinned headers for the table, including parent headers.
-
-### `getLeftLeafHeaders`
-
-```tsx
-getLeftLeafHeaders: () => Header[]
-```
-
-Returns a flat array of leaf-node left pinned headers for the table.
-
-### `getCenterLeafHeaders`
-
-```tsx
-getCenterLeafHeaders: () => Header[]
-```
-
-Returns a flat array of leaf-node unpinned/center headers for the table.
-
-### `getRightLeafHeaders`
-
-```tsx
-getRightLeafHeaders: () => Header[]
-```
-
-Returns a flat array of leaf-node right pinned headers for the table.
-
-### `getLeftLeafColumns`
-
-```tsx
-getLeftLeafColumns: () => Column[]
-```
-
-Returns all left pinned leaf columns.
-
-### `getRightLeafColumns`
-
-```tsx
-getRightLeafColumns: () => Column[]
-```
-
-Returns all right pinned leaf columns.
-
-### `getCenterLeafColumns`
-
-```tsx
-getCenterLeafColumns: () => Column[]
-```
-
-Returns all center pinned (unpinned) leaf columns.
-
-## Column API
-
-### `getCanPin`
-
-```tsx
-getCanPin: () => boolean
-```
-
-Returns whether or not the column can be pinned.
-
-### `getPinnedIndex`
-
-```tsx
-getPinnedIndex: () => number
-```
-
-Returns the numeric pinned index of the column within a pinned column group.
-
-### `getIsPinned`
-
-```tsx
-getIsPinned: () => ColumnPinningPosition
-```
-
-Returns the pinned position of the column. (`'left'`, `'right'` or `false`)
-
-### `pin`
-
-```tsx
-pin: (position: ColumnPinningPosition) => void
-```
-
-Pins a column to the `'left'` or `'right'`, or unpins the column to the center if `false` is passed.
-
-## Row API
-
-### `getLeftVisibleCells`
-
-```tsx
-getLeftVisibleCells: () => Cell[]
-```
-
-Returns all left pinned leaf cells in the row.
-
-### `getRightVisibleCells`
-
-```tsx
-getRightVisibleCells: () => Cell[]
-```
-
-Returns all right pinned leaf cells in the row.
-
-### `getCenterVisibleCells`
-
-```tsx
-getCenterVisibleCells: () => Cell[]
-```
-
-Returns all center pinned (unpinned) leaf cells in the row.
diff --git a/docs/api/features/column-sizing.md b/docs/api/features/column-sizing.md
deleted file mode 100644
index 0bf7631be8..0000000000
--- a/docs/api/features/column-sizing.md
+++ /dev/null
@@ -1,253 +0,0 @@
----
-title: Column Sizing APIs
-id: column-sizing
----
-
-## State
-
-Column sizing state is stored on the table using the following shape:
-
-```tsx
-export type ColumnSizingTableState = {
- columnSizing: ColumnSizing
- columnSizingInfo: ColumnSizingInfoState
-}
-
-export type ColumnSizing = Record
-
-export type ColumnSizingInfoState = {
- startOffset: null | number
- startSize: null | number
- deltaOffset: null | number
- deltaPercentage: null | number
- isResizingColumn: false | string
- columnSizingStart: [string, number][]
-}
-```
-
-## Column Def Options
-
-### `enableResizing`
-
-```tsx
-enableResizing?: boolean
-```
-
-Enables or disables column resizing for the column.
-
-### `size`
-
-```tsx
-size?: number
-```
-
-The desired size for the column
-
-### `minSize`
-
-```tsx
-minSize?: number
-```
-
-The minimum allowed size for the column
-
-### `maxSize`
-
-```tsx
-maxSize?: number
-```
-
-The maximum allowed size for the column
-
-## Column API
-
-### `getSize`
-
-```tsx
-getSize: () => number
-```
-
-Returns the current size of the column
-
-### `getStart`
-
-```tsx
-getStart: (position?: ColumnPinningPosition) => number
-```
-
-Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the column, measuring the size of all preceding columns.
-
-Useful for sticky or absolute positioning of columns. (e.g. `left` or `transform`)
-
-### `getAfter`
-
-```tsx
-getAfter: (position?: ColumnPinningPosition) => number
-```
-
-Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the column, measuring the size of all succeeding columns.
-
-Useful for sticky or absolute positioning of columns. (e.g. `right` or `transform`)
-
-### `getCanResize`
-
-```tsx
-getCanResize: () => boolean
-```
-
-Returns `true` if the column can be resized.
-
-### `getIsResizing`
-
-```tsx
-getIsResizing: () => boolean
-```
-
-Returns `true` if the column is currently being resized.
-
-### `resetSize`
-
-```tsx
-resetSize: () => void
-```
-
-Resets the column size to its initial size.
-
-## Header API
-
-### `getSize`
-
-```tsx
-getSize: () => number
-```
-
-Returns the size for the header, calculated by summing the size of all leaf-columns that belong to it.
-
-### `getStart`
-
-```tsx
-getStart: (position?: ColumnPinningPosition) => number
-```
-
-Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all preceding headers.
-
-### `getResizeHandler`
-
-```tsx
-getResizeHandler: () => (event: unknown) => void
-```
-
-Returns an event handler function that can be used to resize the header. It can be used as an:
-
-- `onMouseDown` handler
-- `onTouchStart` handler
-
-The dragging and release events are automatically handled for you.
-
-## Table Options
-
-### `enableColumnResizing`
-
-```tsx
-enableColumnResizing?: boolean
-```
-
-Enables/disables column resizing for \*all columns\*\*.
-
-### `columnResizeMode`
-
-```tsx
-columnResizeMode?: 'onChange' | 'onEnd'
-```
-
-Determines when the columnSizing state is updated. `onChange` updates the state when the user is dragging the resize handle. `onEnd` updates the state when the user releases the resize handle.
-
-### `columnResizeDirection`
-
-```tsx
-columnResizeDirection?: 'ltr' | 'rtl'
-```
-
-Enables or disables right-to-left support for resizing the column. defaults to 'ltr'.
-
-### `onColumnSizingChange`
-
-```tsx
-onColumnSizingChange?: OnChangeFn
-```
-
-This optional function will be called when the columnSizing state changes. If you provide this function, you will be responsible for maintaining its state yourself. You can pass this state back to the table via the `state.columnSizing` table option.
-
-### `onColumnSizingInfoChange`
-
-```tsx
-onColumnSizingInfoChange?: OnChangeFn
-```
-
-This optional function will be called when the columnSizingInfo state changes. If you provide this function, you will be responsible for maintaining its state yourself. You can pass this state back to the table via the `state.columnSizingInfo` table option.
-
-## Table API
-
-### `setColumnSizing`
-
-```tsx
-setColumnSizing: (updater: Updater) => void
-```
-
-Sets the column sizing state using an updater function or a value. This will trigger the underlying `onColumnSizingChange` function if one is passed to the table options, otherwise the state will be managed automatically by the table.
-
-### `setColumnSizingInfo`
-
-```tsx
-setColumnSizingInfo: (updater: Updater) => void
-```
-
-Sets the column sizing info state using an updater function or a value. This will trigger the underlying `onColumnSizingInfoChange` function if one is passed to the table options, otherwise the state will be managed automatically by the table.
-
-### `resetColumnSizing`
-
-```tsx
-resetColumnSizing: (defaultState?: boolean) => void
-```
-
-Resets column sizing to its initial state. If `defaultState` is `true`, the default state for the table will be used instead of the initialValue provided to the table.
-
-### `resetHeaderSizeInfo`
-
-```tsx
-resetHeaderSizeInfo: (defaultState?: boolean) => void
-```
-
-Resets column sizing info to its initial state. If `defaultState` is `true`, the default state for the table will be used instead of the initialValue provided to the table.
-
-### `getTotalSize`
-
-```tsx
-getTotalSize: () => number
-```
-
-Returns the total size of the table by calculating the sum of the sizes of all leaf-columns.
-
-### `getLeftTotalSize`
-
-```tsx
-getLeftTotalSize: () => number
-```
-
-If pinning, returns the total size of the left portion of the table by calculating the sum of the sizes of all left leaf-columns.
-
-### `getCenterTotalSize`
-
-```tsx
-getCenterTotalSize: () => number
-```
-
-If pinning, returns the total size of the center portion of the table by calculating the sum of the sizes of all unpinned/center leaf-columns.
-
-### `getRightTotalSize`
-
-```tsx
-getRightTotalSize: () => number
-```
-
-If pinning, returns the total size of the right portion of the table by calculating the sum of the sizes of all right leaf-columns.
diff --git a/docs/api/features/column-visibility.md b/docs/api/features/column-visibility.md
deleted file mode 100644
index e1280e7c03..0000000000
--- a/docs/api/features/column-visibility.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-title: Column Visibility APIs
-id: column-visibility
----
-
-## State
-
-Column visibility state is stored on the table using the following shape:
-
-```tsx
-export type VisibilityState = Record
-
-export type VisibilityTableState = {
- columnVisibility: VisibilityState
-}
-```
-
-## Column Def Options
-
-### `enableHiding`
-
-```tsx
-enableHiding?: boolean
-```
-
-Enables/disables hiding the column
-
-## Column API
-
-### `getCanHide`
-
-```tsx
-getCanHide: () => boolean
-```
-
-Returns whether the column can be hidden
-
-### `getIsVisible`
-
-```tsx
-getIsVisible: () => boolean
-```
-
-Returns whether the column is visible
-
-### `toggleVisibility`
-
-```tsx
-toggleVisibility: (value?: boolean) => void
-```
-
-Toggles the column visibility
-
-### `getToggleVisibilityHandler`
-
-```tsx
-getToggleVisibilityHandler: () => (event: unknown) => void
-```
-
-Returns a function that can be used to toggle the column visibility. This function can be used to bind to an event handler to a checkbox.
-
-## Table Options
-
-### `onColumnVisibilityChange`
-
-```tsx
-onColumnVisibilityChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.columnVisibility` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
-
-### `enableHiding`
-
-```tsx
-enableHiding?: boolean
-```
-
-Enables/disables hiding of columns.
-
-## Table API
-
-### `getVisibleFlatColumns`
-
-```tsx
-getVisibleFlatColumns: () => Column[]
-```
-
-Returns a flat array of columns that are visible, including parent columns.
-
-### `getVisibleLeafColumns`
-
-```tsx
-getVisibleLeafColumns: () => Column[]
-```
-
-Returns a flat array of leaf-node columns that are visible.
-
-### `getLeftVisibleLeafColumns`
-
-```tsx
-getLeftVisibleLeafColumns: () => Column[]
-```
-
-If column pinning, returns a flat array of leaf-node columns that are visible in the left portion of the table.
-
-### `getRightVisibleLeafColumns`
-
-```tsx
-getRightVisibleLeafColumns: () => Column[]
-```
-
-If column pinning, returns a flat array of leaf-node columns that are visible in the right portion of the table.
-
-### `getCenterVisibleLeafColumns`
-
-```tsx
-getCenterVisibleLeafColumns: () => Column[]
-```
-
-If column pinning, returns a flat array of leaf-node columns that are visible in the unpinned/center portion of the table.
-
-### `setColumnVisibility`
-
-```tsx
-setColumnVisibility: (updater: Updater) => void
-```
-
-Updates the column visibility state via an updater function or value
-
-### `resetColumnVisibility`
-
-```tsx
-resetColumnVisibility: (defaultState?: boolean) => void
-```
-
-Resets the column visibility state to the initial state. If `defaultState` is provided, the state will be reset to `{}`
-
-### `toggleAllColumnsVisible`
-
-```tsx
-toggleAllColumnsVisible: (value?: boolean) => void
-```
-
-Toggles the visibility of all columns
-
-### `getIsAllColumnsVisible`
-
-```tsx
-getIsAllColumnsVisible: () => boolean
-```
-
-Returns whether all columns are visible
-
-### `getIsSomeColumnsVisible`
-
-```tsx
-getIsSomeColumnsVisible: () => boolean
-```
-
-Returns whether some columns are visible
-
-### `getToggleAllColumnsVisibilityHandler`
-
-```tsx
-getToggleAllColumnsVisibilityHandler: () => ((event: unknown) => void)
-```
-
-Returns a handler for toggling the visibility of all columns, meant to be bound to a `input[type=checkbox]` element.
-
-## Row API
-
-### `getVisibleCells`
-
-```tsx
-getVisibleCells: () => Cell[]
-```
-
-Returns an array of cells that account for column visibility for the row.
\ No newline at end of file
diff --git a/docs/api/features/expanding.md b/docs/api/features/expanding.md
deleted file mode 100644
index af7ab0db43..0000000000
--- a/docs/api/features/expanding.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title: Expanding APIs
-id: expanding
----
-
-## State
-
-Expanding state is stored on the table using the following shape:
-
-```tsx
-export type ExpandedState = true | Record
-
-export type ExpandedTableState = {
- expanded: ExpandedState
-}
-```
-
-## Row API
-
-### `toggleExpanded`
-
-```tsx
-toggleExpanded: (expanded?: boolean) => void
-```
-
-Toggles the expanded state (or sets it if `expanded` is provided) for the row.
-
-### `getIsExpanded`
-
-```tsx
-getIsExpanded: () => boolean
-```
-
-Returns whether the row is expanded.
-
-### `getIsAllParentsExpanded`
-
-```tsx
-getIsAllParentsExpanded: () => boolean
-```
-
-Returns whether all parent rows of the row are expanded.
-
-### `getCanExpand`
-
-```tsx
-getCanExpand: () => boolean
-```
-
-Returns whether the row can be expanded.
-
-### `getToggleExpandedHandler`
-
-```tsx
-getToggleExpandedHandler: () => () => void
-```
-
-Returns a function that can be used to toggle the expanded state of the row. This function can be used to bind to an event handler to a button.
-
-## Table Options
-
-### `manualExpanding`
-
-```tsx
-manualExpanding?: boolean
-```
-
-Enables manual row expansion. If this is set to `true`, `getExpandedRowModel` will not be used to expand rows and you would be expected to perform the expansion in your own data model. This is useful if you are doing server-side expansion.
-
-### `onExpandedChange`
-
-```tsx
-onExpandedChange?: OnChangeFn
-```
-
-This function is called when the `expanded` table state changes. If a function is provided, you will be responsible for managing this state on your own. To pass the managed state back to the table, use the `tableOptions.state.expanded` option.
-
-### `autoResetExpanded`
-
-```tsx
-autoResetExpanded?: boolean
-```
-
-Enable this setting to automatically reset the expanded state of the table when expanding state changes.
-
-### `enableExpanding`
-
-```tsx
-enableExpanding?: boolean
-```
-
-Enable/disable expanding for all rows.
-
-### `getExpandedRowModel`
-
-```tsx
-getExpandedRowModel?: (table: Table) => () => RowModel
-```
-
-This function is responsible for returning the expanded row model. If this function is not provided, the table will not expand rows. You can use the default exported `getExpandedRowModel` function to get the expanded row model or implement your own.
-
-### `getIsRowExpanded`
-
-```tsx
-getIsRowExpanded?: (row: Row) => boolean
-```
-
-If provided, allows you to override the default behavior of determining whether a row is currently expanded.
-
-### `getRowCanExpand`
-
-```tsx
-getRowCanExpand?: (row: Row) => boolean
-```
-
-If provided, allows you to override the default behavior of determining whether a row can be expanded.
-
-### `paginateExpandedRows`
-
-```tsx
-paginateExpandedRows?: boolean
-```
-
-If `true` expanded rows will be paginated along with the rest of the table (which means expanded rows may span multiple pages).
-
-If `false` expanded rows will not be considered for pagination (which means expanded rows will always render on their parents page. This also means more rows will be rendered than the set page size)
-
-## Table API
-
-### `setExpanded`
-
-```tsx
-setExpanded: (updater: Updater) => void
-```
-
-Updates the expanded state of the table via an update function or value
-
-### `toggleAllRowsExpanded`
-
-```tsx
-toggleAllRowsExpanded: (expanded?: boolean) => void
-```
-
-Toggles the expanded state for all rows. Optionally, provide a value to set the expanded state to.
-
-### `resetExpanded`
-
-```tsx
-resetExpanded: (defaultState?: boolean) => void
-```
-
-Reset the expanded state of the table to the initial state. If `defaultState` is provided, the expanded state will be reset to `{}`
-
-### `getCanSomeRowsExpand`
-
-```tsx
-getCanSomeRowsExpand: () => boolean
-```
-
-Returns whether there are any rows that can be expanded.
-
-### `getToggleAllRowsExpandedHandler`
-
-```tsx
-getToggleAllRowsExpandedHandler: () => (event: unknown) => void
-```
-
-Returns a handler that can be used to toggle the expanded state of all rows. This handler is meant to be used with an `input[type=checkbox]` element.
-
-### `getIsSomeRowsExpanded`
-
-```tsx
-getIsSomeRowsExpanded: () => boolean
-```
-
-Returns whether there are any rows that are currently expanded.
-
-### `getIsAllRowsExpanded`
-
-```tsx
-getIsAllRowsExpanded: () => boolean
-```
-
-Returns whether all rows are currently expanded.
-
-### `getExpandedDepth`
-
-```tsx
-getExpandedDepth: () => number
-```
-
-Returns the maximum depth of the expanded rows.
-
-### `getExpandedRowModel`
-
-```tsx
-getExpandedRowModel: () => RowModel
-```
-
-Returns the row model after expansion has been applied.
-
-### `getPreExpandedRowModel`
-
-```tsx
-getPreExpandedRowModel: () => RowModel
-```
-
-Returns the row model before expansion has been applied.
diff --git a/docs/api/features/filters.md b/docs/api/features/filters.md
deleted file mode 100644
index 167fec059f..0000000000
--- a/docs/api/features/filters.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Filter APIs
-id: filters
----
-
-
-
-The Filtering API docs are now split into multiple API doc pages:
-
-- [Column Faceting](../../../guide/column-faceting.md)
-- [Global Faceting](../../../guide/global-faceting.md)
-- [Column Filtering](../../../guide/column-filtering.md)
-- [Global Filtering](../../../guide/global-filtering.md)
\ No newline at end of file
diff --git a/docs/api/features/global-faceting.md b/docs/api/features/global-faceting.md
deleted file mode 100644
index 820df889ff..0000000000
--- a/docs/api/features/global-faceting.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Global Faceting APIs
-id: global-faceting
----
-
-## Table API
-
-### `getGlobalFacetedRowModel`
-
-```tsx
-getGlobalFacetedRowModel: () => RowModel
-```
-
-Returns the faceted row model for the global filter.
-
-### `getGlobalFacetedUniqueValues`
-
-```tsx
-getGlobalFacetedUniqueValues: () => Map
-```
-
-Returns the faceted unique values for the global filter.
-
-### `getGlobalFacetedMinMaxValues`
-
-```tsx
-getGlobalFacetedMinMaxValues: () => [number, number]
-```
-
-Returns the faceted min and max values for the global filter.
diff --git a/docs/api/features/global-filtering.md b/docs/api/features/global-filtering.md
deleted file mode 100644
index 47b79d15bc..0000000000
--- a/docs/api/features/global-filtering.md
+++ /dev/null
@@ -1,291 +0,0 @@
----
-title: Global Filtering APIs
-id: global-filtering
----
-
-## Can-Filter
-
-The ability for a column to be **globally** filtered is determined by the following:
-
-- The column was defined a valid `accessorKey`/`accessorFn`.
-- If provided, `options.getColumnCanGlobalFilter` returns `true` for the given column. If it is not provided, the column is assumed to be globally filterable if the value in the first row is a `string` or `number` type.
-- `column.enableColumnFilter` is not set to `false`
-- `options.enableColumnFilters` is not set to `false`
-- `options.enableFilters` is not set to `false`
-
-## State
-
-Filter state is stored on the table using the following shape:
-
-```tsx
-export interface GlobalFilterTableState {
- globalFilter: any
-}
-```
-
-## Filter Functions
-
-You can use the same filter functions that are available for column filtering for global filtering. See the [Column Filtering](../../../guide/column-filtering.md) to learn more about filter functions.
-
-#### Using Filter Functions
-
-Filter functions can be used/referenced/defined by passing the following to `options.globalFilterFn`:
-
-- A `string` that references a built-in filter function
-- A function directly provided to the `options.globalFilterFn` option
-
-The final list of filter functions available for the `tableOptions.globalFilterFn` options use the following type:
-
-```tsx
-export type FilterFnOption =
- | 'auto'
- | BuiltInFilterFn
- | FilterFn
-```
-
-#### Filter Meta
-
-Filtering data can often expose additional information about the data that can be used to aid other future operations on the same data. A good example of this concept is a ranking-system like that of [`match-sorter`](https://github.com/kentcdodds/match-sorter) that simultaneously ranks, filters and sorts data. While utilities like `match-sorter` make a lot of sense for single-dimensional filter+sort tasks, the decoupled filtering/sorting architecture of building a table makes them very difficult and slow to use.
-
-To make a ranking/filtering/sorting system work with tables, `filterFn`s can optionally mark results with a **filter meta** value that can be used later to sort/group/etc the data to your liking. This is done by calling the `addMeta` function supplied to your custom `filterFn`.
-
-Below is an example using our own `match-sorter-utils` package (a utility fork of `match-sorter`) to rank, filter, and sort the data
-
-```tsx
-import { sortingFns } from '@tanstack/[adapter]-table'
-
-import { rankItem, compareItems } from '@tanstack/match-sorter-utils'
-
-const fuzzyFilter = (row, columnId, value, addMeta) => {
- // Rank the item
- const itemRank = rankItem(row.getValue(columnId), value)
-
- // Store the ranking info
- addMeta(itemRank)
-
- // Return if the item should be filtered in/out
- return itemRank.passed
-}
-
-const fuzzySort = (rowA, rowB, columnId) => {
- let dir = 0
-
- // Only sort by rank if the column has ranking information
- if (rowA.columnFiltersMeta[columnId]) {
- dir = compareItems(
- rowA.columnFiltersMeta[columnId]!,
- rowB.columnFiltersMeta[columnId]!
- )
- }
-
- // Provide an alphanumeric fallback for when the item ranks are equal
- return dir === 0 ? sortingFns.alphanumeric(rowA, rowB, columnId) : dir
-}
-```
-
-## Column Def Options
-
-### `enableGlobalFilter`
-
-```tsx
-enableGlobalFilter?: boolean
-```
-
-Enables/disables the **global** filter for this column.
-
-## Column API
-
-### `getCanGlobalFilter`
-
-```tsx
-getCanGlobalFilter: () => boolean
-```
-
-Returns whether or not the column can be **globally** filtered. Set to `false` to disable a column from being scanned during global filtering.
-
-## Row API
-
-### `columnFiltersMeta`
-
-```tsx
-columnFiltersMeta: Record
-```
-
-The column filters meta map for the row. This object tracks any filter meta for a row as optionally provided during the filtering process.
-
-## Table Options
-
-### `filterFns`
-
-```tsx
-filterFns?: Record
-```
-
-This option allows you to define custom filter functions that can be referenced in a column's `filterFn` option by their key.
-Example:
-
-```tsx
-declare module '@tanstack/table-core' {
- interface FilterFns {
- myCustomFilter: FilterFn
- }
-}
-
-const column = columnHelper.data('key', {
- filterFn: 'myCustomFilter',
-})
-
-const table = useReactTable({
- columns: [column],
- filterFns: {
- myCustomFilter: (rows, columnIds, filterValue) => {
- // return the filtered rows
- },
- },
-})
-```
-
-### `filterFromLeafRows`
-
-```tsx
-filterFromLeafRows?: boolean
-```
-
-By default, filtering is done from parent rows down (so if a parent row is filtered out, all of its children will be filtered out as well). Setting this option to `true` will cause filtering to be done from leaf rows up (which means parent rows will be included so long as one of their child or grand-child rows is also included).
-
-### `maxLeafRowFilterDepth`
-
-```tsx
-maxLeafRowFilterDepth?: number
-```
-
-By default, filtering is done for all rows (max depth of 100), no matter if they are root level parent rows or the child leaf rows of a parent row. Setting this option to `0` will cause filtering to only be applied to the root level parent rows, with all sub-rows remaining unfiltered. Similarly, setting this option to `1` will cause filtering to only be applied to child leaf rows 1 level deep, and so on.
-
-This is useful for situations where you want a row's entire child hierarchy to be visible regardless of the applied filter.
-
-### `enableFilters`
-
-```tsx
-enableFilters?: boolean
-```
-
-Enables/disables all filters for the table.
-
-### `manualFiltering`
-
-```tsx
-manualFiltering?: boolean
-```
-
-Disables the `getFilteredRowModel` from being used to filter data. This may be useful if your table needs to dynamically support both client-side and server-side filtering.
-
-### `getFilteredRowModel`
-
-```tsx
-getFilteredRowModel?: (
- table: Table
-) => () => RowModel
-```
-
-If provided, this function is called **once** per table and should return a **new function** which will calculate and return the row model for the table when it's filtered.
-
-- For server-side filtering, this function is unnecessary and can be ignored since the server should already return the filtered row model.
-- For client-side filtering, this function is required. A default implementation is provided via any table adapter's `{ getFilteredRowModel }` export.
-
-Example:
-
-```tsx
-import { getFilteredRowModel } from '@tanstack/[adapter]-table'
-
- getFilteredRowModel: getFilteredRowModel(),
-})
-```
-
-### `globalFilterFn`
-
-```tsx
-globalFilterFn?: FilterFn | keyof FilterFns | keyof BuiltInFilterFns
-```
-
-The filter function to use for global filtering.
-
-Options:
-
-- A `string` referencing a [built-in filter function](#filter-functions))
-- A `string` that references a custom filter functions provided via the `tableOptions.filterFns` option
-- A [custom filter function](#filter-functions)
-
-### `onGlobalFilterChange`
-
-```tsx
-onGlobalFilterChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.globalFilter` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
-
-### `enableGlobalFilter`
-
-```tsx
-enableGlobalFilter?: boolean
-```
-
-Enables/disables the global filter for the table.
-
-### `getColumnCanGlobalFilter`
-
-```tsx
-getColumnCanGlobalFilter?: (column: Column) => boolean
-```
-
-If provided, this function will be called with the column and should return `true` or `false` to indicate whether this column should be used for global filtering.
-This is useful if the column can contain data that is not `string` or `number` (i.e. `undefined`).
-
-## Table API
-
-### `getPreFilteredRowModel`
-
-```tsx
-getPreFilteredRowModel: () => RowModel
-```
-
-Returns the row model for the table before any **column** filtering has been applied.
-
-### `getFilteredRowModel`
-
-```tsx
-getFilteredRowModel: () => RowModel
-```
-
-Returns the row model for the table after **column** filtering has been applied.
-
-### `setGlobalFilter`
-
-```tsx
-setGlobalFilter: (updater: Updater) => void
-```
-
-Sets or updates the `state.globalFilter` state.
-
-### `resetGlobalFilter`
-
-```tsx
-resetGlobalFilter: (defaultState?: boolean) => void
-```
-
-Resets the **globalFilter** state to `initialState.globalFilter`, or `true` can be passed to force a default blank state reset to `undefined`.
-
-### `getGlobalAutoFilterFn`
-
-```tsx
-getGlobalAutoFilterFn: (columnId: string) => FilterFn | undefined
-```
-
-Currently, this function returns the built-in `includesString` filter function. In future releases, it may return more dynamic filter functions based on the nature of the data provided.
-
-### `getGlobalFilterFn`
-
-```tsx
-getGlobalFilterFn: (columnId: string) => FilterFn | undefined
-```
-
-Returns the global filter function (either user-defined or automatic, depending on configuration) for the table.
diff --git a/docs/api/features/grouping.md b/docs/api/features/grouping.md
deleted file mode 100644
index b9c21631fc..0000000000
--- a/docs/api/features/grouping.md
+++ /dev/null
@@ -1,353 +0,0 @@
----
-title: Grouping APIs
-id: grouping
----
-
-## State
-
-Grouping state is stored on the table using the following shape:
-
-```tsx
-export type GroupingState = string[]
-
-export type GroupingTableState = {
- grouping: GroupingState
-}
-```
-
-## Aggregation Functions
-
-The following aggregation functions are built-in to the table core:
-
-- `sum`
- - Sums the values of a group of rows
-- `min`
- - Finds the minimum value of a group of rows
-- `max`
- - Finds the maximum value of a group of rows
-- `extent`
- - Finds the minimum and maximum values of a group of rows
-- `mean`
- - Finds the mean/average value of a group of rows
-- `median`
- - Finds the median value of a group of rows
-- `unique`
- - Finds the unique values of a group of rows
-- `uniqueCount`
- - Finds the number of unique values of a group of rows
-- `count`
- - Calculates the number of rows in a group
-
-Every grouping function receives:
-
-- A function to retrieve the leaf values of the groups rows
-- A function to retrieve the immediate-child values of the groups rows
-
-and should return a value (usually primitive) to build the aggregated row model.
-
-This is the type signature for every aggregation function:
-
-```tsx
-export type AggregationFn = (
- getLeafRows: () => Row[],
- getChildRows: () => Row[]
-) => any
-```
-
-#### Using Aggregation Functions
-
-Aggregation functions can be used/referenced/defined by passing the following to `columnDefinition.aggregationFn`:
-
-- A `string` that references a built-in aggregation function
-- A `string` that references a custom aggregation functions provided via the `tableOptions.aggregationFns` option
-- A function directly provided to the `columnDefinition.aggregationFn` option
-
-The final list of aggregation functions available for the `columnDef.aggregationFn` use the following type:
-
-```tsx
-export type AggregationFnOption =
- | 'auto'
- | keyof AggregationFns
- | BuiltInAggregationFn
- | AggregationFn
-```
-
-## Column Def Options
-
-### `aggregationFn`
-
-```tsx
-aggregationFn?: AggregationFn | keyof AggregationFns | keyof BuiltInAggregationFns
-```
-
-The aggregation function to use with this column.
-
-Options:
-
-- A `string` referencing a [built-in aggregation function](#aggregation-functions))
-- A [custom aggregation function](#aggregation-functions)
-
-### `aggregatedCell`
-
-```tsx
-aggregatedCell?: Renderable<
- {
- table: Table
- row: Row
- column: Column
- cell: Cell
- getValue: () => any
- renderValue: () => any
- }
->
-```
-
-The cell to display each row for the column if the cell is an aggregate. If a function is passed, it will be passed a props object with the context of the cell and should return the property type for your adapter (the exact type depends on the adapter being used).
-
-### `enableGrouping`
-
-```tsx
-enableGrouping?: boolean
-```
-
-Enables/disables grouping for this column.
-
-### `getGroupingValue`
-
-```tsx
-getGroupingValue?: (row: TData) => any
-```
-
-Specify a value to be used for grouping rows on this column. If this option is not specified, the value derived from `accessorKey` / `accessorFn` will be used instead.
-
-## Column API
-
-### `aggregationFn`
-
-```tsx
-aggregationFn?: AggregationFnOption
-```
-
-The resolved aggregation function for the column.
-
-### `getCanGroup`
-
-```tsx
-getCanGroup: () => boolean
-```
-
-Returns whether or not the column can be grouped.
-
-### `getIsGrouped`
-
-```tsx
-getIsGrouped: () => boolean
-```
-
-Returns whether or not the column is currently grouped.
-
-### `getGroupedIndex`
-
-```tsx
-getGroupedIndex: () => number
-```
-
-Returns the index of the column in the grouping state.
-
-### `toggleGrouping`
-
-```tsx
-toggleGrouping: () => void
-```
-
-Toggles the grouping state of the column.
-
-### `getToggleGroupingHandler`
-
-```tsx
-getToggleGroupingHandler: () => () => void
-```
-
-Returns a function that toggles the grouping state of the column. This is useful for passing to the `onClick` prop of a button.
-
-### `getAutoAggregationFn`
-
-```tsx
-getAutoAggregationFn: () => AggregationFn | undefined
-```
-
-Returns the automatically inferred aggregation function for the column.
-
-### `getAggregationFn`
-
-```tsx
-getAggregationFn: () => AggregationFn | undefined
-```
-
-Returns the aggregation function for the column.
-
-## Row API
-
-### `groupingColumnId`
-
-```tsx
-groupingColumnId?: string
-```
-
-If this row is grouped, this is the id of the column that this row is grouped by.
-
-### `groupingValue`
-
-```tsx
-groupingValue?: any
-```
-
-If this row is grouped, this is the unique/shared value for the `groupingColumnId` for all of the rows in this group.
-
-### `getIsGrouped`
-
-```tsx
-getIsGrouped: () => boolean
-```
-
-Returns whether or not the row is currently grouped.
-
-### `getGroupingValue`
-
-```tsx
-getGroupingValue: (columnId: string) => unknown
-```
-
-Returns the grouping value for any row and column (including leaf rows).
-
-## Table Options
-
-### `aggregationFns`
-
-```tsx
-aggregationFns?: Record
-```
-
-This option allows you to define custom aggregation functions that can be referenced in a column's `aggregationFn` option by their key.
-Example:
-
-```tsx
-declare module '@tanstack/table-core' {
- interface AggregationFns {
- myCustomAggregation: AggregationFn
- }
-}
-
-const column = columnHelper.data('key', {
- aggregationFn: 'myCustomAggregation',
-})
-
-const table = useReactTable({
- columns: [column],
- aggregationFns: {
- myCustomAggregation: (columnId, leafRows, childRows) => {
- // return the aggregated value
- },
- },
-})
-```
-
-### `manualGrouping`
-
-```tsx
-manualGrouping?: boolean
-```
-
-Enables manual grouping. If this option is set to `true`, the table will not automatically group rows using `getGroupedRowModel()` and instead will expect you to manually group the rows before passing them to the table. This is useful if you are doing server-side grouping and aggregation.
-
-### `onGroupingChange`
-
-```tsx
-onGroupingChange?: OnChangeFn
-```
-
-If this function is provided, it will be called when the grouping state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.grouping` option.
-
-### `enableGrouping`
-
-```tsx
-enableGrouping?: boolean
-```
-
-Enables/disables grouping for all columns.
-
-### `getGroupedRowModel`
-
-```tsx
-getGroupedRowModel?: (table: Table) => () => RowModel
-```
-
-Returns the row model after grouping has taken place, but no further.
-
-### `groupedColumnMode`
-
-```tsx
-groupedColumnMode?: false | 'reorder' | 'remove' // default: `reorder`
-```
-
-Grouping columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.
-
-## Table API
-
-### `setGrouping`
-
-```tsx
-setGrouping: (updater: Updater) => void
-```
-
-Sets or updates the `state.grouping` state.
-
-### `resetGrouping`
-
-```tsx
-resetGrouping: (defaultState?: boolean) => void
-```
-
-Resets the **grouping** state to `initialState.grouping`, or `true` can be passed to force a default blank state reset to `[]`.
-
-### `getPreGroupedRowModel`
-
-```tsx
-getPreGroupedRowModel: () => RowModel
-```
-
-Returns the row model for the table before any grouping has been applied.
-
-### `getGroupedRowModel`
-
-```tsx
-getGroupedRowModel: () => RowModel
-```
-
-Returns the row model for the table after grouping has been applied.
-
-## Cell API
-
-### `getIsAggregated`
-
-```tsx
-getIsAggregated: () => boolean
-```
-
-Returns whether or not the cell is currently aggregated.
-
-### `getIsGrouped`
-
-```tsx
-getIsGrouped: () => boolean
-```
-
-Returns whether or not the cell is currently grouped.
-
-### `getIsPlaceholder`
-
-```tsx
-getIsPlaceholder: () => boolean
-```
-
-Returns whether or not the cell is currently a placeholder.
\ No newline at end of file
diff --git a/docs/api/features/pagination.md b/docs/api/features/pagination.md
deleted file mode 100644
index 5e80d5a7a2..0000000000
--- a/docs/api/features/pagination.md
+++ /dev/null
@@ -1,207 +0,0 @@
----
-title: Pagination APIs
-id: pagination
----
-
-## State
-
-Pagination state is stored on the table using the following shape:
-
-```tsx
-export type PaginationState = {
- pageIndex: number
- pageSize: number
-}
-
-export type PaginationTableState = {
- pagination: PaginationState
-}
-
-export type PaginationInitialTableState = {
- pagination?: Partial
-}
-```
-
-## Table Options
-
-### `manualPagination`
-
-```tsx
-manualPagination?: boolean
-```
-
-Enables manual pagination. If this option is set to `true`, the table will not automatically paginate rows using `getPaginationRowModel()` and instead will expect you to manually paginate the rows before passing them to the table. This is useful if you are doing server-side pagination and aggregation.
-
-### `pageCount`
-
-```tsx
-pageCount?: number
-```
-
-When manually controlling pagination, you can supply a total `pageCount` value to the table if you know it. If you do not know how many pages there are, you can set this to `-1`. Alternatively, you can provide a `rowCount` value and the table will calculate the `pageCount` internally.
-
-### `rowCount`
-
-```tsx
-rowCount?: number
-```
-
-When manually controlling pagination, you can supply a total `rowCount` value to the table if you know it. `pageCount` will be calculated internally from `rowCount` and `pageSize`.
-
-### `autoResetPageIndex`
-
-```tsx
-autoResetPageIndex?: boolean
-```
-
-If set to `true`, pagination will be reset to the first page when page-altering state changes eg. `data` is updated, filters change, grouping changes, etc.
-
-> 🧠 Note: This option defaults to `false` if `manualPagination` is set to `true`
-
-### `onPaginationChange`
-
-```tsx
-onPaginationChange?: OnChangeFn
-```
-
-If this function is provided, it will be called when the pagination state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.pagination` option.
-
-### `getPaginationRowModel`
-
-```tsx
-getPaginationRowModel?: (table: Table) => () => RowModel
-```
-
-Returns the row model after pagination has taken place, but no further.
-
-Pagination columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.
-
-## Table API
-
-### `setPagination`
-
-```tsx
-setPagination: (updater: Updater) => void
-```
-
-Sets or updates the `state.pagination` state.
-
-### `resetPagination`
-
-```tsx
-resetPagination: (defaultState?: boolean) => void
-```
-
-Resets the **pagination** state to `initialState.pagination`, or `true` can be passed to force a default blank state reset to `[]`.
-
-### `setPageIndex`
-
-```tsx
-setPageIndex: (updater: Updater) => void
-```
-
-Updates the page index using the provided function or value.
-
-### `resetPageIndex`
-
-```tsx
-resetPageIndex: (defaultState?: boolean) => void
-```
-
-Resets the page index to its initial state. If `defaultState` is `true`, the page index will be reset to `0` regardless of initial state.
-
-### `setPageSize`
-
-```tsx
-setPageSize: (updater: Updater) => void
-```
-
-Updates the page size using the provided function or value.
-
-### `resetPageSize`
-
-```tsx
-resetPageSize: (defaultState?: boolean) => void
-```
-
-Resets the page size to its initial state. If `defaultState` is `true`, the page size will be reset to `10` regardless of initial state.
-
-### `getPageOptions`
-
-```tsx
-getPageOptions: () => number[]
-```
-
-Returns an array of page options (zero-index-based) for the current page size.
-
-### `getCanPreviousPage`
-
-```tsx
-getCanPreviousPage: () => boolean
-```
-
-Returns whether the table can go to the previous page.
-
-### `getCanNextPage`
-
-```tsx
-getCanNextPage: () => boolean
-```
-
-Returns whether the table can go to the next page.
-
-### `previousPage`
-
-```tsx
-previousPage: () => void
-```
-
-Decrements the page index by one, if possible.
-
-### `nextPage`
-
-```tsx
-nextPage: () => void
-```
-
-Increments the page index by one, if possible.
-
-### `firstPage`
-
-```tsx
-firstPage: () => void
-```
-
-Sets the page index to `0`.
-
-### `lastPage`
-
-```tsx
-lastPage: () => void
-```
-
-Sets the page index to the last available page.
-
-### `getPageCount`
-
-```tsx
-getPageCount: () => number
-```
-
-Returns the page count. If manually paginating or controlling the pagination state, this will come directly from the `options.pageCount` table option, otherwise it will be calculated from the table data using the total row count and current page size.
-
-### `getPrePaginationRowModel`
-
-```tsx
-getPrePaginationRowModel: () => RowModel
-```
-
-Returns the row model for the table before any pagination has been applied.
-
-### `getPaginationRowModel`
-
-```tsx
-getPaginationRowModel: () => RowModel
-```
-
-Returns the row model for the table after pagination has been applied.
diff --git a/docs/api/features/pinning.md b/docs/api/features/pinning.md
deleted file mode 100644
index 15f18316df..0000000000
--- a/docs/api/features/pinning.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Pinning APIs
-id: pinning
----
-
-
-
-The pinning apis are now split into multiple api pages:
-
-- [Column Pinning](../../../guide/column-pinning.md)
-- [Row Pinning](../../../guide/row-pinning.md)
\ No newline at end of file
diff --git a/docs/api/features/row-pinning.md b/docs/api/features/row-pinning.md
deleted file mode 100644
index 52e46d5628..0000000000
--- a/docs/api/features/row-pinning.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: Row Pinning APIs
-id: row-pinning
----
-
-## Can-Pin
-
-The ability for a row to be **pinned** is determined by the following:
-
-- `options.enableRowPinning` resolves to `true`
-- `options.enablePinning` is not set to `false`
-
-## State
-
-Pinning state is stored on the table using the following shape:
-
-```tsx
-export type RowPinningPosition = false | 'top' | 'bottom'
-
-export type RowPinningState = {
- top?: string[]
- bottom?: string[]
-}
-
-export type RowPinningRowState = {
- rowPinning: RowPinningState
-}
-```
-
-## Table Options
-
-### `enableRowPinning`
-
-```tsx
-enableRowPinning?: boolean | ((row: Row) => boolean)
-```
-
-Enables/disables row pinning for all rows in the table.
-
-### `keepPinnedRows`
-
-```tsx
-keepPinnedRows?: boolean
-```
-
-When `false`, pinned rows will not be visible if they are filtered or paginated out of the table. When `true`, pinned rows will always be visible regardless of filtering or pagination. Defaults to `true`.
-
-### `onRowPinningChange`
-
-```tsx
-onRowPinningChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.rowPinning` changes. This overrides the default internal state management, so you will also need to supply `state.rowPinning` from your own managed state.
-
-## Table API
-
-### `setRowPinning`
-
-```tsx
-setRowPinning: (updater: Updater) => void
-```
-
-Sets or updates the `state.rowPinning` state.
-
-### `resetRowPinning`
-
-```tsx
-resetRowPinning: (defaultState?: boolean) => void
-```
-
-Resets the **rowPinning** state to `initialState.rowPinning`, or `true` can be passed to force a default blank state reset to `{}`.
-
-### `getIsSomeRowsPinned`
-
-```tsx
-getIsSomeRowsPinned: (position?: RowPinningPosition) => boolean
-```
-
-Returns whether or not any rows are pinned. Optionally specify to only check for pinned rows in either the `top` or `bottom` position.
-
-### `getTopRows`
-
-```tsx
-getTopRows: () => Row[]
-```
-
-Returns all top pinned rows.
-
-### `getBottomRows`
-
-```tsx
-getBottomRows: () => Row[]
-```
-
-Returns all bottom pinned rows.
-
-### `getCenterRows`
-
-```tsx
-getCenterRows: () => Row[]
-```
-
-Returns all rows that are not pinned to the top or bottom.
-
-## Row API
-
-### `pin`
-
-```tsx
-pin: (position: RowPinningPosition) => void
-```
-
-Pins a row to the `'top'` or `'bottom'`, or unpins the row to the center if `false` is passed.
-
-### `getCanPin`
-
-```tsx
-getCanPin: () => boolean
-```
-
-Returns whether or not the row can be pinned.
-
-### `getIsPinned`
-
-```tsx
-getIsPinned: () => RowPinningPosition
-```
-
-Returns the pinned position of the row. (`'top'`, `'bottom'` or `false`)
-
-### `getPinnedIndex`
-
-```tsx
-getPinnedIndex: () => number
-```
-
-Returns the numeric pinned index of the row within a pinned row group.
\ No newline at end of file
diff --git a/docs/api/features/row-selection.md b/docs/api/features/row-selection.md
deleted file mode 100644
index e21cb6e5bc..0000000000
--- a/docs/api/features/row-selection.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-title: Row Selection APIs
-id: row-selection
----
-
-## State
-
-Row selection state is stored on the table using the following shape:
-
-```tsx
-export type RowSelectionState = Record
-
-export type RowSelectionTableState = {
- rowSelection: RowSelectionState
-}
-```
-
-By default, the row selection state uses the index of each row as the row identifiers. Row selection state can instead be tracked with a custom unique row id by passing in a custom [getRowId](../../core/table.md#getrowid) function to the the table.
-
-## Table Options
-
-### `enableRowSelection`
-
-```tsx
-enableRowSelection?: boolean | ((row: Row) => boolean)
-```
-
-- Enables/disables row selection for all rows in the table OR
-- A function that given a row, returns whether to enable/disable row selection for that row
-
-### `enableMultiRowSelection`
-
-```tsx
-enableMultiRowSelection?: boolean | ((row: Row) => boolean)
-```
-
-- Enables/disables multiple row selection for all rows in the table OR
-- A function that given a row, returns whether to enable/disable multiple row selection for that row's children/grandchildren
-
-### `enableSubRowSelection`
-
-```tsx
-enableSubRowSelection?: boolean | ((row: Row) => boolean)
-```
-
-Enables/disables automatic sub-row selection when a parent row is selected, or a function that enables/disables automatic sub-row selection for each row.
-
-(Use in combination with expanding or grouping features)
-
-### `onRowSelectionChange`
-
-```tsx
-onRowSelectionChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.rowSelection` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
-
-## Table API
-
-### `getToggleAllRowsSelectedHandler`
-
-```tsx
-getToggleAllRowsSelectedHandler: () => (event: unknown) => void
-```
-
-Returns a handler that can be used to toggle all rows in the table.
-
-### `getToggleAllPageRowsSelectedHandler`
-
-```tsx
-getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void
-```
-
-Returns a handler that can be used to toggle all rows on the current page.
-
-### `setRowSelection`
-
-```tsx
-setRowSelection: (updater: Updater) => void
-```
-
-Sets or updates the `state.rowSelection` state.
-
-### `resetRowSelection`
-
-```tsx
-resetRowSelection: (defaultState?: boolean) => void
-```
-
-Resets the **rowSelection** state to the `initialState.rowSelection`, or `true` can be passed to force a default blank state reset to `{}`.
-
-### `getIsAllRowsSelected`
-
-```tsx
-getIsAllRowsSelected: () => boolean
-```
-
-Returns whether or not all rows in the table are selected.
-
-### `getIsAllPageRowsSelected`
-
-```tsx
-getIsAllPageRowsSelected: () => boolean
-```
-
-Returns whether or not all rows on the current page are selected.
-
-### `getIsSomeRowsSelected`
-
-```tsx
-getIsSomeRowsSelected: () => boolean
-```
-
-Returns whether or not any rows in the table are selected.
-
-### `getIsSomePageRowsSelected`
-
-```tsx
-getIsSomePageRowsSelected: () => boolean
-```
-
-Returns whether or not any rows on the current page are selected.
-
-### `toggleAllRowsSelected`
-
-```tsx
-toggleAllRowsSelected: (value: boolean) => void
-```
-
-Selects/deselects all rows in the table.
-
-### `toggleAllPageRowsSelected`
-
-```tsx
-toggleAllPageRowsSelected: (value: boolean) => void
-```
-
-Selects/deselects all rows on the current page.
-
-### `getPreSelectedRowModel`
-
-```tsx
-getPreSelectedRowModel: () => RowModel
-```
-
-### `getSelectedRowModel`
-
-```tsx
-getSelectedRowModel: () => RowModel
-```
-
-### `getFilteredSelectedRowModel`
-
-```tsx
-getFilteredSelectedRowModel: () => RowModel
-```
-
-### `getGroupedSelectedRowModel`
-
-```tsx
-getGroupedSelectedRowModel: () => RowModel
-```
-
-## Row API
-
-### `getIsSelected`
-
-```tsx
-getIsSelected: () => boolean
-```
-
-Returns whether or not the row is selected.
-
-### `getIsSomeSelected`
-
-```tsx
-getIsSomeSelected: () => boolean
-```
-
-Returns whether or not some of the row's sub rows are selected.
-
-### `getIsAllSubRowsSelected`
-
-```tsx
-getIsAllSubRowsSelected: () => boolean
-```
-
-Returns whether or not all of the row's sub rows are selected.
-
-### `getCanSelect`
-
-```tsx
-getCanSelect: () => boolean
-```
-
-Returns whether or not the row can be selected.
-
-### `getCanMultiSelect`
-
-```tsx
-getCanMultiSelect: () => boolean
-```
-
-Returns whether or not the row can multi-select.
-
-### `getCanSelectSubRows`
-
-```tsx
-getCanSelectSubRows: () => boolean
-```
-
-Returns whether or not the row can select sub rows automatically when the parent row is selected.
-
-### `toggleSelected`
-
-```tsx
-toggleSelected: (value?: boolean) => void
-```
-
-Selects/deselects the row.
-
-### `getToggleSelectedHandler`
-
-```tsx
-getToggleSelectedHandler: () => (event: unknown) => void
-```
-
-Returns a handler that can be used to toggle the row.
diff --git a/docs/api/features/sorting.md b/docs/api/features/sorting.md
deleted file mode 100644
index e5b60eea50..0000000000
--- a/docs/api/features/sorting.md
+++ /dev/null
@@ -1,385 +0,0 @@
----
-title: Sorting APIs
-id: sorting
----
-
-## State
-
-Sorting state is stored on the table using the following shape:
-
-```tsx
-export type SortDirection = 'asc' | 'desc'
-
-export type ColumnSort = {
- id: string
- desc: boolean
-}
-
-export type SortingState = ColumnSort[]
-
-export type SortingTableState = {
- sorting: SortingState
-}
-```
-
-## Sorting Functions
-
-The following sorting functions are built-in to the table core:
-
-- `alphanumeric`
- - Sorts by mixed alphanumeric values without case-sensitivity. Slower, but more accurate if your strings contain numbers that need to be naturally sorted.
-- `alphanumericCaseSensitive`
- - Sorts by mixed alphanumeric values with case-sensitivity. Slower, but more accurate if your strings contain numbers that need to be naturally sorted.
-- `text`
- - Sorts by text/string values without case-sensitivity. Faster, but less accurate if your strings contain numbers that need to be naturally sorted.
-- `textCaseSensitive`
- - Sorts by text/string values with case-sensitivity. Faster, but less accurate if your strings contain numbers that need to be naturally sorted.
-- `datetime`
- - Sorts by time, use this if your values are `Date` objects.
-- `basic`
- - Sorts using a basic/standard `a > b ? 1 : a < b ? -1 : 0` comparison. This is the fastest sorting function, but may not be the most accurate.
-
-Every sorting function receives 2 rows and a column ID and are expected to compare the two rows using the column ID to return `-1`, `0`, or `1` in ascending order. Here's a cheat sheet:
-
-| Return | Ascending Order |
-| ------ | --------------- |
-| `-1` | `a < b` |
-| `0` | `a === b` |
-| `1` | `a > b` |
-
-This is the type signature for every sorting function:
-
-```tsx
-export type SortingFn = {
- (rowA: Row, rowB: Row, columnId: string): number
-}
-```
-
-#### Using Sorting Functions
-
-Sorting functions can be used/referenced/defined by passing the following to `columnDefinition.sortingFn`:
-
-- A `string` that references a built-in sorting function
-- A `string` that references a custom sorting functions provided via the `tableOptions.sortingFns` option
-- A function directly provided to the `columnDefinition.sortingFn` option
-
-The final list of sorting functions available for the `columnDef.sortingFn` use the following type:
-
-```tsx
-export type SortingFnOption =
- | 'auto'
- | SortingFns
- | BuiltInSortingFns
- | SortingFn
-```
-
-## Column Def Options
-
-### `sortingFn`
-
-```tsx
-sortingFn?: SortingFn | keyof SortingFns | keyof BuiltInSortingFns
-```
-
-The sorting function to use with this column.
-
-Options:
-
-- A `string` referencing a [built-in sorting function](#sorting-functions))
-- A [custom sorting function](#sorting-functions)
-
-### `sortDescFirst`
-
-```tsx
-sortDescFirst?: boolean
-```
-
-Set to `true` for sorting toggles on this column to start in the descending direction.
-
-### `enableSorting`
-
-```tsx
-enableSorting?: boolean
-```
-
-Enables/Disables sorting for this column.
-
-### `enableMultiSort`
-
-```tsx
-enableMultiSort?: boolean
-```
-
-Enables/Disables multi-sorting for this column.
-
-### `invertSorting`
-
-```tsx
-invertSorting?: boolean
-```
-
-Inverts the order of the sorting for this column. This is useful for values that have an inverted best/worst scale where lower numbers are better, eg. a ranking (1st, 2nd, 3rd) or golf-like scoring
-
-### `sortUndefined`
-
-```tsx
-sortUndefined?: 'first' | 'last' | false | -1 | 1 // defaults to 1
-```
-
-- `'first'`
- - Undefined values will be pushed to the beginning of the list
-- `'last'`
- - Undefined values will be pushed to the end of the list
-- `false`
- - Undefined values will be considered tied and need to be sorted by the next column filter or original index (whichever applies)
-- `-1`
- - Undefined values will be sorted with higher priority (ascending) (if ascending, undefined will appear on the beginning of the list)
-- `1`
- - Undefined values will be sorted with lower priority (descending) (if ascending, undefined will appear on the end of the list)
-
-> NOTE: `'first'` and `'last'` options are new in v8.16.0
-
-## Column API
-
-### `getAutoSortingFn`
-
-```tsx
-getAutoSortingFn: () => SortingFn
-```
-
-Returns a sorting function automatically inferred based on the columns values.
-
-### `getAutoSortDir`
-
-```tsx
-getAutoSortDir: () => SortDirection
-```
-
-Returns a sort direction automatically inferred based on the columns values.
-
-### `getSortingFn`
-
-```tsx
-getSortingFn: () => SortingFn
-```
-
-Returns the resolved sorting function to be used for this column
-
-### `getNextSortingOrder`
-
-```tsx
-getNextSortingOrder: () => SortDirection | false
-```
-
-Returns the next sorting order.
-
-### `getCanSort`
-
-```tsx
-getCanSort: () => boolean
-```
-
-Returns whether this column can be sorted.
-
-### `getCanMultiSort`
-
-```tsx
-getCanMultiSort: () => boolean
-```
-
-Returns whether this column can be multi-sorted.
-
-### `getSortIndex`
-
-```tsx
-getSortIndex: () => number
-```
-
-Returns the index position of this column's sorting within the sorting state
-
-### `getIsSorted`
-
-```tsx
-getIsSorted: () => false | SortDirection
-```
-
-Returns whether this column is sorted.
-
-### `getFirstSortDir`
-
-```tsx
-getFirstSortDir: () => SortDirection
-```
-
-Returns the first direction that should be used when sorting this column.
-
-### `clearSorting`
-
-```tsx
-clearSorting: () => void
-```
-
-Removes this column from the table's sorting state
-
-### `toggleSorting`
-
-```tsx
-toggleSorting: (desc?: boolean, isMulti?: boolean) => void
-```
-
-Toggles this columns sorting state. If `desc` is provided, it will force the sort direction to that value. If `isMulti` is provided, it will additivity multi-sort the column (or toggle it if it is already sorted).
-
-### `getToggleSortingHandler`
-
-```tsx
-getToggleSortingHandler: () => undefined | ((event: unknown) => void)
-```
-
-Returns a function that can be used to toggle this column's sorting state. This is useful for attaching a click handler to the column header.
-
-## Table Options
-
-### `sortingFns`
-
-```tsx
-sortingFns?: Record
-```
-
-This option allows you to define custom sorting functions that can be referenced in a column's `sortingFn` option by their key.
-Example:
-
-```tsx
-declare module '@tanstack/table-core' {
- interface SortingFns {
- myCustomSorting: SortingFn
- }
-}
-
-const column = columnHelper.data('key', {
- sortingFn: 'myCustomSorting',
-})
-
-const table = useReactTable({
- columns: [column],
- sortingFns: {
- myCustomSorting: (rowA: any, rowB: any, columnId: any): number =>
- rowA.getValue(columnId).value < rowB.getValue(columnId).value ? 1 : -1,
- },
-})
-```
-
-### `manualSorting`
-
-```tsx
-manualSorting?: boolean
-```
-
-Enables manual sorting for the table. If this is `true`, you will be expected to sort your data before it is passed to the table. This is useful if you are doing server-side sorting.
-
-### `onSortingChange`
-
-```tsx
-onSortingChange?: OnChangeFn
-```
-
-If provided, this function will be called with an `updaterFn` when `state.sorting` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
-
-### `enableSorting`
-
-```tsx
-enableSorting?: boolean
-```
-
-Enables/Disables sorting for the table.
-
-### `enableSortingRemoval`
-
-```tsx
-enableSortingRemoval?: boolean
-```
-
-Enables/Disables the ability to remove sorting for the table.
-- If `true` then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'none' -> ...
-- If `false` then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'desc' -> 'asc' -> ...
-
-### `enableMultiRemove`
-
-```tsx
-enableMultiRemove?: boolean
-```
-
-Enables/disables the ability to remove multi-sorts
-
-### `enableMultiSort`
-
-```tsx
-enableMultiSort?: boolean
-```
-
-Enables/Disables multi-sorting for the table.
-
-### `sortDescFirst`
-
-```tsx
-sortDescFirst?: boolean
-```
-
-If `true`, all sorts will default to descending as their first toggle state.
-
-### `getSortedRowModel`
-
-```tsx
-getSortedRowModel?: (table: Table) => () => RowModel
-```
-
-This function is used to retrieve the sorted row model. If using server-side sorting, this function is not required. To use client-side sorting, pass the exported `getSortedRowModel()` from your adapter to your table or implement your own.
-
-### `maxMultiSortColCount`
-
-```tsx
-maxMultiSortColCount?: number
-```
-
-Set a maximum number of columns that can be multi-sorted.
-
-### `isMultiSortEvent`
-
-```tsx
-isMultiSortEvent?: (e: unknown) => boolean
-```
-
-Pass a custom function that will be used to determine if a multi-sort event should be triggered. It is passed the event from the sort toggle handler and should return `true` if the event should trigger a multi-sort.
-
-## Table API
-
-### `setSorting`
-
-```tsx
-setSorting: (updater: Updater) => void
-```
-
-Sets or updates the `state.sorting` state.
-
-### `resetSorting`
-
-```tsx
-resetSorting: (defaultState?: boolean) => void
-```
-
-Resets the **sorting** state to `initialState.sorting`, or `true` can be passed to force a default blank state reset to `[]`.
-
-### `getPreSortedRowModel`
-
-```tsx
-getPreSortedRowModel: () => RowModel
-```
-
-Returns the row model for the table before any sorting has been applied.
-
-### `getSortedRowModel`
-
-```tsx
-getSortedRowModel: () => RowModel