Repository navigation
Releases: atropical/VarVar
Release list
v5.0.1
What's Changed
Import
- Empty scopes now mean hidden.
"scopes": []in a JSON file (in$extensions.figmaor the legacy$scopes) hides the variable from every Figma picker. Other variables can still alias it, so it suits primitives that should only be referenced. (#30) - Leave the
scopeskey out to keep a variable's existing scopes. A new variable starts on Figma's default, all scopes. - Files exported by VarVar now round-trip exactly. Before, hidden variables came back visible.
Heads-up: a third-party token file that always writes
"scopes": []will now produce hidden variables. Remove the key to keep the old behaviour.
Exports are unchanged.
Full Changelog: v5.0.0...v5.0.1
v5.0.0
What's Changed
🧪 Styles (BETA)
A new Styles menu for working on colour, text, effect and grid styles with your variables. Each item opens the same view in a different place, and a breadcrumb shows where you are.
- Edit & Bind Variables… — browse every local style and bind, swap or detach the variable behind each field: fill and gradient colours, every text setting Figma exposes, shadow colour/offset/blur/spread, blur radius, and grid count/gutter/margin/size. Add, reorder and hide layers; reorder styles within a folder.
- Find & Replace Variables… — search the variables bound in styles (contains, starts with, exact name or regex with
$1groups), optionally within one collection, and re-bind every match to the renamed variable. Broken bindings to deleted variables can be found and pointed at a new one. Every match is previewed with a tick box. - New Style from Variables… — build a style the way you think about it: pick the kind and type (e.g. Effect → Drop shadow), then a variable for each field, and a name. Need a whole set? Generate many styles at once from a token group or a DTCG
typography/shadowfile. - Apply LibLib Snapshot… — make this file's styles match a LibLib library snapshot. Styles match by key, so renamed styles keep every layer link; variables are rebound by name (exactly, by collection, with LibLib 2.3.0+).
Everywhere:
- Live preview — an instant preview as you edit, plus the exact render from Figma, with a mode switcher (extended collections included).
- Nothing is written until you review it — changes collect as drafts, an itemised diff shows exactly what will happen, and applying is a single Figma undo step.
- Usage count for the selected style.
- Read-only in Dev Mode.
Menu
- Export Variables moved to Export as… → All Formats.
- Styles (BETA) sits second, Import… last.
Why a major version
- VarVar now asks for the team library permission, so library variables can be offered in the token picker — Figma will ask you to approve it.
- The menu layout changed.
Exports and imports are unchanged.
Full Changelog: v4.5.2...v5.0.0
v4.5.2
What's Changed
Export
- A colour variable that links to another colour at its own opacity — e.g.
palette/whiteat 97%, or a colour with a linked opacity — no longer exports as#NaNNaNNaN(CSS, JS, CSV) ornull(JSON). - CSS & Tailwind keep the links:
color-mix(in srgb, var(--palette--white) 97%, transparent). - JSON writes the colour it renders as in
$valueand keeps the links in$extensions.figma.composedColor; import rebuilds the linked colour + opacity from it. - JavaScript & CSV write the colour it renders as.
Dependencies
- Patched shell-quote (critical), brace-expansion and source-map-js advisories in build tooling.
Full Changelog: v4.5.1...v4.5.2
v4.5.1
What's Changed
Closes #27.
UI
- The filename field and the export/download button now sit in the same column as the code preview, pinned to the bottom of the window. A long preview no longer pushes the download button below the fold — no more scrolling past the whole output to get your file.
- The controls stay pinned whether or not the preview is showing, in both Design and Dev mode.
Full Changelog: v4.5.0...v4.5.1
v4.5.0
What's Changed
Numbers
- Decimals no longer export with floating-point noise — 732.8 exports as
732.8, not732.7999877929688. Every format.
Units
- New dropdown for numeric variables:
none,pxorrem, with a root font-size field whenremis chosen. CSS, Tailwind and JSON; JS and CSV keep exporting plain numbers. - Import asks for the root font size when a file carries
remvalues, instead of silently rescaling them.
DTCG
- JSON now writes dimensions as
{"value": 16, "unit": "px"}and colours as the Color Module object, per the 2025.10 spec. One option, on by default, restores the old"16px"and"#ff00ff"strings. $typeno longer claims what a value cannot satisfy — an out-of-rangefontWeightreportsnumber. Values are never altered. JSON only; the CSV column and JS field are unchanged.- Import reads colours in all fourteen colour spaces, converting the wide-gamut ones to sRGB with a warning, and picks a variable's type from its value so a
fontWeightof"bold"imports correctly.
CSS
- The single-dash group separator is now available for plain CSS, not just Tailwind, so
text/h1--line-heightcan export as--text-h1--line-height.
Interface
- The export preview and the scrollbars are legible in light theme.
- Long help tooltips became readable footnotes, options are reordered, and the CSS format is named "CSS & Tailwind".
Full Changelog: v4.4.1...v4.5.0
v4.4.1
What's Changed
Fixes a regression in 4.4.0, which started exporting same-collection aliases as $..Light.x instead of $.Theme.Light.x. Mode names like Figma's default Mode 1 recur across collections, so the short form could only be read by tracking the enclosing file entry. The collection is now always named.
Enterprise extended collections did emit the short form in 4.x; theirs are qualified now too, so all JSON output is consistent. Import understands both forms, so no existing file stops importing.
Full Changelog: v4.4.0...v4.4.1
v4.4.0
What's Changed
Closes #11, #16, #17, #18, #19.
Tailwind CSS export (BETA)
- Namespaces now derive from a variable's Figma scopes instead of its name, so a group called
textscoped to font size exports as--text-h1 pxis applied only to dimension scopes — a font-weight no longer exports as600px- Groups join with a single dash by default so Tailwind IntelliSense picks the variables up; a toggle restores
-- - Alias
var()references now resolve through the same namer as declarations
Code Syntax
- Exported in JSON, CSV and JS, and applied again on import
- Optional setting to use the Web code syntax as the emitted variable name in CSS and JS
Import fixes
- Variable group names containing a full stop now resolve
- A mode name clashing with a group name backtracks instead of giving up
- A text variable whose value starts with
$.is no longer mistaken for a reference
Also
- Optional
pxunit for variables left on Figma's default scoping - Format labelled "CSS & Tailwind"; Tailwind-only options nested under their parent toggle
- Readable tooltips on the
?help badges
Full Changelog: v4.3.0...v4.4.0