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, then write the docs twice. UI-Kit takes one brand colour and emits the rest — a contrast-verified theme in both modes, fifty components speaking one vocabulary, and the machine-readable contracts a coding agent needs so it stops guessing at your UI from whatever library dominated its training data.

UI-Kit init
$ npx @quxkit/ui-kit-cli init --brand "#44403D"

  accent   11 steps, anchored exactly at 900
  neutral  hue borrowed from the brand
  status   subtle harmony — info +10.9°, success -9.9°
  contrast 13 roles moved, 0 failures

  wrote src/ui-kit/theme.css
        src/ui-kit/tones.ts
        src/ui-kit/ui-kit.d.ts

$ npx @quxkit/ui-kit-cli add button field card
One colour in

This page is wearing its own output.

The crystal in the mark above averages #44403D. Feed that to the engine and the eleven swatches below come back — perceptual lightness fixed per step, chroma pushed to the sRGB boundary and no further, the stone landing exactly on 900. It is the palette this page is painted in, and it was not chosen; it was derived.

50#fafaf9
100#f2f1f0
200#e5e2e1
300#d4d0cd
400#beb9b6
500#a59f9a
600#8b8580
700#726c68
800#58534f
900#44403d
950#1f1c1a
success
canonical 150° → 140.1°
warning
canonical 75° → 72.5°
danger
canonical 27° → 31.8°
info
canonical 245° → 255.9°

Success, warning, danger and info are tinted toward the brand rather than left at their canonical hues — far enough to belong to the same system, never far enough that a warning stops reading as a warning. This is the hardest case for that: a stone with almost no chroma has almost no hue to lend, so the shifts stay under eleven degrees and every status survives intact. Four levels, from none to harmonic, where each status is placed on a named interval from the brand.

Why another one

Aimed at the parts that make a design system fail.

Existing kits are good at the parts a design system makes easy, and quiet about the rest. These six are the rest.

Ramps that survive the gamut

Palettes generated from a brand colour go muddy because HSL ramps clip and hue-rotate unevenly. These are built in Oklch on a fixed perceptual lightness ladder, with chroma clamped per step to the real sRGB boundary found by binary search — so the eleventh step is still the colour you asked for, only darker.

Contrast is an obligation, not a check

Every role that carries text declares a contrast target in APCA Lc and is moved until it clears it. The build reports what it measured and what it corrected: for the stone this page is painted in, thirteen roles were moved and nothing failed.

Both modes, from one spec

Dark mode is not a second palette hand-tuned into quiet divergence. Roles resolve at arbitrary lightness per mode from a single declaration, and both are generated and verified together.

One vocabulary, fifty components

No per-component prop dialect — no colour, colorScheme, contained, primary. Every component takes tone, variant, size and radius. An unknown value throws with the legal set instead of quietly rendering an unstyled control.

The theme declares the vocabulary

Adding a secondary tone widens the Tone type, the runtime validator, the linter, the agent contract and the stylesheet from one place. A theme cannot express a colour the components refuse to accept.

Owned components, upgradable engine

Behaviour and tokens install as versioned packages you upgrade. Styled compositions are copied into your repo by UI-Kit add and are yours to edit outright — the usual trade between the two, refused.

Built for the agent writing your UI

Contracts, not vibes.

Docs and prop tables drift from the code. Here the contracts are generated from the recipes and extracted from the TypeScript source, so a renamed prop is renamed in the published contract in the same commit — and an MCP server serves them live.

ui_kit_vocabulary
the rules that hold everywhere
ui_kit_list_components
what exists, before inventing one
ui_kit_get_component
facets, props, do-nots, correct usages
ui_kit_check_usage
lint a draft before it reaches disk
ui_kit_resolve_token
what a token is, and whether a pairing is legible
What ships

Five packages, one engine.

@quxkit/ui-kit-tokens

The colour engine. Oklab/Oklch conversion, gamut boundary search, APCA measurement and repair, ramp and role generation, four emitters. Zero dependencies.

@quxkit/ui-kit-core

The facet vocabulary, the tone contract, and the recipe engine that compiles style data to CSS. Zero dependencies, framework-agnostic.

@quxkit/ui-kit-registry

Fifty React components as recipe plus implementation, and the generator that publishes registry.json and the per-component agent contracts.

@quxkit/ui-kit-cli

init · theme · add · rules · check — generate the theme, copy components in, lint what was written.

@quxkit/ui-kit-mcp

Five MCP tools serving the registry and the theme engine to a coding agent.

Not the same thing as the billing components. billing-kit-components ships finished billing screens — pricing, usage, ledger, checkout — for an app that already has a design system. UI-Kit is the design system: the layer underneath, for the rest of the product.

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+6.4° from canonical
  • warning-10° from canonical
  • danger-4° from canonical
  • info+2.9° from canonical
neutral
accent
success
warning
danger
info
secondary
Resolved roles for the theme currently on screen
RoleLightDarkLcTarget
fg-default#17191e#f2f3f6104.490
fg-muted#55585e#ccced284.875
fg-subtle#7d8086#b2b4b966.960
fg-on-accent#fdfdff#fdfdff93.975
fg-accent#2e50b8#b7cdff84.175
fg-on-danger#fffdfd#fffdfd75.675
fg-on-warning#fffdfb#fffdfb75.275
border-strong#a6a9b0#95989f46.345

The catalogue

50 components. Here are eight.

Everything HeroUI 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.

Open

FreeMIT, forever

  • All 50 components
  • The theme engine
  • Agent contracts
  • MCP server
Team

Talk to usorg-wide

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

Give it one colour.

A verified theme, fifty components and the agent contracts come back — and the whole system is MIT, free to install and free forever. What you can pay for is the Figma library, the templates and the private registry.