SeattleJS · April 2026
The contract between design and engineering.
The problem
Your brand color lives in Figma, a Storybook theme, tailwind.config.ts, three CSS files, two Slack messages, and one designer’s head.
Tokens, from zero
From CSS variables to tokens
Swift can’t read CSS. Kotlin can’t read CSS. JSON is the lingua franca.
{
"color": {
"brand": {
"primary": { "$type": "color", "$value": "#1e3a8a" }
}
},
"space": { "md": { "$type": "dimension", "$value": "16px" } },
"radius": { "card": { "$type": "dimension", "$value": "12px" } }
}
Tokens, from zero
A value is #1e3a8a.
Tokens, from zero
Layer 1 — Primitives
Primitives are the paint cans. A component that reaches for one has married that shade.
{
"color": {
"blue": { "500": { "$value": "#3b82f6" } },
"gray": {
"0": { "$value": "#ffffff" },
"900": { "$value": "#111827" }
}
}
}
Tokens, from zero
Layer 2 — Semantic
Curly braces are DTCG alias syntax. text.primary is the contract; the blue is just today’s answer.
{
"color": {
"bg": { "surface": { "$value": "{color.gray.0}" } },
"text": { "primary": { "$value": "{color.gray.900}" } },
"accent": { "default": { "$value": "{color.blue.500}" } }
}
}
Tokens, from zero
Layer 3 — Component
The button doesn’t know what color it is. That’s the feature.
{
"button": {
"primary": {
"bg": { "$value": "{color.accent.default}" },
"text": { "$value": "{color.bg.surface}" },
"radius": { "$value": "{radius.control}" }
}
}
}
The contract
W3C Design Tokens Community Group
The contract
Interop
The contract
Style Dictionary v4
import StyleDictionary from 'style-dictionary';
const sd = new StyleDictionary({
source: ['tokens/**/*.json'],
platforms: {
css: { transformGroup: 'css',
files: [{ destination: 'tokens.css' }] },
ios: { transformGroup: 'ios-swift',
files: [{ destination: 'Tokens.swift' }] },
},
});
await sd.buildAllPlatforms();
Tooling
Tooling landscape
Tooling
On-ramp
@theme declares tokens. Utility classes and CSS variables fall out at build time.
/* app.css */
@import "tailwindcss";
@theme {
--color-brand: #1e3a8a;
--color-bg-surface: var(--color-gray-50);
--color-text-primary: var(--color-gray-900);
--radius-card: 0.75rem;
--font-display: "Söhne", system-ui, sans-serif;
}
Theming
Light & dark
Theming
Multi-brand
Agents
AI changes the stakes
Agents
What agents write without context
// Generated with no token context
<div style={{
background: '#6366f1',
padding: '17px 23px',
fontFamily: 'Roboto',
borderRadius: '11px'
}}>
<h2 style={{ color: '#1f2937' }}>Pro plan</h2>
</div>
Agents
Model Context Protocol
Agents
A design-token MCP — the tools that pay rent
Wrap
Start here on Monday
Closing
Tokens are a contract, not a file format.