TanStack Table
SkillFiles & storageHelps your agent build Svelte data tables with sorting, filtering, and pagination using TanStack Table patterns.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the TanStack Table skill
About this capability
Apply TanStack Table UI-state patterns for Svelte data tables, including columns, rendering, sorting, filtering, pagination, and row identity. Use when building or reviewing data-table UI, not Epicenter workspace storage tables.
What this skill tells your AI
The instructions your AI receives, as published by epicenterhq/epicenter in .agents/skills/tanstack-table/SKILL.md and read by ahel’s review.
Reference Repositories
- TanStack Table - Headless table state and row models
- Svelte - Svelte 5 component and reactivity model
Upstream Grounding
When TanStack Table adapter APIs, row models, controlled state, sorting, filtering, pagination, or Svelte rendering helpers affect correctness, ask DeepWiki a narrow question against TanStack/table. Verify against the installed @tanstack/svelte-table and @tanstack/table-core versions.
This skill is for UI table state. Use yjs for Epicenter store table storage, and svelte for reading rows into a component.
Local API Baseline
Epicenter currently uses @tanstack/svelte-table with:
import {
createTable as createSvelteTable,
FlexRender,
renderComponent,
} from '@tanstack/svelte-table';
import type { ColumnDef } from '@tanstack/table-core';
Table Construction Rules
- Always set
getRowIdfor persisted or local-first rows. Do not rely on array index identity. - Keep
datareferentially stable. Avoid creating a fresh array in the table options getter unless the table is intentionally rebuilt. - Define columns with
satisfies ColumnDef<Row>[]. - Give accessor columns stable ids, especially when sorting, hiding, or persisted preferences are involved.
- Use
renderComponentfor reusable header and cell components. - Include only row models the UI uses: core always, sorted/filter/pagination only when the surface needs them.
Controlled State
- Control only state Epicenter owns externally, such as sorting, global filter, column visibility, row selection, or pagination.
- If an
onXChangehandler is present, the matchingstate.get x()must also be present. - Keep state ownership in one component or handle. Do not split sorting, filters, and pagination across unrelated stores without a reason.
Rendering
- TanStack Table owns row, column, and cell state.
@epicenter/ui/tableowns semantic table markup and styling. - Render headers and cells with
FlexRender. - Key rows by
row.idand cells bycell.id. - Empty states stay in
ui-design: when row count is zero, renderEmpty.Rootin the table body or surrounding panel. - Add explicit keyboard behavior for clickable rows. A click handler alone is not a row interaction model.
- Use TanStack Virtual separately for large lists. Do not treat virtualization as a built-in table feature.
Signals
- GitHub stars
- 5k
- Forks
- 378
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
tanstack-table-epicenterhq- Source
- github.com/epicenterhq/epicenter