Columns typed against your row
`key` is constrained to `keyof TRow`, so a renamed field is a compile error rather than a column of blanks. Sorting names a field too.
Vue 3 components for tables, filters, and the states around them. Twelve of them, built on Reka UI, typed against your row.
Sort a column. Select some rows. This is the real component, not a screenshot.
| Status | ||||
|---|---|---|---|---|
| Ada Lovelace | Owner | active | 3 | |
| Grace Hopper | Admin | active | 12 | |
| Alan Turing | Member | invited | 1 | |
| Katherine Johnson | Member | suspended | 0 |
0 selected · unsorted
The table reports the sort and renders what it is handed — it never reorders its own rows. That keeps a server-paged table honest, and useClientSort does the local case, which is what this demo uses.
pnpm add rowkit@import 'tailwindcss';
@import 'rowkit/styles';Both lines are required, and that second one is the step people miss — see installation for why, and for the Nuxt path.
v0.x, and not on npm yet. The name is reserved and publishing is the last phase of the plan, so that first command does not resolve today. Every component above is built and tested — you are looking at them running — but the API can still change before v1.0.
A general-purpose UI kit. If you need forty components covering every case, Nuxt UI and shadcn-vue are better answers, and rowkit composes with either.
Twelve components, aimed at the part those kits leave you: the fast sortable table, and the loading, empty and filtered states that have to agree with each other. The scope is a decision, not a limitation — the full list, including what was deliberately left out, is in the roadmap.