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

What is a design token?

A design token is a named design decision. Not a color — a decision about a color: what it’s called, what value it holds, and what it means.

“Our action color is a specific blue” is a decision. Written as a token, it has three parts:

That third part is what makes tokens different from a palette. A palette is a list of paints; tokens say which wall each paint goes on.

Two kinds of names

Mature design systems name things twice, on purpose:

Value names describe what something is: blue-600, gray-50, red-500. They’re your paint buckets — stable, reusable, meaning-free. If you repaint the brand, blue-600 becomes a different blue, and its name still makes sense.

Meaning names describe what something is for: primary, danger, surface, text-muted. They point at value names: primaryblue-600. This is where the design decisions live — and it’s the layer everything downstream should read.

The payoff is leverage. When the brand shifts, you change one pointerprimary now points at a different bucket — and every button, link, and chart that meant “primary” follows. No search-and-replace, no drift, no forgotten corner of the product still wearing the old blue.

primarythe action color
dangerdestructive, irreversible
surfacecards sit on this
text-mutedsecondary text

Meaning names also unlock modes: in dark mode, surface means a different value, but every component that says “surface” is still correct. The decision survives; only the value swaps.

The problem tokens don’t solve

Here’s the catch. Your product teams don’t build with your token names — they build with frameworks, and every framework has its own dialect for the same meanings:

Your meaning shadcn/ui says Bootstrap says daisyUI says
the action color primary primary primary
destructive destructive danger error
raised surface (cards) card body-tertiary-bg base-200

Same meanings, different words — and sometimes the same word for different meanings, which is worse: your “secondary” and Bootstrap’s “secondary” are unrelated decisions that happen to share a spelling.

So the decision layer you carefully built gets re-translated by hand, per framework, forever: once into a Bootstrap theme, once into a shadcn stylesheet, once into a chart library’s config. Each copy drifts. Each framework upgrade breaks one. Nobody is sure which copy is current.

That translation problem — keeping one set of decisions and letting every framework speak it natively — is exactly what Transtyle exists for.

Next: How Transtyle works — the mental model, still no code.