Text, file, and other
Three non-DTCG types that exist so arbitrary JSON survives an import without losing data. None of them can be created in the token dialog — they only appear when they come in through import, the JSON editor, or sync.
Any imported token whose type cannot be determined becomes other.
text
A plain string.
{ "$type": "text", "$value": "Sign in to continue" }Apply target: Text content. On a text layer, the string replaces the layer’s characters (fonts are loaded first). On any other layer type, the value is stored as plugin data on the layer instead.
Useful for content tokens — legal strings, product names — that need to stay in sync across mockups.
file
A URL.
{ "$type": "file", "$value": "https://cdn.example.com/logo.svg" }Apply target: Hyperlink. On a layer that supports hyperlinks, the URL is set as the layer’s link. Otherwise the value is stored as plugin data.
It does not fetch or place the asset — the plugin never downloads the file.
other
Anything else. The value is stored as-is.
{ "$type": "other", "$value": { "anything": true } }Two apply targets:
| Target | Behaviour |
|---|---|
| Save on node | Writes the JSON-serialised value as plugin data on the layer |
| Copy to clipboard | Copies the value — nothing is written to the layer |
Why they are marked partial
They apply and export correctly, but they are outside the DTCG type system:
- Not creatable in the UI
- No validation — any value is accepted
- Not usable as a reference target inside composite token slots
- A downstream tool reading the exported JSON will not recognise these
$typevalues
Treat them as an escape hatch for round-tripping, not as a modelling tool.