Design Tokens as a Versioned Product Interface
Build design tokens as a governed contract: model roles and contexts, generate platform outputs, protect compatibility, and expose adoption exceptions.
Piotr Ciechowicz
Product manager · developer
Updated July 13, 2026
On this page13 sections
- 01Define the boundary before naming tokens
- 02Make names describe roles, contexts, and states
- 03Choose token layers for the changes you expect
- 04Treat aliases and contexts as a graph
- 05Keep one canonical source and generate the rest
- 06Make the pipeline behave like a release system
- 07Change tokens as if consumers cannot migrate instantly
- 08Do not outsource accessibility to the token layer
- 09Measure adoption without hiding exceptions
- 10Govern the interface through change proposals
- 11A fictional token change under pressure
- 12Sources
- 13Read next
A brand colour changes. The web application updates, the native app does not, and an email template quietly keeps the previous value.
The token repository contains the new hex code. The product still has three answers.
This is not primarily a palette problem. It is an interface problem.
Design tokens work when they form a managed, versioned contract between design decisions and every platform that consumes them. A variable dump can centralise values while leaving meaning, compatibility, ownership, and adoption unresolved.
The hard work begins after a value receives a name.
Define the boundary before naming tokens
The stable Design Tokens Format Module 2025.10 defines a token, at minimum, as a human-readable name and value.
Its purpose is technical interoperability: a file format for exchanging token data between tools. It does not decide which product decisions deserve tokens or how an organisation should govern them.
The document is a Community Group Final Report. It explicitly says it is neither a W3C Standard nor on the W3C Standards Track.
The DTCG FAQ calls 2025.10 its first stable version while noting that the specification remains in active development.
Treat the format as an interchange contract, not an operating model.
A token belongs inside the system when several consumers need a design decision whose meaning should remain stable while its representation may change.
For each public token, define a consumer contract:
- the decision it represents;
- its type and valid value shape;
- the contexts in which it is available;
- the products, components, or tools allowed to consume it;
- accessibility or brand constraints on its values;
- its owner, lifecycle state, and fallback behaviour.
Not every repeated number needs that contract. A one-off illustration offset may remain local. A focus indicator shared by components, brands, and platforms cannot safely remain an unexplained value.
The boundary is therefore behavioural: tokenise decisions that need coordinated change, not every property the tooling can store.
Make names describe roles, contexts, and states
blue-600 describes a current value. action-primary-background-rest describes a role, a context, and a state.
Both names may be useful, but they serve different consumers. A palette primitive helps maintainers compose a system. A semantic token tells product code which decision it may rely on.
A public name should answer enough of these questions to prevent guesswork:
- Role: text, surface, border, action, feedback, or focus?
- Context: default, inverse, elevated, promotional, or data-dense?
- State: rest, hover, active, selected, disabled, or invalid?
- Scope: system-wide, product-specific, or component-specific?
Do not encode every dimension into every name. Choose the dimensions that change independently in your product, then publish grammar and examples.
The U.S. Web Design System offers one public implementation. Its theme colours use role-based families such as base, primary, and secondary, backed by system colours.
That model is useful evidence that role names can sit above implementation values. It is not a universal vocabulary for commercial products, native apps, or multi-brand systems.
Choose token layers for the changes you expect
Primitive, semantic, and component tokens are a common architecture, not a standard imposed by the DTCG format.
One local model might contain:
- Primitive tokens: available values such as a colour ramp, spacing scale, or type scale.
- Semantic tokens: durable roles such as
text-mutedorsurface-danger. - Component tokens: narrow decisions such as
dialog-backdroporinput-border-invalid.
Each layer buys one kind of change and charges a maintenance cost.
Primitives make palettes reusable but expose implementation choices. Semantic aliases let a role change without changing consumers.
Component tokens isolate exceptions but can multiply until the system becomes harder to navigate than the code it replaced.
Start from expected change paths. If several brands share component structure but not colour roles, keep those roles above the palettes. If components rarely diverge, do not manufacture a component tier in anticipation.
The test is not architectural purity. It is whether a maintainer can change one decision without editing unrelated consumers or creating a misleading alias.
Treat aliases and contexts as a graph
An alias is an edge between decisions. The DTCG format permits chained references, requires tools to follow them to an explicit value, and requires circular references to be reported as errors.
That makes the token system a graph, not a folder tree.
Modes, brands, density settings, colour schemes, and platforms add context to that graph. Decide whether a context overrides a primitive, a semantic role, or a component decision. Do not mix all three without a rule.
For example, dark mode may replace semantic surface and text roles while leaving component aliases intact. A platform context may change a dimension unit or typography representation without changing the product meaning.
Validate every supported context as a complete graph:
- every reference resolves;
- no cycle exists;
- every token resolves to the expected type;
- required public tokens remain present;
- an override does not accidentally create a second meaning;
- unsupported combinations fail explicitly.
Deep alias chains are not automatically wrong. They are expensive when nobody can explain which edge owns the change. Visualise the resolved path in documentation and build diagnostics.
Keep one canonical source and generate the rest
A design tool, repository, and platform package cannot all be authoritative at the same time.
Choose one canonical representation for accepted token definitions. Other tools may propose or edit changes, but an approved change must converge on that source before outputs are released.
Generated CSS, Swift, Kotlin, JavaScript, documentation, and design-tool imports are build artifacts. Do not repair them by hand.
Style Dictionary demonstrates this separation. It accepts token sources and transforms them for different platforms, languages, and contexts.
Its official transform documentation distinguishes attribute, name, and value transforms and explains how referenced values are resolved through transform cycles.
Style Dictionary is one implementation, not a required part of a token system. The architectural point is to make transformation repeatable and inspectable.
CSS custom properties are also an output mechanism, not cross-platform governance. The CSS specification defines author-named properties and var() substitution within CSS.
It does not define token ownership, naming semantics, native outputs, deprecation, or release policy. A repository full of --variables may still lack a design-token contract.
Make the pipeline behave like a release system
A useful pipeline performs separate, observable stages:
- Validate: check syntax, types, names, metadata, references, and supported contexts.
- Resolve: evaluate aliases and context overrides into a complete graph.
- Transform: convert names, units, colour representations, and platform-specific values.
- Generate: emit deterministic packages, documentation, and machine-readable manifests.
- Test: compile consumer fixtures and compare contract, accessibility, and visual checks.
- Version: publish immutable artifacts with release notes and migration instructions.
Keep unresolved and resolved manifests. A resolved value helps a platform consume the package; the unresolved graph explains why that value exists.
Test at two boundaries. Contract tests catch missing names, type changes, cycles, and unexpected output diffs. Consumer tests catch invalid platform syntax and visual consequences that a token parser cannot understand.
The design handoff guide applies the same principle to implementation: intent, states, evidence, and verification need one inspectable path.
Change tokens as if consumers cannot migrate instantly
For this operating model, use a semver-like policy with three kinds of token change:
- Additive: a new token or context appears without altering an existing contract.
- Behavioural: a value changes within the existing meaning and constraints.
- Breaking: a name, type, meaning, context, or output disappears or becomes incompatible.
Do not call every value change harmless. A new text colour may preserve the token name while breaking contrast, brand approval, screenshots, or assumptions in downstream themes.
The DTCG format includes a $deprecated property that can mark a token and explain why. That metadata is a signal, not a migration plan.
A deprecation needs a replacement, affected consumers, a warning mechanism, a removal version, and evidence that migration has finished. Keep compatibility aliases only while they retain one honest meaning.
Before release, record how to roll back the package and the consuming product. If a token package cannot be reverted independently, the release plan must account for coordinated rollback.
The design-development collaboration guide helps define the joint review path when a visual decision changes implementation obligations.
Do not outsource accessibility to the token layer
Tokens can carry accessible choices. They cannot guarantee an accessible interface.
A colour pair may meet a contrast target in one mode and fail after opacity, imagery, blending, state changes, or platform rendering.
A spacing token cannot guarantee a usable target size. A duration token cannot decide whether motion is necessary.
USWDS describes its theme colour tokens as flexible, accessible, and customisable. That statement belongs to its implementation and guidance, not to tokens as a category.
Test resolved combinations in real components: rest and interaction states, focus visibility, forced colours, reduced motion, zoom, text scaling, light and dark schemes, and supported platforms.
Store constraints close to tokens when tooling can validate them. Keep component and journey checks because accessibility emerges from composition and behaviour, not isolated values.
Measure adoption without hiding exceptions
Adoption is not the percentage of properties represented in the token catalogue. A system can publish hundreds of tokens while products continue to hard-code values.
Track signals that reveal the consumer relationship:
- token use across eligible components and platforms;
- new raw values introduced where a token was available;
- consumers still using deprecated names or old package versions;
- unresolved build warnings and context failures;
- escape hatches by owner, reason, scope, and age;
- median time from an approved change to consumer adoption.
Keep an escape-hatch ledger. Each exception should name the missing capability, affected surface, owner, review date, and decision to standardise, keep local, or remove.
Do not turn these measures into a league table. Use them to find friction: an unclear name, missing context, slow release path, incompatible platform output, or a token whose contract is too broad.
Govern the interface through change proposals
Token governance should make consequential changes inspectable without requiring a committee for every addition.
A proposal for a public token should state:
- the product decision and consumer need;
- existing tokens considered and why they do not fit;
- proposed name, type, scope, contexts, and aliases;
- accessibility and brand constraints;
- affected outputs and consumers;
- compatibility, migration, testing, and rollback plan;
- owner and review date.
Reviewers should include the people who own meaning, pipeline, and material consumers. Decision rights should be explicit when those perspectives disagree.
The cross-functional collaboration guide provides a broader model for designing those decision and dependency interfaces.
A fictional token change under pressure
Consider a fictional company supporting two brands on web and native mobile. Its semantic token surface-promotion points directly to one brand’s yellow primitive.
The second brand cannot use that yellow, so a team proposes a local component override. The change would repair one screen while leaving the semantic contract brand-specific.
The proposal instead separates the promotion role from each brand palette, adds resolved manifests for both brands, and deprecates the direct alias. Existing consumers keep the compatibility alias for one release.
The team records the mobile package lag, the replacement path, contrast checks for text and icons, and rollback to the previous package. The component override remains in the ledger until both consumers migrate.
No successful outcome is claimed. The example is fictional and shows how a colour request becomes an interface change with consumers, compatibility, and evidence.
Design tokens become infrastructure when a product can change a design decision without asking every consumer to rediscover its meaning.
The valuable artifact is not the palette. It is the contract, graph, release path, and migration record that keep one decision coherent across products and platforms.
Sources
- Design Tokens Format Module 2025.10
- Design Tokens Community Group FAQ
- Style Dictionary: Design Tokens
- Style Dictionary: Transforms
- U.S. Web Design System: Design tokens and theme colour tokens
- CSS Custom Properties for Cascading Variables Module Level 1
Read next
Related books
Two books to
read next.
If you want to go further on this topic, these are two good places to start.
01
product
Continuous Discovery Habits
by Teresa Torres
A practical guide to discovering products that create customer value and business value, with frameworks for integrating customer research into weekly rhythms.
02
product
The Lean Startup
by Eric Ries
How today's entrepreneurs use continuous innovation to create radically successful businesses, introducing Build-Measure-Learn and validated learning.
Some outbound links are affiliate links and support independent bookstores.