Validate with the CLI
Lint, diff, and export DESIGN.md files using the @google/design.md command-line tool.
The @google/design.md CLI validates your design system against the spec, catches broken token references, checks WCAG contrast ratios, and exports tokens to other formats — all as structured JSON that agents can act on.
Install
npm install @google/design.md
Or run directly without installing:
npx @google/design.md lint DESIGN.md
All commands accept a file path or - for stdin. Output defaults to JSON.
Lint a DESIGN.md
Validate a DESIGN.md file for structural correctness. The linter parses the YAML front matter, resolves all token references, runs 8 lint rules, and reports findings.
npx @google/design.md lint DESIGN.md
Example output:
{
"findings": [
{
"severity": "warning",
"path": "colors",
"message": "No 'primary' color defined. The agent will auto-generate key colors, reducing your control over the palette."
},
{
"severity": "info",
"message": "Design system defines 4 colors, 3 typography scales, 2 rounding levels."
}
],
"summary": { "errors": 0, "warnings": 1, "infos": 1 }
}
Pipe from stdin if you’re generating DESIGN.md files programmatically:
cat DESIGN.md | npx @google/design.md lint -
| Option | Type | Default | Description |
|---|---|---|---|
file |
positional | required | Path to DESIGN.md (or - for stdin) |
--format |
json | text |
json |
Output format |
Exit code 1 if errors are found, 0 otherwise.
Compare two versions
Detect token-level changes between two DESIGN.md files. The diff command reports which tokens were added, removed, or modified, and flags regressions (more errors or warnings in the “after” file).
npx @google/design.md diff DESIGN.md DESIGN-v2.md
Example output:
{
"tokens": {
"colors": { "added": ["accent"], "removed": [], "modified": ["tertiary"] },
"typography": { "added": [], "removed": [], "modified": [] }
},
"findings": {
"before": { "errors": 0, "warnings": 1 },
"after": { "errors": 0, "warnings": 2 },
"delta": { "errors": 0, "warnings": 1 }
},
"regression": true
}
| Option | Type | Default | Description |
|---|---|---|---|
before |
positional | required | Path to the “before” DESIGN.md |
after |
positional | required | Path to the “after” DESIGN.md |
--format |
json | text |
json |
Output format |
Exit code 1 if regressions are detected.
Export tokens
Convert DESIGN.md tokens to other formats for use in your codebase.
Tailwind CSS
Generate a theme.extend configuration object:
npx @google/design.md export --format tailwind DESIGN.md
The output is a JSON object with colors, fontFamily, fontSize, borderRadius, and spacing mapped from your design tokens. Drop it into your tailwind.config.js.
DTCG (W3C Design Tokens)
Generate a W3C Design Tokens Format Module compliant tokens.json:
npx @google/design.md export --format dtcg DESIGN.md
| Option | Type | Default | Description |
|---|---|---|---|
file |
positional | required | Path to DESIGN.md |
--format |
tailwind | dtcg |
required | Export target format |
View the spec
Output the DESIGN.md format specification. This is useful for injecting spec context into agent prompts so the agent knows exactly what structure to produce.
npx @google/design.md spec
npx @google/design.md spec --rules
npx @google/design.md spec --rules-only --format json
| Option | Type | Default | Description |
|---|---|---|---|
--rules |
boolean | false |
Append the active linting rules table |
--rules-only |
boolean | false |
Output only the linting rules table |
--format |
markdown | json |
markdown |
Output format |
Programmatic API
The linter is also available as a TypeScript library:
import { lint } from '@google/design.md/linter';
const report = lint(markdownString);
console.log(report.findings); // Finding[]
console.log(report.summary); // { errors, warnings, infos }
console.log(report.designSystem); // Resolved DesignSystemState
console.log(report.tailwindConfig); // Generated Tailwind theme