Adapter Pipeline Example
Adapter Pipeline Example
This example shows the complete transformation from Figma export to CSS variables.
Pipeline overview
- Figma export JSON (input)
- Figma adapter normalization (Variable Contract)
- Style Dictionary build (CSS variables output)
Step 1: Figma export (input)
Figma Variables export JSON:
{
"@primitives": {
"$collection_metadata": {
"name": "Primitives",
"figmaId": "VariableCollectionId:502:189"
},
"$color": {
"primary": {
"$type": "color",
"$value": "#0066cc",
"$variable_metadata": {
"name": "color/primary",
"figmaId": "VariableID:502:227",
"modes": {
"light": "#0066cc",
"dark": "#004499"
}
}
}
}
},
"@tokens": {
"$color": {
"text": {
"primary": {
"$type": "color",
"$value": "{@primitives.$color.primary}",
"$variable_metadata": {
"name": "color/text/primary",
"figmaId": "VariableID:502:228"
}
}
}
}
}
}
Step 2: Figma adapter normalization
After running the Figma adapter (see Figma Adapter):
{
"primitives": {
"$extensions": {
"figma": {
"collectionId": "VariableCollectionId:502:189",
"name": "Primitives"
}
},
"color": {
"primary": {
"$type": "color",
"$value": {
"light": "#0066cc",
"dark": "#004499"
},
"$extensions": {
"figma": {
"variableId": "VariableID:502:227",
"name": "color/primary"
}
}
}
}
},
"tokens": {
"color": {
"text": {
"primary": {
"$type": "color",
"$value": {
"light": "{primitives.color.primary}",
"dark": "{primitives.color.primary}"
},
"$extensions": {
"figma": {
"variableId": "VariableID:502:228",
"name": "color/text/primary"
}
}
}
}
}
}
}
Changes made:
- Removed
@prefix from collection names - Moved
$collection_metadatato$extensions.figma - Moved
$variable_metadatato$extensions.figma - Normalized reference syntax:
{@primitives.$color.primary}→{primitives.color.primary} - Moved mode values from
$variable_metadata.modesto$valueobject
Step 3: Style Dictionary configuration
Style Dictionary config (style-dictionary.config.json):
{
"source": ["tokens/**/*.json"],
"platforms": {
"css": {
"transformGroup": "css",
"buildPath": "dist/",
"files": [
{
"destination": "variables-light.css",
"format": "css/variables",
"filter": {
"attributes": {
"mode": "light"
}
}
},
{
"destination": "variables-dark.css",
"format": "css/variables",
"filter": {
"attributes": {
"mode": "dark"
}
}
}
]
}
}
}
Step 4: Style Dictionary output
After running Style Dictionary build:
dist/variables-light.css:
:root {
--primitives-color-primary: #0066cc;
--tokens-color-text-primary: #0066cc;
}
dist/variables-dark.css:
:root {
--primitives-color-primary: #004499;
--tokens-color-text-primary: #004499;
}
Complete workflow
- Designer exports variables from Figma
- Run Figma adapter to normalize JSON
- Commit normalized JSON to version control
- CI runs Style Dictionary build
- Generated CSS files are deployed
- Components consume CSS variables
Before/after comparison
Before (Figma export)
- Tool-specific metadata in root properties
- Non-standard reference syntax
- Modes stored in metadata
- Collection names with
@prefix
After (Variable Contract)
- Metadata moved to
$extensions - Canonical reference syntax
- Modes in
$valueobjects - Standard collection names
After (CSS output)
- CSS variables ready for consumption
- Mode-specific files generated
- References resolved to final values
Failure modes
If any step fails:
- Invalid Figma export breaks adapter
- Normalization errors cause validation failures
- Style Dictionary config errors produce empty outputs
- Reference resolution failures cause undefined CSS variables
Validation points
Validate at each step:
- Figma export: JSON syntax, required fields
- Adapter output: Variable Contract compliance, naming convention
- Style Dictionary output: CSS syntax, all references resolved