Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
>
> - [Angular Table](https://tanstack.com/table/alpha/docs/framework/angular/angular-table)
> - [Lit Table](https://tanstack.com/table/alpha/docs/framework/lit/lit-table)
> - [Octane Table](https://tanstack.com/table/beta/docs/framework/octane/quick-start)
> - [Preact Table](https://tanstack.com/table/beta/docs/framework/preact/quick-start)
> - [React Table](https://tanstack.com/table/alpha/docs/framework/react/react-table)
> - [Solid Table](https://tanstack.com/table/alpha/docs/framework/solid/solid-table)
> - [Svelte Table](https://tanstack.com/table/alpha/docs/framework/svelte/svelte-table)
Expand All @@ -44,7 +46,7 @@

A headless table library for building powerful datagrids with full control over markup, styles, and behavior.

- Frameworkagnostic 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
Expand Down
61 changes: 59 additions & 2 deletions _artifacts/domain_map.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ library:

meta:
generated_by: '@tanstack/intent scaffold domain discovery'
date: '2026-07-29'
date: '2026-07-31'
status: reviewed
maintainer_review_pending: false
phase_4_date: '2026-07-10'
Expand All @@ -23,7 +23,7 @@ scope:
- '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 17 public workspace packages.'
- 'All 18 public workspace packages.'
- 'All 14 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:
Expand Down Expand Up @@ -111,6 +111,7 @@ api_discovery_policy:
feature_source: 'node_modules/@tanstack/table-core/dist/features/<feature>/'
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/dist/types/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:
Expand Down Expand Up @@ -1286,6 +1287,62 @@ skills:
- '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
Expand Down
22 changes: 19 additions & 3 deletions _artifacts/skill_spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ This specification is the generation contract for a deliberately smaller, foot-g

## Outcome

Generate 75 short package-local skills across all 17 public packages. A loaded skill should quickly do three things:
Generate 78 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.
Expand Down Expand Up @@ -47,6 +47,7 @@ Every skill that discusses APIs must tell the consuming agent how to inspect the
- 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/dist/types/index.d.ts (and sibling `dist/types/*.d.ts`).
- 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.

Expand Down Expand Up @@ -241,7 +242,13 @@ Ember ships three:
- table-state
- create-table-hook

Do not add Query where no maintained adapter example exists. Do not add Alpine or Ember migration skills because neither has a v8 adapter journey to teach. Do not add Ember 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.
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)

Expand All @@ -267,6 +274,7 @@ All Devtools skills must emphasize the required non-empty table options.key, lif
| @tanstack/table-core | 21 |
| @tanstack/react-table | 6 |
| @tanstack/preact-table | 6 |
| @tanstack/octane-table | 3 |
| @tanstack/solid-table | 6 |
| @tanstack/svelte-table | 6 |
| @tanstack/vue-table | 6 |
Expand All @@ -281,7 +289,7 @@ All Devtools skills must emphasize the required non-empty table options.key, lif
| @tanstack/vue-table-devtools | 1 |
| @tanstack/angular-table-devtools | 1 |
| @tanstack/match-sorter-utils | 1 |
| Total | 75 |
| Total | 78 |

## Framework distinctions that must survive generation

Expand All @@ -297,6 +305,14 @@ All Devtools skills must emphasize the required non-empty table options.key, lif
- 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 adapter ships compiled JavaScript and declarations. Consumer tooling compiles the application's TSRX components, which 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.
Expand Down
47 changes: 46 additions & 1 deletion _artifacts/skill_tree.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ library:
generated_from:
domain_map: '_artifacts/domain_map.yaml'
skill_spec: '_artifacts/skill_spec.md'
generated_at: '2026-07-29'
generated_at: '2026-07-31'
status: reviewed
reviewed_at: '2026-07-29'
batch_review: true
Expand Down Expand Up @@ -944,6 +944,51 @@ skills:
- '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
Expand Down
Loading
Loading