Alpha — experimental. Breaking changes ship without a deprecation cycle, and nothing here carries a stability promise yet.What is built vs. planned →

GOV.UK, end to end

The GOV.UK Design System is a real, public, independently-designed system — nobody on this project built it. This page compiles it, unedited, to eight ecosystems, and shows the whole thing: the source values, the human judgment calls, and the coverage report grading every output. Nothing here is narrated where it can be shown. Every number and value below is produced by running transtyle build on examples/govuk/.

Why GOV.UK

It is deliberately unlike the invented examples: a flat, no-radius visual language, one brand color, an iconic yellow focus state, and a functional-colour set that names some roles the catalog expects and pointedly omits others. That last property is what makes it a real test — the gaps are where judgment lives.

What GOV.UK actually publishes

The source is its real functional and web-palette colours, transcribed verbatim into option.tokens.json. These are the values, straight from design-system.service.gov.uk:

brand#1d70b8
error#ca3535
success#0f7a52
focus#ffdd00
purple#54319f
black tint-50#858686

Plus the GDS Transport font stack and — importantly — no border-radius at all. GOV.UK components are flat by design; radius.md is authored to 0rem, not left to a default.

The binding: your names in, catalog meanings out

GOV.UK keeps its own vocabulary. One small binding file aliases the catalog’s slots to GOV.UK’s functional colours — nothing is renamed, and the catalog names never leak into GOV.UK’s design language:

"primary": { "solid": { "$value": "{semantic.color.govuk.brand}" } },
"danger":  { "solid": { "$value": "{semantic.color.govuk.error}" } },
"ring":    { "$value": "{semantic.color.govuk.focus}" },
"radius":  { "md": { "$value": "0rem" } }

From there, one value fans out to every target in that target’s own dialect. The brand blue #1d70b8, as actually emitted:

Target Emitted
Bootstrap $primary: #1d70b8;
shadcn/ui --primary: oklch(0.535 0.136 249.9);
CSS variables --color-primary-solid: oklch(0.535 0.136 249.9);

Same decision; sRGB hex where Bootstrap wants it, OKLCH where the modern targets want it. And the flat aesthetic survives translation — Bootstrap’s $border-radius, $border-radius-sm, and $border-radius-lg all emit 0rem.

The judgment calls

A compiler shouldn’t invent design decisions the source never made. Where GOV.UK names a role, the mapping is mechanical; where it doesn’t, Transtyle either makes an explicit, recorded choice or leaves the slot to derivation — and says which. These are the real calls from this adoption:

ring
clean 1:1
GOV.UK's iconic yellow keyboard-focus outline (#ffdd00) is exactly what the ring slot exists for. The best mapping in the whole adoption — no interpretation needed.
neutral.solid
chose · recorded
GOV.UK has no "neutral brand" colour. Bound to Black tint-50 (#858686), the closest authored gray. A different reasonable choice existed (tint-25, #484949); the reason for this one is in the token's $description.
link.visited
chose · recorded
Not in GOV.UK's functional set at all. Bound to the web-palette purple, matching the historical GOV.UK-frontend convention — a real GOV.UK colour, just not exposed at this granularity.
warning.solid
left to derivation
GOV.UK names no warning colour, so the slot is left unbound. The standard rule hue-anchors it to 85° → #daa932, a defensible amber — coherent with the brand, but honestly not GOV.UK's own choice, because GOV.UK hasn't made one.
secondary.solid
left to derivation
Unbound. desaturate-primary pulls the brand blue toward gray → #657d96. Bind it the day GOV.UK defines a secondary; until then, derivation tracks the brand automatically.
accent.solid
left to derivation
Unbound. The rule aliases it straight to primary.solid → the brand blue. A safe default when the source draws no accent/primary distinction.

Every one of these is inspectable after the fact — npx transtyle explain warning.solid prints the full rule and inputs, so a reviewer can audit each choice without reading code.

The coverage, unretouched

Eight targets build with zero diagnostics — no contrast failures against WCAG 2.1 AA, no dangling aliases. But zero-diagnostics is not the same as lossless, and the report says so per target. This is the real split from report.json for each build:

css-variables
primeng
storybook
shadcn
echarts
radix
daisyui
bootstrap

native — losslessderived — computed from GOV.UK's valuesapproximated — meaning bent, reason recordeddropped / unsupported — this target can't say it

Read the shape, not a single number. css-variables is 100% native because it is the conformance dump — it has a slot for everything. radix is 58% approximated because its 12-step alpha ramps are a fixed projection, not a colorimetric reconstruction of Radix’s real per-colour alpha — honest about the compromise rather than hiding it. bootstrap is 76% derived across 712 classified rows because GOV.UK authored a handful of colours and the standard rules coherently filled Bootstrap’s large variable surface from them — a low native share on that target means “few of its variables take an authored value verbatim”, not “poorly themed”.

The honesty is in the notes

The grey slice above — dropped and unsupported — is where a lesser tool would fake a value. Transtyle omits it, with a reason attached. These are real note fields from the reports:

Target Item Grade The note
bootstrap $box-shadow-inset unsupported no IR inset-shadow concept; Bootstrap default kept
bootstrap $transition-* (motion) dropped Bootstrap themes almost none of it
echarts candlestick / gauge series unsupported beyond catalog semantics; extend the emitted theme manually
radix --primary-a1 (alpha ramp) approximated fixed alpha ramp, not a colorimetric derivation of Radix’s real per-colour alpha
primeng structural components unsupported no severity-coloured surface; inherits Aura’s own default untouched

Scope, stated plainly

Two things are deliberately not done, because doing them would mean inventing what GOV.UK never specified — and saying so is part of the honesty:

See it running

Every target ships a demo project that renders this theme on the framework’s real components, consuming only the compiled dist/:

npm run dev -w govuk-demo-bootstrap    # GOV.UK's flat aesthetic on real Bootstrap
npm run dev -w govuk-demo-shadcn       # the same page, real shadcn/ui components

The takeaway

GOV.UK compiled to eight ecosystems with zero catalog amendments and zero diagnostics — evidence the role grid generalizes past the systems it was designed against. The mechanical mappings were free; the judgment calls were few, explicit, and recorded; and every compromise is a number you can inspect. That is the whole product: the coverage report is the trust mechanism, not marketing around it.

Do it for your own system next: You already have a design system.