Site navigation

Beta

A token edited in two places should survive both edits.

Import a DTCG 2025.10 file, bind supported colors and scalar values to artwork, and when the file changes outside the app, re-import it and get a reviewed three-way merge instead of an overwrite.

Where it lives

View, Panels, then Variables and Tokens.

Both halves of the system sit behind one dialog:View › Panels › Variables and Tokens…, or the command palette entry Open Variables and Tokens. The dialog lists your variables with their authored and resolved values, and underneath it the Token Sync center manages sources, import previews, updates, and export.

One reviewed transaction

Read, review, apply. Nothing happens on the way in.

A file is parsed, validated, and mapped onto token identities before anything touches your document. The preview you approve is the exact revision that gets applied, as a single undoable step.

01ImportFormat detection, validation, and diagnostics
02BindCompatible values reach artwork through Variables
03UpdateBase, local, and source merged per token
Varve showing a blue rectangle whose fill is linked to the semantic.brand.curlyAlias token, with the resolved colour painted on the canvas
Varve showing a blue rectangle whose fill is linked to the semantic.brand.curlyAlias token, with the resolved colour painted on the canvas
A source alias bound through the Inspector, with its resolved colour painted on the canvas.

What it handles

References, metadata, and explicit limits.

DTCG 2025.10 parsing

Tokens, groups, $type inheritance, $root, $extends, curly-brace aliases, and JSON Pointer references are recognized by their rules. A type is never guessed from a name or a value's shape.

Create locally or start with a file

Create a color, number, dimension, font family, or numeric font weight with an explicit type and full path. Pick a same-type alias target by its complete path. Importing a first file creates its source and store after review.

External updates as a three-way merge

Re-importing a connected source compares base, local, and source per token. An upstream edit applies, a local edit survives, and an edit on both sides becomes a conflict you decide — never a source-wins overwrite and never a timestamp race.

Conflict review, one token at a time

Each conflicting token shows both values and asks for a decision: keep the Varve value or use the source value. Apply stays disabled until every conflict has been decided, so nothing is resolved quietly behind your back.

Deletions are explicit

An unchanged token removed from its source becomes a tombstone. Its backing variable keeps the last supported resolved value as a local literal. Updates that would leave retained aliases dangling are blocked for review.

Metadata survives the round trip

Token descriptions and deprecation notices, imported group-level $description, and unknown vendor $extensions survive canonical export. Updating group metadata through source synchronization is still pending. Extensions you do not understand are preserved, not interpreted.

References stay references

Varve's canonical export keeps aliases and token-level $ref in their authored form. Downstream tools interpret them differently: in our Style Dictionary 5.5.5 probe, generated CSS omitted the token-level JSON Pointer alias. Check your target tool before relying on a reference in generated output.

Resolver documents, one context at a time

Choose modifier contexts before importing a Resolver project. Varve resolves that selection after composing its explicitly supplied files. The import keeps a selected context as document tokens; keep the project files to retain other contexts and composition.

Quiet, deterministic export

Export writes the same canonical bytes for an unchanged document: no timestamp, random identifier, or undocumented version field. Canonical output preserves supported authored data; another tool's transforms and interpretation vary by version.

Capability matrix

What works, and what is still open.

Scroll the table horizontally to read limits and verification on smaller screens.

OperationResultKnown limitVerified by
Create a local tokenTyped scalar form with units, full paths, and an alias pickerComposite editing uses source-content JSON; a dedicated composite form is pendingForm tests and an editor workflow
Import a token fileValidated preview, explicit destination, one undoable transactionValid composite values are retained with warnings where property bindings are unavailableUnit suite plus a browser end-to-end spec
Bind artwork valuesColors, numbers, and pixel dimensions use existing property bindingsrem requires document font context. Font family/weight pickers and composite bindings are pending; typed values remain in the documentRuntime tests; the color workflow checks actual canvas pixels
Re-import an edited fileBase/local/source merge with added, updated, deleted, and unchanged countsManual re-import for now — there is no live file watcher yetBrowser spec asserting the exported bytes after an update
Resolve a conflictPer-token choice between the Varve value and the source valueDecisions are per token; there is no bulk resolution actionComponent tests covering blocked and resolved states
Export tokensDeterministic canonical JSON with descriptions and extensions preservedGroup $type and $extends are reported as export notes rather than re-emittedRound-trip tests and a browser download assertion
Vendor formatsStandards DTCG input and output onlyTokens Studio and Figma dialects are not claimed as 2025.10 interopNot implemented — no claim made
Automatic source watchingRe-read on demand through the import workflowNo background watcher, no Git-backed source, no external write-backNot implemented — no claim made

Search Varve