FISYCO

Public beta
The gapImpactHow it worksProductSecurity
Sign in

The W3C DTCG token format: what the standard finally settled

5 min read

Design systems
A timeline of glass markers from 2019 to 2025 ending in a highlighted token file card

For six years, "DTCG format" meant a draft that kept moving. Tools implemented whichever version was current when they started, so two files that both claimed the format could disagree on whether a value lives in value or $value, and later on how to write a colour. On 28 October 2025 the Design Tokens Community Group published its first stable version, 2025.10. Here's what it settled, what changed from the drafts many tools still write, and what to check in your own files.

Key takeaways
- DTCG 2025.10 is a Final Community Group Report, "considered stable", but not a W3C Standard (Format Module 2025.10).
- Colours and dimensions are now objects, not strings: { "value": 16, "unit": "px" } instead of "16px".
- Themes such as light and dark live in a separate Resolver Module, published the same day.
- Tool support differs a lot: check what your exporter actually writes before you build on it.

From proposal to stable

The format took three editors' drafts and six years to go from a proposal to a stable report.

The 2022 draft is the one most tools learned from, so it's the useful baseline.

What 2025.10 changed

Two complete 2025.10 tokens, with a group type, a structured value, a description, a reference and a deprecation note, look like this:

{
  "color": {
    "$type": "color",
    "brand": {
      "$value": { "colorSpace": "srgb", "components": [0.1451, 0.3882, 0.9216], "alpha": 1, "hex": "#2563eb" },
      "$description": "Primary brand colour"
    },
    "primary": {
      "$value": "{color.brand}",
      "$deprecated": "Use color.brand"
    }
  }
}

The $type on the group applies to both tokens inside it.

Structured values

The biggest practical change is that values stop being strings a tool has to parse. A dimension is an object with a numeric value and a unit of px or rem (Format Module 2025.10), and a colour names its colour space and components. That's what makes wide-gamut colours possible: an oklch or display-p3 value can't be written as a hex string. The hex field stays as an optional fallback for tools that only understand sRGB.

Two ways to reference

Curly-brace references keep working and always resolve to the target token's $value. 2025.10 adds a second notation, $ref with a JSON Pointer path (RFC 6901), and says tools "MUST support" it. It's the same pointer syntax JSON Schema uses, so existing JSON Pointer libraries can resolve these references.

Groups that inherit

A group can now $extends another group and override only what differs: a button-primary group can inherit everything from button and change two tokens. It suits the component tier from our guide to naming design tokens: a variant group inherits the base component's tokens and overrides a few. A group can also hold a $root token next to its children, and any token or group can be marked $deprecated, with an optional message explaining what replaces it.

Themes moved to their own module

The Format Module doesn't know about light and dark. The Resolver Module, published the same day, "describes a method to work with design tokens in multiple contexts (such as 'light mode' and 'dark mode' color themes)" (Resolver Module 2025.10). It works with sets of tokens and modifiers that switch between contexts, applied in a defined resolution order.

Support for it is young. Style Dictionary 5.5.5 doesn't read resolver documents yet, so pipelines built on it still keep one token file per mode.

Who reads what

Support is uneven: Figma reads and writes DTCG JSON, Style Dictionary v5 is partway to 2025.10, and some exporters still write hex and "16px" strings.

Figma's own blog explains the timing: it held off native import and export until the group "finished their 1.0 release" (Figma, Schema 2025 recap).

What to check in your files

A file can say DTCG and still be the 2022 shape. Four quick checks:

  1. Colours. A string such as "#2563eb" means the older draft. 2025.10 uses an object with colorSpace and components.
  2. Dimensions. "16px" is the older draft; 2025.10 is { "value": 16, "unit": "px" }.
  3. Types. string and boolean aren't DTCG types. Figma accepts strings on import anyway, and other tools may not.
  4. Modes. One file per mode is today's working answer. A resolver document is the standard one, once your tools read it.

If your build uses Style Dictionary, our Style Dictionary walkthrough shows a 2025.10 file going through version 5 into CSS, SCSS and TypeScript, for the parts it supports.

Where FISYCO stands

We build FISYCO, and its token export writes 2025.10: structured colours, dimension objects, references kept as references, one file per mode, and the Figma variable ID in $extensions. Strings and booleans go without a $type, with the original Figma type kept in $extensions. It's the default format for new token libraries. For how those files get out of Figma in the first place, see how to ship Figma variables without an Enterprise plan.

Export your Figma variables as DTCG 2025.10 files and get them as a pull request.
#Design tokens
KK

Written by

Kirill Karpov

Founder, FISYCO

Kirill Karpov is the founder of FISYCO, a design system assurance tool that keeps Figma and production code in sync.

Get new articles by email

Design systems, tokens and design-to-code delivery. No spam, and you can leave in one click.

By subscribing you agree to get blog emails from FISYCO. Details are in the privacy policy.

Keep your design system and your code in sync

FISYCO connects Figma libraries and your codebase, finds drift and opens the fix as a pull request.

Start for free

Related articles

7 min read

Design systems

Naming design tokens: three tiers that survive a rebrand

Flat names like blue-500 break the first time the brand changes. Three tiers of tokens keep component code untouched through a rebrand and a dark theme.

6 min read

Design systems

How to measure design system health instead of guessing

Most teams judge their design system by feel. Four signals (divergences, reach, bypasses and time to fix) give design, engineering and leadership one shared picture.

6 min read

Design systems

Why production quietly drifts from your design system

Drift between design and code rarely comes from one big mistake. Here is where it comes from, why nobody sees it and when it starts to cost real money.

DTCG format 2025.10: what the token standard settled | FISYCO