google-labs-code/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.

25,613
GitHub 스타
2,141
포크
TypeScript
언어
Apache-2.0
라이선스
2026.07.01
최근 푸시
2026.06.25
별표한 날

AI 분석

설치 난이도: 보통
큐레이터 노트
이 프로젝트는 디자인 시스템을 코드 에이전트에 전달하는 표준화된 방법을 제공하므로, AI 기반 UI 생성 워크플로우에 통합하기에 적합합니다. 특히 디자인 토큰 관리와 Tailwind 내보내기 기능이 유용합니다.

강점

  • 코딩 에이전트가 디자인 시스템을 이해할 수 있는 구조화된 형식을 제공하여 일관된 UI 생성을 가능하게 합니다.
  • YAML 프론트 매터와 마크다운 산문을 결합하여 기계 가독성과 인간 이해 가능성을 모두 충족합니다.
  • lint, diff, export 등 유용한 CLI 도구를 제공하며, Tailwind 및 DTCG 형식으로의 내보내기를 지원합니다.

약점

  • 현재 alpha 버전으로, 형식이 안정적이지 않아 향후 변경 가능성이 있습니다.
  • Windows에서 `.md` 접미사로 인한 명령 충돌 문제가 있으며, 해결 방법이 필요합니다.
  • npm 레지스트리 설정에 따라 설치 문제가 발생할 수 있습니다.

주의사항

  • Windows 사용자는 `design.md` 대신 `designmd` 별칭을 사용해야 합니다.
  • npm 레지스트리 설정이 올바른지 확인해야 하며, `ENOVERSIONS` 오류 발생 시 레지스트리 구성을 점검해야 합니다.
  • alpha 버전이므로 프로덕션 환경에서 사용 시 주의가 필요합니다.

시작 가이드

  • DESIGN.md 파일을 작성하여 디자인 시스템을 정의하고, `lint` 명령으로 검증해 보세요.
  • 기존 디자인 시스템을 DESIGN.md 형식으로 변환하고, `export` 명령으로 Tailwind 테마를 생성해 보세요.
  • 에이전트 프롬프트에 DESIGN.md를 포함시켜 일관된 UI 생성을 테스트해 보세요.

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

DESIGN.md

코딩 에이전트에게 시각적 아이덴티티를 설명하기 위한 형식 명세입니다. DESIGN.md는 에이전트에게 디자인 시스템에 대한 지속적이고 구조화된 이해를 제공합니다.

형식

DESIGN.md 파일은 기계가 읽을 수 있는 디자인 토큰(YAML front matter)과 사람이 읽을 수 있는 디자인 근거(markdown 산문)를 결합합니다. 토큰은 에이전트에게 정확한 값을 제공합니다. 산문은 그 값이 존재하는 이유와 적용 방법을 알려줍니다.

---
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
---

## 개요

건축적 미니멀리즘과 저널리즘적 위엄의 만남. UI는 프리미엄 무광 마감 — 고급 브로드시트 또는 현대 갤러리를 연상시킵니다.

## 색상

팔레트는 고대비 중성색과 단일 악센트 색상에 기반합니다.

