Known limitations
Everything that does not work, or does not work the way you would expect. Each entry says what to do instead.
Data loss risks
Read these three before you do anything irreversible.
There is no undo
The undo and redo buttons in the header are not wired up. Token operations cannot be reversed.
Do instead: export a JSON backup before any bulk operation.
Three operations replace, not merge
| Operation | Effect |
|---|---|
| JSON editor → save json | Replaces the entire token document |
| Sync → pull | Replaces local tokens with the remote |
| Deleting a token set | Deletes every token in it |
Only the import dialog merges.
Deleting a token breaks its references silently
Nothing checks whether other tokens reference the one you are deleting. They become broken references, discoverable only by spotting the red text on their tiles.
Do instead: search for the token name before deleting it.
Not reachable in the UI
Built, but with no way to open them:
| Feature | Consequence |
|---|---|
| Variables panel | No tokens → Figma Variables workflow at all |
| Sync panel | Pull and push buttons, provider removal, and “Reset plugin” are all unreachable. Adding a provider works from Settings |
| Undo / redo buttons | Non-functional |
| Footer Themes icon button | Non-functional. Use the Themes tab or the theme selector |
| Footer sync scope options | Current page, Document, Variables & styles, Resolved values are disabled. Only Current selection works |
| Settings → docs and feedback icons | Disabled |
Sync
| Limitation | Detail |
|---|---|
| GitLab and HTTP endpoints are blocked | Their domains are not in the plugin’s network allowlist, so Figma refuses the requests. GitHub works |
| No merge, no conflict detection | Push overwrites the remote; pull replaces local. Concurrent editing loses work |
| Set metadata is not restored on pull | Folder structure is reconstructed from paths, but explicitly created empty sets are lost |
| Access tokens stored unencrypted | Plain JSON in Figma client storage |
| No provider editing or removal | The Settings list is add-only |
| No push-format switch | Directory push always uses the flat format |
Do instead: one person pushes per document; push to a working branch; pull at the start of a session, push at the end.
Applying to Figma
| Limitation | Detail |
|---|---|
| Silent no-ops | A target that does not exist on the layer type — corner radius on a line, padding without auto layout — is skipped with no error. A success message is not proof every layer changed |
| Fills and strokes are replaced | Applying a colour to a layer with stacked paints leaves one paint |
| Shadows are replaced | All existing drop and inner shadows are removed. Other effects (blur, noise, texture) survive |
| Only two gradient stops | Stops 0 and 1 are addressable; a three-stop gradient cannot be fully token-driven |
| Effect targets need an existing effect | Recolouring or offsetting a shadow fails if the layer has none |
| Sync to selection with nothing selected hits the whole page | Intentional, but wide |
| Relaunch buttons cap at 50 layers | Larger selections get them on the first 50 |
Token types
| Type | Limitation |
|---|---|
| Gradient | Selectable in the dropdown but entirely unimplemented — no input field, displays [Invalid], cannot be applied |
| Font family | An array (fallback stack) cannot be applied — it is joined into one invalid font name. Use a single string, or a typography token |
| Font weight | The value is used verbatim as a Figma style name, so 600 and semi-bold both fail to resolve. Use a typography token |
| Border | The width slot ignores rem → px conversion. 0.5rem sets a stroke weight of 0.5. Use px |
| Stroke style | Object form (dashArray) is import-only. double, groove, ridge, inset, outset fall back to solid. Dash array entries ignore rem |
| Duration, Cubic Bézier, Transition | Cannot be applied — Figma has no matching layer property. Export works |
| Text, file, other | Import-only, unvalidated, not usable as reference targets, not recognised by downstream DTCG tooling |
Figma Variables
Beyond the panel being unreachable: the type mapping covers only color,
dimension, and number, and both converters read string values while DAES
stores DTCG objects. Composite types have no Figma variable equivalent.
See Figma Variables.
Platform constraints
These are Figma limits, not plugin bugs:
| Figma Design files only | Not FigJam, not Slides |
| Plugin window | 400×300 to 1200×900 |
| Canvas colour | sRGB — wide-gamut tokens are gamut-mapped for display |
| rem base | Fixed at 16, not configurable |
| Document storage | Chunked at 90,000 characters per key; Figma’s plugin-data quota applies |
Reporting something not on this list
Include: the token type, its exact $value (from the JSON editor), the layer
type you applied to, the target you chose, and the message you got.