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:
- Colours. A string such as
"#2563eb"means the older draft. 2025.10 uses an object withcolorSpaceandcomponents. - Dimensions.
"16px"is the older draft; 2025.10 is{ "value": 16, "unit": "px" }. - Types.
stringandbooleanaren't DTCG types. Figma accepts strings on import anyway, and other tools may not. - 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.



