Skip to content
dtgraphv0.1.0
ok: build 08:11 UTC5 pagesmain · e4f27cd
Menu / CLI reference

CLI reference

Every dtgraph CLI command, flag, and exit code.

Install with npm install --global dtgraph, or run without installing via npx dtgraph .... This page mirrors the CLI’s own --help output.

Usage: dtgraph [options] [command]

CLI for rendering and validating DTCG design token files with dtgraph

Options:
  -V, --version                  output the version number
  -h, --help                     display help for command

Commands:
  render [options] <files...>    Render one or more DTCG token files (optionally
                                 driven by a resolver) to an SVG token graph
  validate [options] <files...>  Validate that DTCG token file(s) parse and all
                                 aliases resolve, including cycles
  help [command]                 display help for command

Both commands accept plain token files, or a resolver file plus the token files it references.

dtgraph render#

Parses and resolves one or more DTCG token files (aliases resolve across files when more than one is given) and renders the result to an SVG token graph.

Usage: dtgraph render [options] <files...>

Render one or more DTCG token files (optionally driven by a resolver) to an SVG
token graph

Arguments:
  files                             DTCG token JSON file(s) to render, plus at
                                    most one resolver document

Options:
  -o, --output <file>               write the SVG to this file instead of stdout
  -c, --context <modifier=context>  with a resolver: select a modifier context
                                    (repeatable, or comma-separated)
  -h, --help                        display help for command
dtgraph render tokens.json -o graph.svg
dtgraph render color.json typography.json -o graph.svg
dtgraph render tokens.json > graph.svg   # no -o: SVG goes to stdout
dtgraph render ds.resolver.json base.json themes/*.json components.json -c theme=dark -o dark.svg

dtgraph validate#

Parses, resolves, and cycle-checks one or more DTCG token files without producing any output artifact — useful in CI.

Usage: dtgraph validate [options] <files...>

Validate that DTCG token file(s) parse and all aliases resolve, including cycles

Arguments:
  files                             DTCG token JSON file(s) to validate, plus at
                                    most one resolver document

Options:
  --json                            print a machine-readable JSON result instead
                                    of a human-readable summary
  -c, --context <modifier=context>  with a resolver: select a modifier context
                                    (repeatable, or comma-separated)
  -h, --help                        display help for command
dtgraph validate tokens.json
dtgraph validate color.json typography.json --json
dtgraph validate ds.resolver.json base.json themes/*.json components.json --context theme=dark

With a resolver, the summary line names the resolver and the contexts that were applied (· resolver ds.resolver.json · theme=dark), and the --json result carries the same under a resolver key:

{
  "ok": true,
  "files": ["ds.resolver.json", "base.json", "themes/light.json", "themes/dark.json", "components.json"],
  "tokenCount": 8,
  "edgeCount": 6,
  "resolver": { "source": "ds.resolver.json", "contexts": { "theme": "dark" } }
}

With --json, a failure looks like:

{
  "ok": false,
  "files": ["tokens.json"],
  "error": {
    "message": "Alias \"{color.nonexistent}\" does not resolve to any known token at \"color.accent\" (see https://www.designtokens.org/tr/2025.10/format/#aliases-references)",
    "path": ["color", "accent"],
    "specReference": "https://www.designtokens.org/tr/2025.10/format/#aliases-references"
  }
}

Resolver files#

A DTCG resolver (*.resolver.json by convention) describes how a design system’s token files compose: reusable sets, modifiers with named contexts (theme: light | dark), and a resolutionOrder in which later sources override earlier ones. Pass the resolver together with every token file it references — the CLI detects the resolver by its shape (an object with a resolutionOrder array), not by its name — and it will:

  1. follow resolutionOrder, expanding each set to its sources and each modifier to the sources of its selected context;
  2. pick each modifier’s context from --context <modifier>=<context> (repeat the flag, or comma-separate pairs), falling back to the modifier’s default. default is optional in the spec, and a modifier with neither is an error — every such modifier is named at once, and the CLI prints the --context flags that would make the run succeed underneath;
  3. merge tokens so that a later source overrides an earlier one at the same path (the spec’s rule) instead of reporting the cross-file collision plain multi-file input would;
  4. only then resolve aliases and check for cycles, so {semantic.bg} in a shared components file follows the selected theme.

$ref entries resolve against the files you passed: by exact path, then relative to the resolver’s own directory, then by unique file name. Same-document references (#/sets/base), inline token objects in sources, a #/json/pointer suffix selecting part of a file, and override keys declared next to $ref are all supported. Remote (https://…) references are not fetched — pass the file alongside instead. Circular set references, sources that point at a modifier, inputs naming an unknown modifier or context, and a resolver version other than 2025.10 are reported as errors with a link to the relevant spec section.

See examples/resolver-themes for a runnable light/dark example.

Exit codes#

Code Meaning
0 Success — files parsed, aliases resolved, no cycles found
1 Failure — malformed JSON/DTCG or resolver, a dangling alias, an alias cycle, an unknown modifier/context, or a cross-file token-path collision (without a resolver)

Error output (or, with --json, error.message) comes directly from @dtgraph/core — never re-wrapped or genericized, so it always includes the offending token path and a link to the relevant part of the DTCG spec, as in the example above.

See packages/cli for the full README and examples/basic-tokens for a runnable example.