- **Primary (#1A1C1E):** 헤드라인과 핵심 텍스트를 위한 진한 잉크.
- **Secondary (#6C7278):** 테두리, 캡션, 메타데이터를 위한 정교한 슬레이트.
- **Tertiary (#B8422E):** "Boston Clay" — 상호작용의 유일한 동인.
- **Neutral (#F7F5F2):** 순수한 흰색보다 부드러운 따뜻한 석회암 기반.

이 파일을 읽는 에이전트는 Public Sans의 진한 잉크 헤드라인, 따뜻한 석회암 배경, Boston Clay 클릭 유도 버튼이 있는 UI를 생성합니다.

시작하기

DESIGN.md를 명세에 대해 검증하고, 끊어진 토큰 참조를 잡아내고, WCAG 대비비를 확인하고, 구조적 결과를 표면화합니다 — 모두 에이전트가 조치할 수 있는 구조화된 JSON으로 출력됩니다.

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, "info": 1 }
}

디자인 시스템의 두 버전을 비교하여 토큰 수준 및 산문 회귀를 감지합니다:

npx @google/design.md diff DESIGN.md DESIGN-v2.md
{
  "tokens": {
    "colors": { "added": ["accent"], "removed": [], "modified": ["tertiary"] },
    "typography": { "added": [], "removed": [], "modified": [] }
  },
  "regression": false
}

명세

전체 DESIGN.md 명세는 docs/spec.md에 있습니다. 다음은 간략한 참조입니다.

파일 구조

DESIGN.md 파일은 두 개의 계층으로 구성됩니다:

  1. YAML front matter — 기계가 읽을 수 있는 디자인 토큰, 파일 상단에 --- 구분선으로 구분됩니다.
  2. Markdown 본문## 섹션으로 구성된 사람이 읽을 수 있는 디자인 근거.

토큰은 규범적 값입니다. 산문은 이를 적용하는 방법에 대한 맥락을 제공합니다.

토큰 스키마

version: <string>          # 선택 사항, 현재: "alpha"
name: <string>
description: <string>      # 선택 사항
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>

토큰 유형

유형 형식 예시
Color 모든 CSS 색상 (hex, rgb(), oklch(), 명명된 색상 등) "#1A1C1E", "oklch(62% 0.18 250)"
Dimension number + unit (px, em, rem) 48px, -0.02em
Token Reference {path.to.token} {colors.primary}
Typography fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, fontFeature, fontVariation 속성을 가진 객체 위 예시 참조

섹션 순서

섹션은 ## 제목을 사용합니다. 생략할 수 있지만, 존재하는 경우 다음 순서로 나타나야 합니다:

# 섹션 별칭

|:--|:--------|:--------|

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 | |

컴포넌트 토큰

컴포넌트는 이름을 하위 토큰 속성 그룹에 매핑합니다:

components:
  button-primary:
    backgroundColor: "{colors.tertiary}"
    textColor: "{colors.on-tertiary}"
    rounded: "{rounded.sm}"
    padding: 12px
  button-primary-hover:
    backgroundColor: "{colors.tertiary-container}"

유효한 컴포넌트 속성: backgroundColor, textColor, typography, rounded, padding, size, height, width.

변형(hover, active, pressed)은 관련 키 이름을 가진 별도의 컴포넌트 항목으로 표현됩니다.

알 수 없는 콘텐츠에 대한 소비자 동작

시나리오 동작
알 수 없는 섹션 제목 유지; 오류 없음
알 수 없는 색상 토큰 이름 값이 유효하면 허용
알 수 없는 타이포그래피 토큰 이름 유효한 타이포그래피로 허용
알 수 없는 컴포넌트 속성 경고와 함께 허용
중복 섹션 제목 오류; 파일 거부

CLI 참조

설치

npm install @google/design.md

Windows에서는 셸(PowerShell, 일부 터미널)이 @를 특별하게 처리하는 경우 패키지 이름을 따옴표로 묶으세요:

npm install "@google/design.md"

또는 직접 실행합니다 (항상 공개 npm 레지스트리에서 확인):

npx @google/design.md lint DESIGN.md

Windows/PowerShell에서는 이 직접 형식이 출력을 생성하지 않거나 (또는 DESIGN.md를 Markdown 편집기에서 열 수 있습니다) design.md bin 이름의 .md 접미사가 명령 확인 중 Windows Markdown 파일 연결과 충돌하기 때문입니다. 점 없는 designmd 별칭을 대신 사용하세요 — -pnpx를 패키지에 지정한 다음 designmd를 호출하세요:

npx -p @google/design.md designmd lint DESIGN.md

designmd 심은 동일한 진입점으로 확인되며 모든 플랫폼에서 동일하게 작동합니다.

npm error ENOVERSIONS ("@google/design.md에 사용 가능한 버전이 없습니다")

CLI는 @google/design.md로 npm에 게시됩니다. ENOVERSIONS는 거의 항상 npm이 공개 레지스트리를 쿼리하지 않음을 의미합니다 (.npmrc의 사용자 정의 registry=, 이 패키지를 동기화하지 않은 회사 미러, 또는 @google 범위에 대해 잘못 구성된 @google:registry).

유효한 레지스트리를 확인하세요:

npm config get registry

인터넷에서 정상적으로 설치하려면 https://registry.npmjs.org/여야 합니다. 구성을 수정한 후, 오래된 404가 캐시된 경우 npm cache clean --force로 다시 시도하세요.

모든 명령은 파일 경로 또는 stdin의 경우 -를 허용합니다. 출력은 기본적으로 JSON입니다.

Windows 팁: package.json 스크립트에서 직접 CLI를 호출할 때 (npx를 통하지 않고) design.md 대신 designmd 별칭을 사용하세요. 원래 bin 이름의 .md 접미사는 Markdown 파일의 파일 연결과 Windows 명령 확인을 혼동시킵니다. designmd 심은 동일한 진입점으로 확인되며 모든 플랫폼에서 동일하게 작동합니다.

>

```jsonc

// package.json

{

"scripts": {

"design:lint": "designmd lint DESIGN.md"

}

}

```

lint

DESIGN.md 파일의 구조적 정확성을 검증합니다.

npx @google/design.md lint DESIGN.md
npx @google/design.md lint --format json DESIGN.md
cat DESIGN.md | npx @google/design.md lint -
옵션 유형 기본값 설명
file 위치 인자 필수 DESIGN.md 경로 (또는 stdin의 경우 -)
--format json json 출력 형식

오류가 발견되면 종료 코드 1, 그렇지 않으면 0.

diff

두 DESIGN.md 파일을 비교하고 토큰 수준 변경 사항을 보고합니다.

npx @google/design.md diff DESIGN.md DESIGN-v2.md
옵션 유형 기본값 설명
before 위치 인자 필수 "이전" DESIGN.md 경로
after 위치 인자 필수 "이후" DESIGN.md 경로
--format json json 출력 형식

회귀가 감지되면 종료 코드 1 ("이후" 파일에 더 많은 오류 또는 경고가 있는 경우).

export

DESIGN.md 토큰을 다른 형식으로 내보냅니다.

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
옵션 유형 기본값 설명
file 위치 인자 필수 DESIGN.md 경로 (또는 stdin의 경우 -)
--format json-tailwind \ css-tailwind \ tailwind \ dtcg 필수 출력 형식
형식 출력 설명
json-tailwind JSON Tailwind v3 theme.extend 구성 객체
css-tailwind CSS CSS 사용자 정의 속성이 있는 Tailwind v4 @theme {... } 블록
tailwind JSON json-tailwind의 별칭
dtcg JSON W3C Design Tokens Format Module

spec

DESIGN.md 형식 명세를 출력합니다 (에이전트 프롬프트에 명세 컨텍스트를 주입하는 데 유용).

npx @google/design.md spec
npx @google/design.md spec --rules
npx @google/design.md spec --rules-only --format json
옵션 유형 기본값 설명
--rules boolean false 활성 린팅 규칙 테이블 추가
--rules-only boolean false 린팅 규칙 테이블만 출력
--format markdown \ json markdown 출력 형식

린팅 규칙

린터는 구문 분석된 DESIGN.md에 대해 9개의 규칙을 실행합니다. 각 규칙은 고정된 심각도 수준의 결과를 생성합니다.

규칙 심각도 확인 내용
broken-ref error 정의된 토큰으로 확인되지 않는 토큰 참조 ({colors.primary})
missing-primary warning 색상이 정의되었지만 primary 색상이 없음 — 에이전트가 자동 생성함
contrast-ratio warning WCAG AA 최소 기준(4.5:1) 미만인 컴포넌트 backgroundColor/textColor
orphaned-tokens warning 정의되었지만 어떤 컴포넌트에서도 참조되지 않은 색상 토큰
token-summary info 각 섹션에 정의된 토큰 수 요약
missing-sections info 다른 토큰이 존재할 때 선택적 섹션(spacing, rounded)이 없음
missing-typography warning 색상이 정의되었지만 타이포그래피 토큰이 없음 — 에이전트가 기본 글꼴을 사용함
section-order warning 섹션이 명세에 정의된 표준 순서를 벗어남
unknown-key warning 최상위 YAML 키가 알려진 스키마 키의 오타처럼 보임 (예: colours:colors:); 사용자 정의 확장 키는 조용히 넘어감

프로그래매틱 API

린터는 라이브러리로도 사용할 수 있습니다:

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.md 토큰은 W3C Design Token Format에서 영감을 받았습니다. export 명령은 토큰을 다른 형식으로 변환합니다:

  • Tailwind v3 config (JSON)npx @google/design.md export --format json-tailwind DESIGN.mdtailwind.config.jstheme.extend JSON 객체를 내보냅니다. --format tailwind는 하위 호환 별칭입니다.
  • Tailwind v4 theme (CSS)npx @google/design.md export --format css-tailwind DESIGN.md — Tailwind v4의 CSS 변수 토큰 네임스페이스(--color-, --font-, --text-, --leading-, --tracking-, --font-weight-, --radius-, --spacing-)를 사용하는 CSS @theme {... } 블록을 내보냅니다.
  • DTCG tokens.json (W3C Design Tokens Format Module) — npx @google/design.md export --format dtcg DESIGN.md

상태

DESIGN.md 형식은 alpha 버전입니다. 명세, 토큰 스키마 및 CLI는 활발히 개발 중입니다. 형식이 성숙함에 따라 변경이 예상됩니다.

D

[...생략...]

원본 저장소: google-labs-code/design.md

라이선스: Apache-2.0

게재 제외를 원하시면 삭제 요청을 보내주세요.