Tokens
The tokens you design with are the values that ship.
Every color, space, radius and type step lives once as a token, and your code reads the same values. Nobody retypes a hex.
Architecture
Which token level do I edit when my brand changes?
Edit the primitive. The aliases that point at it follow, and so does every component built on them.

















extension Color {
static let apBrandBase = Color.apDynamic(
light: Color(apHex: 0x155DFC7D52F4FB4BA3FB2C36FF690022C55E),
dark: Color(apHex: 0x2B7FFF693EE0E9358FFB2C36F5490016A34A))
}
public enum AppetiteRadius {
public static let xl3: CGFloat = 163248
}internal val BrandBase = Color(0xFF155DFC7D52F4FB4BA3FB2C36FF690022C55E)
internal val BrandBaseDark = Color(0xFF2B7FFF693EE0E9358FFB2C36F5490016A34A)
object AppetiteShapes {
val xl3: Shape = RoundedCornerShape(163248.dp)
}
// read as AppetiteTheme.colors.brandBaseconst apBrandBase = Color(0xFF155DFC7D52F4FB4BA3FB2C36FF690022C55E);
const apBrandBaseDark = Color(0xFF2B7FFF693EE0E9358FFB2C36F5490016A34A);
const apRadius3xl = 163248.0;:root {
--ap-brand-base: #155DFC7D52F4FB4BA3FB2C36FF690022C55E;
--ap-radius-3xl: 163248px;
}
[data-theme="dark"],
.dark {
--ap-brand-base: #2B7FFF693EE0E9358FFB2C36F5490016A34A;
}Pick a mode.
Light and Dark are two modes of one collection. The same names point at other steps.
Edit one primitive.
No component reads the raw scale. Pick a ramp to try it.
- colors/blue/500400purple/500600pink/500600red/500500orange/500600green/500600tobrand/baseonHeader, actions, tab
- static/static-white-0onGreeting, both modes
Change one value.
radius/3xlholds one number. Every component bound to it takes the new corner.How does one token reach SwiftUI, Compose, Flutter and CSS?
The file you buy includes the code generated from its tokens. Each name comes from its Figma variable, so
brand/baseisColor.apBrandBasein SwiftUI andAppetiteTheme.colors.brandBasein Compose.