figma-import-tokens — design tokens → Figma variables
Create and update Figma variables from a token source (DTCG tokens.json, a Tailwind/SCSS export, or
a plain token object). Aliases and multi-mode values are supported. Re-running is safe: variables are
matched by saved Figma id → key → exact name, so an update edits in place rather than duplicating.
Skill boundaries
use_figmarules — load the officialfigma-useskill first; it is the full Figma Plugin API reference. Essentials these scripts rely on: plain JS with top-levelawait+return(no IIFE, nofigma.closePlugin();console.logis not returned), inputs inlined asconstat the top of each script, colors in 0–1 range, load fonts before any text op,await figma.getNodeByIdAsync(...), and atomic errors (a failed script applies nothing — read the error, fix, retry).- Reverse direction (Figma → code) →
figma-export-tokens.
Workflow
- Parse the source into the canonical token list — deterministically. For DTCG input (incl.
anything
figma-export-tokensproduced), run the bundled parser instead of flattening by hand:
It prints the exactnode scripts/parse-tokens.mjs tokens.tokens.json --default-mode Light --collection Brand # --strip-prefix "ds-" drops a leading name prefix on import (e.g. ds-color/x → color/x)COLLECTION_NAME/MODES/TOKENSconstants to paste into the apply script — handling$type→Figma type,{ref}aliases, multi-mode ($extensions…modes),dimensionunit stripping, andvariableIdround-trip. For non-DTCG sources (a Tailwind/SCSS export), export to DTCG first or hand-build theTOKENSarray:{ name: "Color/Brand/Primary", type: "COLOR"|"FLOAT"|"STRING"|"BOOLEAN", values: { <mode>: literal | { reference: "{Color.Brand.500}" } }, figmaVariableId? }. - Decide conflict policy. Default: code wins on values, but never delete Figma-only variables without asking. Confirm the target collection name and the mode list (first = default).
- Apply. Put the parsed data into the constants at the top of
scripts/apply-tokens.jsand run it viause_figma(skillNames: "figma-import-tokens"). It runs two passes — literals first, then aliases — and returns{ created, updated, errors, variableIds }. - Report & validate. Surface created/updated counts and any
errors. Run a read-back (thefigma-export-tokensread script orget_variable_defs) to confirm values landed.
Notes & gotchas
- Two-pass is required — alias targets must exist before
createVariableAlias. The script handles this; don't collapse it into one pass. - Colors accept hex strings (3/6/8 digit) and are converted to
{r,g,b,a}0–1 automatically. - Scopes: new variables default to
ALL_SCOPES, which pollutes every picker. After import, consider settingvariable.scopes(seefigma-manage-variables) to the right surfaces. - Round-trip: importing a file previously produced by
figma-export-tokensis the happy path — the stashedvariableIdmakes matching exact.