Data table
21 parts · TanStack v9Built on TanStack Table v9, with 21 replaceable parts.
- Client or server sorting and pagination
- Selection that survives server pages
- Tree rows, virtual rows, sticky header
- Loading, error and empty states
Home / Open source / slotsmith
React components you can take apart.
A headless library where every part is a slot you can replace, and everything you don't replace renders as finished, accessible HTML. Ship on day one, match your design system on day forty, never fork.
| Pagination bar | Yousef | shipped | |
| Skeleton state | Noor | review | |
| Error state | Yousef | shipped | |
| Empty state | Lina | shipped | |
| Sticky header | Omar | review |
Built with my slotsmith DataTable
import { DataTable } from "slotsmith" // It works, and it already looks finished. <DataTable data={users} columns={columns} />
Root · Table · Row · Cell …
Plain DOM props, state as data-* attributes. Drop in shadcn, MUI or Chakra primitives unchanged.
Checkbox · Pagination · Empty …
Semantic props like checked and pageIndex. Your components, through a few-line adapter.
Built on TanStack Table v9, with 21 replaceable parts.
A combobox and a select in one, with 17 replaceable parts. Tags for many values; remote options that are debounced, abortable and paged.
Try it liveDrop zone, image tile or picker-only. Queued uploads with progress and retry, real cancellation, instant previews.
Try it liveOne date, several, or a range, with 13 replaceable parts. A full keyboard grid, bounds and blocked dates, presets, and YYYY-MM-DD values that never shift across time zones.
Try it liveslotsmith-ai is an MCP server for coding agents such as Claude Code, Cursor and VS Code Copilot. It hands them the exact props, slots, fallback markup and MUI, shadcn and Chakra adapter recipes for the slotsmith version you have installed, and warns when the versions differ. No guessed props, no invented slot names.
AI tools guideclaude mcp add slotsmith -- npx -y slotsmith-ai mcp{"command":"npx","args":["-y","slotsmith-ai","mcp"]}Styled kits hand you someone else's design language; headless kits hand you a blank page and a week of rebuilding the obvious. After shipping the same tables and pickers across client projects, I wanted the middle: behaviour plus named parts, each with a fallback worth shipping.
Four components today. More are on the way: new components, better versions of the ones that exist, and ideas that make everyday programming easier. Same rules for all of them: headless logic, replaceable parts, fallbacks good enough to ship.