sable.
A small, deliberate UI library. The page below is built using exactly its eight components — each labelled. The story and the demo are the same artefact. npm install @vkfolio/sable — 9 kB gzipped, no dependencies.
stored on your machine — no server, no analytics.
The eight, in order of frequency.
Stack is the most-used primitive. Everything else is composed inside one.
What's deliberately not in Sable.
No Accordion (never shipped one I was proud of). No Toast (only honest toast is the one your app already renders). No DataGrid (a DataGrid is a product, not a primitive).
Compose — do not specialise.
Every contributor has a Modal-with-confirmation pattern they want as first-class. Every contributor's pattern is slightly different. The right answer is almost always: here is Dialog. Compose.
npm install @vkfolio/sable · zero deps · ESM + CJS.
Imports tree-shake to about 2.5 kB if you only use Button + Input + Stack.
| component | size | why it earned its spot |
|---|---|---|
| Button | 0.6 kB | three projects, always. |
| Input + FormField | 1.2 kB | phantom limb from earlier libraries. |
| Select | 0.4 kB | native is fine. Don't rebuild it. |
| Stack | 0.3 kB | the layout primitive. |
| Card | 0.3 kB | container for the rest. |
| Dialog | 1.8 kB | the focus-trap is the value. |
| Tabs | 1.5 kB | built once accessibly; never want to do it again. |
| Table | 0.3 kB | style of a thing that already exists. |
Sable —
a small, deliberate UI library · MIT · 9 kB gzipped.
Field note: why I built Sable →.
← back to the trace