Typography
A complete text style as one token — the type that most reliably lands on Figma text layers.
Value format
{ "$type": "typography", "$value": { "fontFamily": "Inter", "fontSize": { "value": 16, "unit": "px" }, "fontWeight": 600, "lineHeight": 1.5, "letterSpacing": { "value": -0.01, "unit": "rem" } }}| Slot | Type | Required |
|---|---|---|
fontFamily | String or array of strings, or a reference | Yes |
fontSize | dimension or reference | Yes |
fontWeight | Number 1–1000 or keyword, or a reference | Yes |
lineHeight | Unitless multiplier (1.5 = 150%) | Yes |
letterSpacing | dimension or reference | No |
lineHeight is a ratio, not a length
DTCG defines lineHeight as a plain number multiplying the font size. 1.5
with a 16 px font produces 24 px. Do not write "24px" here.
Applying to Figma
Default target: the text layer’s type properties. Text layers only — other layer types are skipped silently.
| Slot | Figma property |
|---|---|
fontFamily + fontWeight | Font name — the family plus the resolved style |
fontSize | Font size (only applied when > 0) |
lineHeight | Line height in pixels, computed as fontSize × lineHeight. Requires fontSize to be present |
letterSpacing | Letter spacing in pixels |
Font resolution
This is where typography beats applying family and weight separately:
- The numeric weight snaps to the nearest Figma style name — 600 →
Semi Bold. - Italic and Oblique on the existing layer are preserved, producing e.g.
Semi Bold Italic. - If
fontFamilyis an array, each family is tried in order until one loads — a real fallback stack. - If none load, the layer is skipped with “Failed to load font …”.
rem values in fontSize and letterSpacing are converted to px (base 16).
Figma-specific extensions
Four Figma properties have no DTCG equivalent. They are stored under the plugin’s own extension key, which keeps the token spec-valid — other tools ignore what they do not recognise.
{ "$type": "typography", "$value": { … }, "$extensions": { "app.daes.figma": { "paragraphSpacing": 16, "paragraphIndent": 0, "textDecoration": "UNDERLINE", "textCase": "UPPER" } }}| Key | Values |
|---|---|
paragraphSpacing | Number (px) |
paragraphIndent | Number (px) |
textDecoration | NONE, UNDERLINE, STRIKETHROUGH |
textCase | ORIGINAL, UPPER, LOWER, TITLE, SMALL_CAPS, SMALL_CAPS_FORCED |
These fields are editable in the typography value field alongside the DTCG slots.
Notes and limits
- A
lineHeightwithout afontSizeis skipped — the multiplier has nothing to resolve against. - Applying to a mixed-style text layer replaces the whole range.
- Typography tokens cannot be exported to Figma Variables; Figma has no composite variable type.