Solutions / UI-KitThe family’s one colourless stone

A design system that is generated

Every design system asks you to assemble it: pick the palette, hand-tune dark mode, hope the contrast holds. UI-Kit takes one brand colour and emits the rest. A contrast-verified theme in both modes, and fifty components that already speak it. Try it below; the theme builds in your browser, and this page is wearing it.

50components
92semantic roles
27contrast pairs measured
0failures
0runtime dependencies

Try it

Press a colour. The whole page is rebuilt.

Not a preview pane. The page. Every component, both modes, all eleven ramp steps and every contrast pair are regenerated in the browser, because the generator has no dependencies and no build step to hide behind.

Status harmonyHow success, warning, danger and info relate to the brand hue.
  • success-9.9° from canonical
  • warning-2.5° from canonical
  • danger+4.8° from canonical
  • info+10.9° from canonical
neutral
accent
success
warning
danger
info
secondary
Resolved roles for the theme currently on screen
RoleLightDarkLcTarget
fg-default#1d1915#f6f3f1104.490
fg-muted#5c5753#d1cdca84.875
fg-subtle#857f7a#b8b3b067.060
fg-on-accent#fefdfd#fefdfd96.875
fg-accent#5f5a55#d1cdca83.775
fg-on-danger#fffdfc#fffdfc75.575
fg-on-warning#fffdfb#fffdfb75.575
border-strong#afa8a2#9d979246.445

Typography

One word about voice, the way one colour is the palette.

Leading and tracking are not a table you pick from. They are functions of size: large type carries its own separation, small type needs more room, and a face is spaced for one size and wrong at every other. Choose a voice and watch every number below change.

A serif for the headings and a sans for the text. The oldest pairing there is, and it still works because the contrast is structural rather than decorative.

display · Lorabody · Source Sans 3mono · IBM Plex Monomeasure 68 characters
The quick brown fox3xl · 2.0736rem · 1.185 · -0.0126em
The quick brown foxxl · 1.44rem · 1.332 · -0.0063em
Type set at this step, with the leading and tracking that belong to it.lg · 1.2rem · 1.406 · -0.0032em
Type set at this step, with the leading and tracking that belong to it.md · 1rem · 1.48 · +0em
Type set at this step, with the leading and tracking that belong to it.sm · 0.8333rem · 1.553 · +0.0032em
Type set at this step, with the leading and tracking that belong to it.xs · 0.6944rem · 1.627 · +0.0063em

The layout does not move when the font arrives

A web face swapping in reflows the text and shoves everything below it, one of the three things Core Web Vitals measures. Every face here gets a @font-face that reshapes the local fallback until it occupies the same room. It downloads nothing: local() is a handle on a font the machine already has.

Those rules are on this document right now, generated for the voice you picked and replaced when you pick another, which is why changing voice re-types the whole page without the sections below jumping.

Same shape as the contrast pass above: a measurable failure, corrected, and the correction reported rather than assumed.

The catalogue

50 components. Here are eight.

Everything ships, plus the contracts. Each specimen below is live and each Code tab shows the file that rendered it. Read from disk at build time, so the sample and the demo cannot disagree.

Button

A control that performs an action when activated.

Field, Select, Switch, Checkbox

Every control that takes a label routes its label, description and error through one shared shell, so none of them can be accessible while another is not.

We only use this for billing.

Alert

A message about the state of the system or the result of an action.

Deployment completeVersion 4.2.0 is live on production.
Scheduled maintenanceThe API will be read-only on Sunday from 02:00 to 04:00 UTC.

Table

Rows of records with columns that can be sorted and selected.

ScopeSorting is reported and requested, not performed — you sort the data. No virtualisation, column resizing, or pinned columns.

Invoices from the last 30 days
Customer
INV-0041Acme Corp$4,210.00
INV-0040Globex$980.00
INV-0039Initech$12,400.00

Modal, Dropdown, Toast

Overlays are native <dialog> elements, so the focus trap, the inert background and Escape come from the platform rather than from a hook.

Delete this project?

Its 1,204 documents will be permanently removed.

This cannot be undone.

Tabs

Alternative views of the same region, one shown at a time.

4,210 of 10,000 credits used this month.

Chip, Badge, Avatar, User

The small pieces that carry status and identity.

ActiveExpiringFailedDraftPro
3 unread
Ada LovelaceOwner

Calendar

A month grid for choosing a date.

ScopeGregorian calendar only, with locale-aware month and weekday names. No week numbers and no multi-month view.

SundayMondayTuesdayWednesdayThursdayFridaySaturday
August 2026

Pricing

The system is free. The shortcuts are not.

Everything that makes the components work is open source. What you can pay for is the time you would otherwise spend building the surrounding material.

Team

Talk to usorg-wide

  • Everything in Studio
  • Private component registry
  • Theme review and migration
  • Priority support

Want the engineering? The Oklch ramp construction, the APCA contrast repair, the agent contracts and MCP server, and the five-package layout live in the docs. And if you are after finished billing screens rather than a design system, billing-kit-components is that: UI-Kit is the layer underneath, for the rest of the product.

Give it one colour.

A verified theme, fifty components and the agent contracts come back. See them carrying a real application on QuxCloud, then take a seat: bought once, it covers a developer for good. No renewal, no expiry, and no licence check anywhere in the code you ship.