Code output
One token source generates CSS, SwiftUI, Compose and Flutter. The same file is what a coding agent reads, so the name in the design and the name in the code are the same name.
Preview
Appetite UI holds its values once, as a token file, and generates the rest. One variable, four languages, no second copy to keep in step.
var(--ap-brand-base)Color.apBrandBaseAppetiteTheme.colors
.brandBaseapBrandBaseThe first three names are not chosen here. Every variable in the file stores its own code name for web, iOS and Android, and the export reads them off the variable rather than deriving them.
The source
One JSON file in the W3C Design Tokens format, run through Style Dictionary v5. Primitives hold the values. Semantic tokens point at primitives. Nothing holds a value twice.
{
"colors": {
"blue": {
"500": { "$type": "color", "$value": "#155DFC" }
}
},
"brand": {
"base": { "$type": "color", "$value": "{colors.blue.500}" }
}
}Figma writes a path with slashes, brand/base. The token file writes the same path with dots, so the reference reads {colors.blue.500}. Same token, two notations, and the export is where they meet.
Targets
Four outputs off the one source. These are examples of what the export produces, cut to three tokens so the four sit side by side: a colour, a spacing step and a duration.
:root {
--ap-brand-base: #155DFC;
--ap-space-4: 16px;
--ap-duration-fast: 120ms;
}extension Color {
static let apBrandBase = Color(
red: 0.082, green: 0.365, blue: 0.988)
}
enum AppetiteSpacing { static let space4: CGFloat = 16 }
enum AppetiteMotion { static let durationFast = 0.12 }internal val BrandBase = Color(0xFF155DFC)
internal val Space4 = 16.dp
internal val DurationFast = 120
// read as AppetiteTheme.colors.brandBaseconst apBrandBase = Color(0xFF155DFC); const apSpace4 = 16.0; const apDurationFast = Duration(milliseconds: 120);
The file has no slot for Dart, so the Flutter names above follow the same transform rather than coming out of the source. The other three are read off the variables.
Modes
A mode is a second value on the same token, not a second file. Light and Dark on colour, Brand and System on the platform mirrors, three device modes on the platform metrics. One source carries all of them.
:root {
--ap-brand-base: #155DFC;
}
@media (prefers-color-scheme: dark) {
:root { --ap-brand-base: #2B7FFF; }
}Agents
The Appetite Core Skill is a free instruction file that teaches a coding agent which token and which pattern to use. Add it to your project and Claude, Cursor or anything else that reads project instructions works from the same source the export runs on.
Those descriptions are carried on the variables themselves, which is the whole trick: the guidance travels with the value instead of living in a document nobody opens. The Core Skill replaced Figma Code Connect, which is not available on our plan and was the wrong tool anyway. Code Connect maps one component to one snippet. What an agent is missing is not the snippet, it is knowing which token to reach for.