Hi everyone,
I’ve encountered a persistent and critical issue with Variables in our Design System. It seems like a synchronization bug between the Variable data and the Canvas renderer.
The Problem: When I update the HEX code of a primitive color variable, the changes don’t always reflect on the canvas.
Strange behavior observed:
-
The "Split" state: If I select an affected element, the Selection Colors and the Variable Modal show the new color preview. However, the element on the Canvas still renders the old color.
-
Instance vs. Main Component: In some cases, clicking through the layers of an instance or even cutting and pasting the instance back (Cmd+X / Cmd+V) forces a visual refresh. However, this does NOT work for Main Components — they remain stuck with the old color regardless.
-
New objects are affected: Even if I create a completely new shape and apply that same variable, it sometimes still renders the old color.
-
Manual fix only: The only way to reliably force an update is to unbind the variable and re-apply it. Doing this manually for a large-scale design system is impossible.
Steps to reproduce:
-
Change the HEX value of a Color Variable (Primitive).
-
Check instances and Main Components where this variable is used.
-
Result: Some instances update, but Main Components and various other layers stay visually unchanged despite showing the correct variable name/preview in the Inspector.
What I've tried:
-
Restarting the Figma app / Hard refresh (
Cmd + Alt + R). -
The "Cut & Paste" trick: Cutting an instance and pasting it back helps for that specific instance, but the Main Component stays broken.
-
Click-through: Deep-clicking into instance layers sometimes triggers a refresh, but again, not for the Main Components.
-
Only manual re-binding (detaching and re-attaching the variable) works, but the issue returns if the HEX is changed again.
Has anyone else experienced this? It feels like the rendering engine is failing to trigger a "dirty" state for layers (especially Main Components) when a variable's value changes.
Attached is a screen recording showing the discrepancy between the Inspector and the Canvas.

