
DESIGN.md
CLIGoogle Labs 推出的 DESIGN.md 格式与命令行:设计师把配色、字体、间距等视觉规范写成文件交给 agent,lint 检查引用错误与 WCAG 对比度,diff 对比版本,export 导出 Tailwind 等设计令牌。需要 Node.js,格式仍为 alpha。
DESIGN.md
A format specification for describing a visual identity to coding agents. DESIGN.md gives agents a persistent, structured understanding of a design system.
The Format
A DESIGN.md file combines machine-readable design tokens (YAML front matter or interleaved YAML code blocks) with human-readable design rationale (markdown prose). Tokens give agents exact values. Prose tells them why those values exist and how to apply them.
---
name: Heritage
colors:
primary: "#1A1C1E"
secondary: "#6C7278"
tertiary: "#B8422E"
neutral: "#F7F5F2"
typography:
h1:
fontFamily: Public Sans
fontSize: 3rem
body-md:
fontFamily: Public Sans
fontSize: 1rem
label-caps:
fontFamily: Space Grotesk
fontSize: 0.75rem
rounded:
sm: 4px
md: 8px
spacing:
sm: 8px
md: 16px
---
## Overview
Architectural Minimalism meets Journalistic Gravitas. The UI evokes a
premium matte finish — a high-end broadsheet or contemporary gallery.
## Colors
The palette is rooted in high-contrast neutrals and a single accent color.
- **Primary (#1A1C1E):** Deep ink for headlines and core text.
- **Secondary (#6C7278):** Sophisticated slate for borders, captions, metadata.
- **Tertiary (#B8422E):** "Boston Clay" — the sole driver for interaction.
- **Neutral (#F7F5F2):** Warm limestone foundation, softer than pure white.
An agent that reads this file will produce a UI with deep ink headlines in Public Sans, a warm limestone background, and Boston Clay call-to-action buttons.
Getting Started
Validate a DESIGN.md against the spec, catch broken token references, check WCAG contrast ratios, and surface structural findings — all as structured JSON that agents can act on.
npx @google/design.md lint DESIGN.md
{
"findings": [
{
"severity": "warning",
"path": "components.button-primary",
"message": "textColor (#ffffff) on backgroundColor (#1A1C1E) has contrast ratio 15.42:1 — passes WCAG AA."
}
],
"summary": { "errors": 0, "warnings": 1, "infos": 1 }
}
Compare two versions of a design system to detect token-level and prose regressions:
npx @google/design.md diff DESIGN.md DESIGN-v2.md
{
"tokens": {
"colors": { "added": ["accent"], "removed": [], "modified": ["tertiary"] },
"typography": { "added": [], "removed": [], "modified": [] },
"rounded": { "added": [], "removed": [], "modified": [] },
"spacing": { "added": [], "removed": [], "modified": [] },
"components": { "added": [], "removed": [], "modified": [] }
},
"findings": {
"before": { "errors": 0, "warnings": 1, "infos": 1 },
"after": { "errors": 0, "warnings": 1, "infos": 1 },
"delta": { "errors": 0, "warnings": 0 }
},
"regression": false
}
The Specification
The full DESIGN.md spec lives at docs/spec.md. What follows is a condensed reference.
File Structure
A DESIGN.md file has two layers:
- YAML Design tokens — Machine-readable design tokens, delimited by
---fences at the top of the file or interleaved as fenced```yamlcode blocks within each##section. - Markdown body — Human-readable design rationale organized into
##sections.
The tokens are the normative values. The prose provides context for how to apply them.
Token Schema
version: <string> # optional, current: "alpha"
name: <string>
description: <string> # optional
omitted: <string[] | OmittedSection[]> # optional, list of sections to intentionally omit
colors:
<token-name>: <Color>
typography:
<token-name>: <Typography>
rounded:
<scale-level>: <Dimension>
spacing:
<scale-level>: <Dimension | number>
components:
<component-name>:
<token-name>: <string | token reference>
Token Types
| Type | Format | Example |
|---|---|---|
| Color | Any CSS color (hex, rgb(), oklch(), named, etc.) | "#1A1C1E", "oklch(62% 0.18 250)" |
| Dimension | number + unit (px, em, rem) | 48px, -0.02em |
| Token Reference | {path.to.token} | {colors.primary} |
| Typography | object with fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, fontFeature, fontVariation | See example above |
Section Order
Sections use ## headings. They can be omitted, but those present must appear in this order:
| # | Section | Aliases |
|---|---|---|
| 1 | Overview | Brand & Style |
| 2 | Colors | |
| 3 | Typography | |
| 4 | Layout | Layout & Spacing |
| 5 | Elevation & Depth | Elevation |
| 6 | Shapes | |
| 7 | Components | |
| 8 | Do's and Don'ts |
Component Tokens
Components map a name to a group of sub-token properties:
components:
button-primary:
backgroundColor: "{colors.tertiary}"
textColor: "{colors.on-tertiary}"
rounded: "{rounded.sm}"
padding: 12px
button-primary-hover:
backgroundColor: "{colors.tertiary-container}"
Valid component properties: backgroundColor, textColor, typography, rounded, padding, size, height, width.
Variants (hover, active, pressed) are expressed as separate component entries with a related key name.
Consumer Behavior for Unknown Content
| Scenario | Behavior |
|---|---|
| Unknown section heading | Preserve; do not error |
| Unknown color token name | Accept if value is valid |
| Unknown typography token name | Accept as valid typography |
| Unknown component property | Accept with warning |
| Duplicate section heading | Error; reject the file |
| Duplicate top-level YAML key | Error; reject the file |
CLI Reference
Installation
npm install @google/design.md
On Windows, quote the package name if your shell treats @ specially (PowerShell, some terminals):
npm install "@google/design.md"
Or run directly (always resolves from the public npm registry):
npx @google/design.md lint DESIGN.md
On Windows/PowerShell, this direct form can produce no output (or open
DESIGN.md in your Markdown editor) because the .md suffix in the design.md
bin name collides with the Windows Markdown file association during command
resolution. Run the dot-free designmd alias instead — point npx at the
package with -p, then invoke designmd:
npx -p @google/design.md designmd lint DESIGN.md
The designmd shim resolves to the same entrypoint and works identically across
all platforms.
npm error ENOVERSIONS (“No versions available for @google/design.md”)
The CLI is published as @google/design.md on npm. ENOVERSIONS almost always means npm is not querying the public registry (custom registry= in .npmrc, a corporate mirror that has not synced this package, or a misconfigured @google:registry for the @google scope).
Check your effective registry:
npm config get registry
For a normal install from the internet it should be https://registry.npmjs.org/. After fixing config, retry with npm cache clean --force if a stale 404 was cached.
All commands accept a file path or - for stdin. Output defaults to JSON.
Windows tip: when invoking the CLI directly from a
package.jsonscript (rather than throughnpx), use thedesignmdalias instead ofdesign.md. The.mdsuffix in the original bin name confuses Windows command resolution with the file association for Markdown files. Thedesignmdshim resolves to the same entrypoint and works identically across all platforms.// package.json { "scripts": { "design:lint": "designmd lint DESIGN.md" } }
lint
Validate a DESIGN.md file for structural correctness.
npx @google/design.md lint DESIGN.md
npx @google/design.md lint --format json DESIGN.md
cat DESIGN.md | npx @google/design.md lint -
| Option | Type | Default | Description |
|---|---|---|---|
file | positional | required | Path to DESIGN.md (or - for stdin) |
--format | json | json | Output format |
Exit code 1 if errors are found, 0 otherwise.
diff
Compare two DESIGN.md files and report token-level changes.
npx @google/design.md diff DESIGN.md DESIGN-v2.md
| Option | Type | Default | Description |
|---|---|---|---|
before | positional | required | Path to the "before" DESIGN.md |
after | positional | required | Path to the "after" DESIGN.md |
--format | json | json | Output format |
Exit code 1 if regressions are detected (more errors or warnings in the "after" file).
export
Export DESIGN.md tokens to other formats.
npx @google/design.md export --format json-tailwind DESIGN.md > tailwind.theme.json
npx @google/design.md export --format css-tailwind DESIGN.md > theme.css
npx @google/design.md export --format dtcg DESIGN.md > tokens.json
| Option | Type | Default | Description |
|---|---|---|---|
file | positional | required | Path to DESIGN.md (or - for stdin) |
--format | json-tailwind | css-tailwind | tailwind | dtcg | required | Output format |
| Format | Output | Description |
|---|---|---|
json-tailwind | JSON | Tailwind v3 theme.extend config object |
css-tailwind | CSS | Tailwind v4 @theme { ... } block with CSS custom properties |
tailwind | JSON | Alias for json-tailwind |
dtcg | JSON | W3C Design Tokens Format Module |
Exit code 0 on a successful export (regardless of any lint findings in the source — run lint to gate on those), 1 on an invalid --format or an emitter error, and 2 if the input file cannot be read.
spec
Output the DESIGN.md format specification (useful for injecting spec context into agent prompts).
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 |
Linting Rules
The linter runs eleven rules against a parsed DESIGN.md. Each rule produces findings at a fixed severity level.
| Rule | Severity | What it checks |
|---|---|---|
broken-ref | error | Token references ({colors.primary}) that don't resolve to any defined token |
missing-primary | warning | Colors are defined but no primary color exists — agents will auto-generate one |
contrast-ratio | warning | Component backgroundColor/textColor pairs below WCAG AA minimum (4.5:1) |
orphaned-tokens | warning | Color tokens defined but never referenced by any component |
token-summary | info | Summary of how many tokens are defined in each section |
missing-sections | info | Optional sections (spacing, rounded) absent when other tokens exist |
missing-typography | warning | Colors are defined but no typography tokens exist — agents will use default fonts |
section-order | warning | Sections appear out of the canonical order defined by the spec |
unknown-key | warning | A top-level YAML key looks like a typo of a known schema key (e.g. colours: → colors:); custom extension keys stay silent |
token-like-ignored | warning | An unknown top-level key has token-like values (e.g. hex colors, font families, dimensions) suggesting it was dropped or misspelled |
omitted-rules | info | Validates the omitted configuration mapping for unknown or redundant sections |
Programmatic API
The linter is also available as a library:
import { lint } from '@google/design.md/linter';
const report = lint(markdownString);
console.log(report.findings); // Finding[]
console.log(report.summary); // { errors, warnings, info }
console.log(report.designSystem); // Parsed DesignSystemState
Design Token Interoperability
DESIGN.md tokens are inspired by the W3C Design Token Format. The export command converts tokens to other formats:
- Tailwind v3 config (JSON) —
npx @google/design.md export --format json-tailwind DESIGN.md— emits atheme.extendJSON object fortailwind.config.js.--format tailwindis a backwards-compatible alias. - Tailwind v4 theme (CSS) —
npx @google/design.md export --format css-tailwind DESIGN.md— emits a CSS@theme { ... }block using Tailwind v4's CSS-variable token namespaces (--color-*,--font-*,--text-*,--leading-*,--tracking-*,--font-weight-*,--radius-*,--spacing-*). - DTCG tokens.json (W3C Design Tokens Format Module) —
npx @google/design.md export --format dtcg DESIGN.md
Status
The DESIGN.md format is at version alpha. The spec, token schema, and CLI are under active development. Expect changes to the format as it matures.
Disclaimer
This project is not eligible for the Google Open Source Software Vulnerability Rewards Program.
相關資源

designlang
CLI用无头浏览器读取任意网站的设计系统,一条命令导出颜色、字体、间距等设计令牌(DTCG)、Tailwind 配置、Figma 变量和品牌规范手册,还能给配色对比度与多页一致性打分;也可作为 MCP 服务或 Claude Code 插件使用。需要 Node.js,首次要下载 Chromium(也可改用已安装的 Chrome)。
Manavarya09/design-extract4.3k
Terrazzo
CLI设计令牌命令行工具(原名 Cobalt UI):读取符合 W3C DTCG 标准的颜色、字体、间距等令牌,校验后通过插件生成 CSS、Sass、JS/TS、Swift、Tailwind 等代码,可放进 CI,让设计规范自动落到代码里。需要 Node.js 项目。
terrazzoapp/terrazzo476
Stitch Design Skills
SkillGoogle Stitch 配套技能合集:由文字或图片生成界面、从代码提取 DESIGN.md,并把设计稿转成 React 或 React Native 组件。Google Labs 出品但非 Google 正式支持产品,需先配置 Stitch MCP。
google-labs-code/stitch-skills8.5k
Tailwind CSS
Skill用 Tailwind CSS 实现界面的通用指南:响应式与状态变体、深色模式、克制使用任意值、优先拆组件再用 @apply,以及动态拼接类名导致生产环境缺样式等常见问题,附按钮与首屏版式示例。
MengTo/Skills6.8k
Landing Page Design
Skill构建或修改落地页时分两部分工作:先收集目标、受众与证明材料,确定页面结构、版式、转化文案与 SEO;再遵循一套严格的视觉规则,规定字体、Tailwind 字号阶梯、间距、圆角、背景、图标与动效。规则偏主观,例如禁用 Inter 字体与背景渐变。
elayadesign/ai-design-skills2.7k
Budge
Skill在 Next.js App Router 项目中,agent 只改动单个 CSS 值或 Tailwind 类时,页面上会出现浮动调节条,用户用方向键微调数值、切换相关属性,回车复制修改提示、Esc 还原。需在 app/layout.tsx 引入 budge.design 托管的运行时脚本。
millionco/skills34