Skip to content

Typography

Token type$type: typography2026-07-27

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" }
}
}
SlotTypeRequired
fontFamilyString or array of strings, or a referenceYes
fontSizedimension or referenceYes
fontWeightNumber 1–1000 or keyword, or a referenceYes
lineHeightUnitless multiplier (1.5 = 150%)Yes
letterSpacingdimension or referenceNo

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.

SlotFigma property
fontFamily + fontWeightFont name — the family plus the resolved style
fontSizeFont size (only applied when > 0)
lineHeightLine height in pixels, computed as fontSize × lineHeight. Requires fontSize to be present
letterSpacingLetter spacing in pixels

Font resolution

This is where typography beats applying family and weight separately:

  1. The numeric weight snaps to the nearest Figma style name — 600 → Semi Bold.
  2. Italic and Oblique on the existing layer are preserved, producing e.g. Semi Bold Italic.
  3. If fontFamily is an array, each family is tried in order until one loads — a real fallback stack.
  4. 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"
}
}
}
KeyValues
paragraphSpacingNumber (px)
paragraphIndentNumber (px)
textDecorationNONE, UNDERLINE, STRIKETHROUGH
textCaseORIGINAL, 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 lineHeight without a fontSize is 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.