Svelte 5 · Tailwind v4
v0.1 · MITThe component library that stays out of your way
103 Svelte 5 families across 15 categories, styled entirely from design tokens with class-variance-authority. You compose the parts — the kit never composes for you.
Seats
12 · $288.00/mo103
Component families
15
Categories
5
Helper entry points
0
CSS files you write
The kit
Everything below is a component
No mockups on this page: every tile is the real thing, in the theme you picked.
Buttons
Badges & tags
Avatars
Progress
Form controls
Charts & KPIs
128k
Status
Timelines
-
Deployed
now
-
Built
2m
-
Pushed
5m
Principles
Opinionated where it helps, silent everywhere else
Six decisions taken once, applied to every component in the kit.
The parent composes
No monolithic menu that takes an array of items. You assemble Menu + MenuItem, Card + CardHeader/Body/Footer, Tabs + TabList/Tab/TabPanel — so a component never blocks the layout you need.
Tokens, not values
Colours and fonts come from the design system, sizes from a named scale (px-md, gap-2xs, h-control-md). Restyle the whole kit by editing the token files.
Every axis is a variant
One variants.ts per family, built with class-variance-authority, with typed defaults. Each *Variants object is exported, so you can reuse the exact same classes elsewhere.
Dark mode by attribute
data-theme="dark" on any root, applied before hydration. No flash, no class juggling, and every component ships both palettes.
Icons come from the parent
No component imports an icon set: icons are passed in as snippets, so the kit never picks one for you. The standalone <Icon> helper is optional and wraps a Font Awesome glyph — the only icon package in the install.
Logic included
Lists, forms, overlays, async calls and formatting have helpers of their own — separate entry points, so importing a Button never pulls them in.
Getting started
Two imports and you are styled
The tokens ship as one stylesheet; components come from the package root, helpers from their own entry points. Nothing to configure, no provider to wrap the app in, no build step beyond the one SvelteKit already runs.
Tree-shakeable: components and helpers are separate entries.
SSR-safe: no DOM access at import time.
Typed props, exported variant types, no any.
Design system
One token set, two themes, no magic values
Ten palettes, a semantic layer and a named size scale. Components never hard-code a colour or a pixel — restyle the kit by editing the token files, and dark mode follows for free.
Elevation
Light
Dark
Components
15 categories, 103 families
Each one has a playground with every prop wired to a control, and the import line and markup generated underneath.
Typography
5Text, headings, links, code and long-form prose.
Layout
11Containers, stacks, grids, page bands and the app shell.
Buttons
6Actions, icon buttons, groups and decorative tiles.
Badges
2Status labels and removable tags.
Feedback
11Alerts, progress, loading states and status indicators.
Form
20Inputs, selection controls and rich pickers.
Surface
2Cards composed from header, bars, body and footer.
Media
3Avatars, groups and anchored badges.
Data
8Tables, KPI tiles, lists and timelines.
Charts
4Dependency-free SVG charts.
Navigation
6Tabs, accordions, steppers, breadcrumbs and pagination.
Overlay
9Tooltips, popovers, dialogs, drawers, menus, toasts and the command palette.
App shell
5The console frame, sidebar, navbar, user menu and footer.
Editorial
6Kickers, highlights, handwritten notes and code blocks.
Misc
5Icons, keyboard hints, toolbars and primitives.
Helpers
The logic around the components, included
Lists, forms, overlays, async calls, formatting and tones — each in its own entry point, tested, with no $effect inside.
@mirabelle-labs/vital-ui Every component, the cn() utility and VariantProvider.Button · Card · Table · Dialog · Toaster · …
@mirabelle-labs/vital-ui/state Reactive building blocks for the data behind a screen.createCollection · createOverlay · createForm · createListView · createAction · createLog
@mirabelle-labs/vital-ui/validation Field rules and schemas for createForm.required · email · port · dns1123 · compose · validateWith
@mirabelle-labs/vital-ui/format Money, sizes, ages and dates — locale-aware and SSR-safe.money · compact · percent · bytes · plural · age · relativeTime · shortDate
@mirabelle-labs/vital-ui/data Aggregates, status → tone maps and id sequences.sumBy · countBy · groupBy · tally · toneMap · thresholdTone · createSequence
@mirabelle-labs/vital-ui/timing Timers that are no-ops on the server and clean up after themselves.delay · debounce · throttle · after · every · isBrowser
Under real load
Five complete pages, nothing but this library
A SaaS landing, an editorial product page, a full shop with checkout, a client portal and a Kubernetes console — the proof that the kit survives dense, stateful screens.
Orbit — SaaS landing
B2B product analytics
Classic marketing page: sticky navbar, hero with a live dashboard mock, features, deep-dives, pricing toggle, FAQ and footer.
Aurel Store — shop
Listing · product · checkout
Complete e-commerce flow with filters, pagination, product gallery and tabs, cart drawer and a four-step checkout with OTP verification.
Acme — client portal
Agency ↔ client extranet
App shell with sidebar views: overview dashboard, projects, invoices table, support tickets thread and documents with upload and delete flows.
Kubernetes console
Cluster admin with node sidebar
Fleet console: nodes with live status in the sidebar, Lens-style node detail (gauges, pods, conditions, YAML), apps you can scale, restart and roll out, services and ingress you can expose and edit, cluster events.
Before you install it
The 15 categories, the token set and the demo site.
Separate entry points for state, validation, format, data and timing.
Start with a button, ship a console
The same kit renders the page you are reading and the Kubernetes console two clicks away — same tokens, same variants, same dark mode.