March 18, 2026

Google named
the moment.
Now let's see
what it means.

Google Stitch ships design.md — a markdown file it calls a "design agent." It has four color roles, three type scales, and component descriptions in plain English. That's documentation, not a design system. Here's the difference.

design.md — Google Stitch output
# design.md

## Color Palette & Roles
Primary: Ocean-deep Cerulean (#0077B6)
— Used for interactive elements,
  calls to action, and links.

Background: Cloud White (#F8F9FA)
— Provides a clean, neutral canvas.

## Typography Rules
Heading: Inter 700, 32px/1.1
Body: Inter 400, 16px/1.6

## Component Stylings
Buttons use primary color with
4px border-radius and 12px 20px
padding. Hover state lightens
by 10%.
descriptive / copy-paste portability

What is design.md?

On March 18, 2026, Google updated Stitch — its AI-native design canvas — with a feature called design.md: a markdown file that captures the visual language of a UI project in a portable, agent-readable format. The idea is simple and genuinely useful. Give an AI agent a design.md file and it has enough context to generate code that looks intentionally designed, not generically styled.

Google didn't invent this concept, but they named it in a way that stuck. The insight behind design.md is correct: AI coding agents need structured design context to produce consistent output. A plain text file that says "use #4F46E5 for primary actions and Inter 400 at 16px for body copy" is meaningfully better than no guidance at all.

A design.md file is organized into five sections, each covering a different dimension of the visual system:

1
Visual Theme & Atmosphere Mood, aesthetic, personality
2
Color Palette & Roles Named colors + hex values
3
Typography Rules Font families, weights, sizes
4
Component Stylings Buttons, cards, inputs
5
Layout Principles Grid, spacing, breakpoints

Where design.md falls short isn't in its intent — it's in its depth and enforceability. Natural language describing a hover state is useful context. It's not a contract. The gap between describing a design system and encoding one is exactly what the rest of this page explores.

Original data point
~12
Design decisions in a typical design.md
4–5 color roles, 2–3 type scales, high-level component notes. Enough to orient an agent — not enough to govern a system.
vs
80–120
Discrete tokens in a production W3C token system
Full color scales (50–900) across primary, secondary, and neutral palettes. Semantic aliases. Typography scale (7–8 steps). Spacing, radii, shadows, motion — every decision named and typed.
That's a 7–10× gap in design system coverage — the difference between design guidance and design infrastructure.

Side by side

design.md describes your design system in natural language. Design tokens encode it in structured, machine-readable data. Neither is wrong — they serve different purposes. But one is copy-paste documentation; the other is enforceable infrastructure.

design.md Descriptive
# design.md — Acme Corp

## Visual Theme & Atmosphere
A professional, modern aesthetic with
clean lines and confident colors.
Warm undertones, approachable but
authoritative. Suitable for B2B SaaS.

## Color Palette & Roles
Primary: Deep Indigo (#4F46E5)
— Core brand color. Use for primary
  actions, navigation highlights,
  and focus states.

Secondary: Warm Slate (#64748B)
— Supporting color for secondary
  text and inactive UI elements.

Surface: Soft White (#FAFAF9)
— Page and card backgrounds.

## Typography Rules
Display: Plus Jakarta Sans 800
— Reserved for hero headlines.

Body: Plus Jakarta Sans 400, 16px
— Line height 1.6. Max width 68ch.

Code: JetBrains Mono 400
— Used inline and in code blocks.

## Component Stylings
Primary Button: Filled indigo (#4F46E5)
with white text, 10px border-radius,
12px 24px padding. Hover: lighten 8%.

Cards: White background, 1px border
(#E5E5E0), 16px border-radius,
subtle box-shadow.

## Layout Principles
8px base grid. Max content width
1120px. 24px side padding on mobile,
48px on desktop.
tokens.json Structured
{
  "$schema": "https://design-tokens.org/schema.json",
  "color": {
    "primary": {
      "50":  { "$value": "#EEF2FF", "$type": "color" },
      "100": { "$value": "#E0E7FF", "$type": "color" },
      "200": { "$value": "#C7D2FE", "$type": "color" },
      "300": { "$value": "#A5B4FC", "$type": "color" },
      "400": { "$value": "#818CF8", "$type": "color" },
      "500": { "$value": "#6366F1", "$type": "color" },
      "600": { "$value": "#4F46E5", "$type": "color" },
      "700": { "$value": "#4338CA", "$type": "color" },
      "800": { "$value": "#3730A3", "$type": "color" },
      "900": { "$value": "#312E81", "$type": "color" }
    },
    "semantic": {
      "action-default":    { "$value": "{color.primary.600}", "$type": "color" },
      "action-hover":      { "$value": "{color.primary.500}", "$type": "color" },
      "action-pressed":    { "$value": "{color.primary.700}", "$type": "color" },
      "surface-default":   { "$value": "#FAFAF9", "$type": "color" },
      "surface-elevated":  { "$value": "#FFFFFF", "$type": "color" },
      "border-default":    { "$value": "#E5E5E0", "$type": "color" },
      "text-primary":      { "$value": "#1C1917", "$type": "color" },
      "text-secondary":    { "$value": "#57534E", "$type": "color" }
    }
  },
  "typography": {
    "scale": {
      "display": { "$value": { "fontFamily": "Plus Jakarta Sans", "fontWeight": 800, "fontSize": "56px", "lineHeight": 1.1 }, "$type": "typography" },
      "h1": { "$value": { "fontFamily": "Plus Jakarta Sans", "fontWeight": 700, "fontSize": "40px", "lineHeight": 1.15 }, "$type": "typography" },
      "body": { "$value": { "fontFamily": "Plus Jakarta Sans", "fontWeight": 400, "fontSize": "16px", "lineHeight": 1.6 }, "$type": "typography" },
      "code": { "$value": { "fontFamily": "JetBrains Mono", "fontWeight": 400, "fontSize": "13px", "lineHeight": 1.7 }, "$type": "typography" }
    }
  },
  "spacing": {
    "1": { "$value": "4px",  "$type": "dimension" },
    "2": { "$value": "8px",  "$type": "dimension" },
    "3": { "$value": "12px", "$type": "dimension" },
    "4": { "$value": "16px", "$type": "dimension" },
    "6": { "$value": "24px", "$type": "dimension" },
    "8": { "$value": "32px", "$type": "dimension" },
    "12": { "$value": "48px", "$type": "dimension" }
  },
  "borderRadius": {
    "sm":  { "$value": "6px",  "$type": "dimension" },
    "md":  { "$value": "10px", "$type": "dimension" },
    "lg":  { "$value": "16px", "$type": "dimension" },
    "full":{ "$value": "9999px", "$type": "dimension" }
  },
  "shadow": {
    "sm": { "$value": "0 1px 3px rgba(0,0,0,0.06)", "$type": "shadow" },
    "md": { "$value": "0 4px 12px rgba(0,0,0,0.07)", "$type": "shadow" },
    "lg": { "$value": "0 12px 32px rgba(0,0,0,0.09)", "$type": "shadow" }
  }
}
Feature design.md (Google Stitch) Design Tokens (W3C format)
Format Natural language markdown Structured JSON with $type, $value
Machine-readable No — requires parsing Yes — direct programmatic access
Color scales Named roles only (Primary, Background…) Full 50–900 palette + semantic aliases
Enforceable Copy-paste only Import into Figma, Style Dictionary, CI
AI agent access Read as text — prone to interpretation Query by key — deterministic lookup
Token aliasing Not supported Yes — {color.primary.600} references
Portability Great for humans, fragile for tools Works across any W3C-compliant toolchain

Why static files aren't the future

design.md is documentation. Design tokens are better — but they're still static files you check into a repo, copy between projects, and manually keep in sync. The real future is runtime expression infrastructure that your agents can query, validate against, and resolve on demand.

🗂️
Static files drift
Design token JSON files get forked, renamed, and out of sync across repos. There's no enforcement layer — just convention and hope.
🤖
Agents need to query, not parse
An AI agent reading a JSON file has to understand your token structure by convention. An API-served contract lets it resolve action-primary at runtime, deterministically.
🔄
Bidirectional resolution
The next step isn't a better file format. It's infrastructure that lets your brand speak back — validating that generated code actually matches the system.
Designless LESS

Expression Infrastructure for AI Agents

LESS turns your design tokens into live infrastructure. Not a markdown file to paste. Not a JSON blob to commit. A runtime API your agents query, validate against, and resolve — deterministically, every time.

The gap between "describing" a design system and "enforcing" one is exactly where Google Stitch stops and where LESS begins.

See how LESS works →
or
Generate a design.md + tokens →

Frequently asked questions

design.md is a structured markdown file produced by Google Stitch that captures a UI's visual language across five sections: Visual Theme & Atmosphere, Color Palette & Roles, Typography Rules, Component Stylings, and Layout Principles.

Each section describes design decisions in natural language, often pairing descriptive names with exact hex values or pixel measurements in parentheses — for example, "Ocean-deep Cerulean (#0077B6) — used for interactive elements." It is generated either from a text prompt describing the desired aesthetic or by extracting rules from an existing screenshot or URL.

The format is designed to be portable: something you can paste into a coding agent's context window to give it consistent design guidance. That's a real improvement over no guidance at all — but it stops well short of a formal design system.

No — they're fundamentally different things, even though they cover similar territory. design.md is natural-language documentation: it describes design decisions in prose that humans and LLMs can read and interpret. A design token file is structured data: a JSON file where every value carries an explicit $type and $value, enabling tools to parse, validate, and transform it programmatically.

A design.md entry saying "Primary: Deep Indigo (#4F46E5) — used for interactive elements" is a description. A token entry like "action-default": { "$value": "#4F46E5", "$type": "color" } is a contract. The distinction matters most when tools — not humans — are the consumers. A build tool, a CI linter, or a Figma plugin cannot reliably consume natural language. They can consume structured tokens directly.

Yes — but only as read-only context, not as a queryable interface. AI agents can ingest design.md as plain text and use it to inform generated UI code: it gives the model useful guidance about intended colors, type sizes, and component patterns. For simple, single-session tasks this often works well enough.

What design.md cannot provide is a reliable lookup interface. If an agent needs to know "what is the exact disabled state color for a secondary button?" there is no structured key to query — only prose to parse. This creates interpretation variance: the same question asked in two different contexts may yield subtly different answers, especially as context windows grow long.

Design tokens solve this by making every decision a named, typed key agents can resolve deterministically — color.neutral.300 always returns the same value, regardless of how the question is phrased.

The W3C Design Token Community Group (DTCG) is developing a standardized specification for design tokens — a shared format that tools like Figma, Style Dictionary, and Theo can all read and write without custom transformation layers. It is not yet a formal W3C standard, but has broad industry adoption and is the de-facto format for interoperable token systems.

In DTCG format, every token is a JSON object with two required fields: $value (the raw value) and $type (the semantic category — color, dimension, typography, duration, shadow, etc.). Tokens can reference other tokens using a {dot.path} alias syntax, enabling semantic layers — for example, action-default can alias to {color.primary.600}, so changing the primary palette automatically updates all semantic action tokens.

Adopting DTCG format means a token file you define today can be consumed by any compliant tool in your toolchain — now and as the ecosystem grows.

Design tokens are static files — they encode decisions at a point in time and must be manually updated, versioned, and distributed across every repo that uses them. The enforcement model is convention: teams agree to use the tokens, but nothing stops a developer from hardcoding a value. LESS (from Designless) is runtime expression infrastructure: a live API that agents query to resolve design values on demand, without parsing a file or depending on a particular repo's token state.

Rather than asking "does this repo have the latest tokens.json checked in?", an agent queries the LESS API and receives a deterministic, always-current response. LESS also supports bidirectional validation — it can verify that generated code actually conforms to the brand contract, not merely suggest values. That closes the loop between design intent and shipped code in a way static token files cannot.

Generate your own design.md + token system

Pick your brand colors, choose a type style, and see both outputs side-by-side — the Google Stitch-style design.md and the W3C-format token JSON.

No signup. No export limits. Just tokens.

🎨
Full color scales
Generates 50–900 shades from any base color using perceptual HSL manipulation.
Live preview
Both design.md and token JSON update as you change inputs — no generate button needed.
📋
Copy-ready output
One click to copy either format. Paste into your project, Figma, or AI agent context.