BrandSpec Open Standard BETA
BrandSpec
v0.1.0

A single source of truth for brand

BrandSpec is an open standard for defining a brand as structured, machine-readable JSON. Tokens, strategy, voice, assets, and purpose — all in one canonical file.

BrandSpec lets any tool — a design system, a website builder, a content platform, or an AI — read and apply a brand consistently, without interpretation.

The problem it solves

Brand guidelines live in PDFs no one reads. Design tokens live in Figma. Strategy lives in decks. Voice lives in someone's head. Every tool rebuilds the same brand from scratch — inconsistently.

BrandSpec puts everything in one place, in a format machines can read directly.

What it replaces

  • Static PDF brand guidelines
  • Fragmented design token files
  • Verbal briefings about tone of voice
  • Manual setup in every new tool
  • Brand drift across platforms

A BrandSpec file is a single .json document. Define it once; consume it everywhere.

  1. Define your brand

    Create a brandspec.json file using the open schema. Include colours, typography, logos, voice, strategy, and purpose. You can create and manage this in a compatible tool (like the Whyso platform), or write it by hand.

  2. Push to your tools

    Feed the file into your design tool, website builder, CMS, or AI. BrandSpec-compatible tools read the tokens and apply them directly — no manual setup, no re-entry.

  3. Generate outputs

    Compile BrandSpec tokens to CSS custom properties, Figma Variables, Tailwind config, or any downstream format. The same definition powers every output.

  4. Keep it live

    When the brand evolves, update the brandspec.json. Every connected tool stays in sync. Brand drift becomes a configuration problem, not a communications problem.

For AI tools: BrandSpec gives language models a structured, unambiguous brand brief. Instead of parsing a PDF or being prompted with vague descriptions, an AI receives a machine-readable object it can query directly — colours, tone, values, positioning — and apply with precision.

A BrandSpec document is a JSON object with a root brand key and five top-level sections. All sections are optional at the object level but recommended for complete brand definition.

brand.tokens

Design tokens: colour palette (with HEX, RGB, and CMYK values), typography scales, weights, and roles. The raw material for any visual output.

colors[] typography[] spacing

brand.assets

Logo variants with format, colour mode, dimensions, and hosted URLs. Supports SVG, PNG, and other formats. Primary and secondary logo flags.

logos[] variant colorMode isPrimary

brand.voice

Tone descriptors and tagline. Tells any content tool — human or machine — how this brand communicates. Concise and intentionally opinionated.

tone[] tagline

brand.strategy

The brand's positioning, mission, vision, values, archetype, target audience, and differentiators. Brand strategy as structured data — queryable, not buried in a deck.

mission vision values[] archetype positioning targetAudience

brand.purpose

The brand's reason for existing beyond profit. Includes a purpose statement, SDG alignment, and impact metrics with measurement frequency and verification status.

statement sdgAlignment[] metrics[]

brand.metadata

Administrative fields: brand name, version string, last updated timestamp, and tags. Used for versioning, auditing, and tool compatibility checks.

name version lastUpdated tags[]

Colour token fields

Field Type Description Example
name string Human-readable colour name "Blue"
role string Semantic role: primary, secondary, neutral, accent "primary"
hex string 6-digit hex value with # "#242f62"
rgb object RGB channels as integers 0–255 {r:36, g:47, b:98}
cmyk object CMYK channels as integers 0–100 {c:63, m:52, y:0, k:62}
primarySpace string Authoritative colour space: rgb or cmyk "rgb"

Typography token fields

Field Type Description Example
name string Descriptive name for this type style "Headings"
role string Semantic role: heading, body, caption, mono "heading"
family string Font family name "Inter"
weights number[] Numeric font weights used for this role [600]
sizes.recommended number Recommended base size in pixels 36
fontColor string Default colour for this type role (hex) "#c9142e"
lineHeight string Unitless line height multiplier "1.5"
fallback string CSS font stack fallback category "sans-serif"

A minimal but complete BrandSpec document. All fields shown are part of the v0.1.0 schema.

{
  "_export": {
    "brandName":        "Example Brand",
    "brandSpecVersion": "0.1.0",
    "exportedAt":       "2026-01-01T00:00:00.000Z"
  },

  "brand": {

    /* ── Tokens ──────────────────────────────── */
    "tokens": {
      "colors": [
        {
          "name":         "Primary",
          "role":         "primary",
          "primarySpace": "rgb",
          "hex":          "#1a1a2e",
          "rgb": { "r": 26,  "g": 26,  "b": 46  },
          "cmyk": { "c": 43, "m": 43, "y": 0,  "k": 82 }
        },
        {
          "name":         "Accent",
          "role":         "accent",
          "primarySpace": "rgb",
          "hex":          "#e94560",
          "rgb": { "r": 233, "g": 69, "b": 96  },
          "cmyk": { "c": 0,  "m": 70, "y": 59, "k": 9  }
        }
      ],
      "typography": [
        {
          "name":       "Headings",
          "role":       "heading",
          "family":     "Plus Jakarta Sans",
          "weights":    [700],
          "fontColor":  "#1a1a2e",
          "lineHeight": "1.2",
          "fallback":   "sans-serif",
          "sizes": { "recommended": 40 }
        },
        {
          "name":       "Body",
          "role":       "body",
          "family":     "Source Sans Pro",
          "weights":    [400, 600],
          "fontColor":  "#333333",
          "lineHeight": "1.6",
          "fallback":   "sans-serif",
          "sizes": { "recommended": 18 }
        }
      ]
    },

    /* ── Voice ───────────────────────────────── */
    "voice": {
      "tone":    ["confident", "clear", "human"],
      "tagline": "Your brand's tagline goes here"
    },

    /* ── Strategy ────────────────────────────── */
    "strategy": {
      "archetype":    "creator",
      "brandEssence": ["Honest", "Considered", "Purposeful"],
      "mission":      "We exist to...",
      "vision":       "A world where...",
      "brandPromise": "What we commit to delivering",
      "values": [
        {
          "name":        "Craft",
          "description": "We do things properly or not at all.",
          "behaviors":   ["Precision", "Care", "Quality"]
        }
      ],
      "targetAudience": {
        "primary":   "Describe your primary audience",
        "secondary": "Describe your secondary audience"
      }
    },

    /* ── Purpose ─────────────────────────────── */
    "purpose": {
      "statement":    "Why this brand exists beyond profit",
      "sdgAlignment": [8, 12],
      "metrics": [
        {
          "name":                 "Impact Metric",
          "unit":                 "units",
          "measurementFrequency": "monthly",
          "verificationStatus":   "unverified"
        }
      ]
    },

    /* ── Metadata ────────────────────────────── */
    "metadata": {
      "name":        "Example Brand",
      "version":     "1.0.0",
      "lastUpdated": "2026-01-01T00:00:00.000Z"
    }

  },

  "$schema":  "https://brandspec.org/schema/v0.1/brandspec.json",
  "version":  "0.1.0"
}

BrandSpec tokens are designed to compile to any downstream format. Below are reference patterns for the most common outputs.

CSS custom properties

Map colour and typography tokens directly to CSS variables at the :root level.

/* Generated from brandspec.json → brand.tokens */
:root {
  /* Colours */
  --color-primary: #1a1a2e;
  --color-accent:  #e94560;

  /* Typography */
  --font-heading:       'Plus Jakarta Sans', sans-serif;
  --font-heading-weight: 700;
  --font-heading-color:  #1a1a2e;
  --font-heading-size:   40px;
  --font-heading-lh:    1.2;

  --font-body:          'Source Sans Pro', sans-serif;
  --font-body-weight:    400;
  --font-body-color:     #333333;
  --font-body-size:      18px;
  --font-body-lh:       1.6;
}

JavaScript consumption

Read a BrandSpec file and extract tokens programmatically.

// Load and parse brandspec.json
const spec = await fetch('/brandspec.json').then(r => r.json());

const { tokens, voice, strategy } = spec.brand;

// Apply colour tokens to CSS variables
tokens.colors.forEach(color => {
  document.documentElement.style
    .setProperty(`--color-${color.name.toLowerCase()}`, color.hex);
});

// Get tone of voice descriptors
const tone = voice.tone.join(', ');
// → "confident, clear, human"

// Access brand positioning for an AI prompt
const brief = `
  Brand: ${spec.brand.metadata.name}
  Archetype: ${strategy.archetype}
  Tone: ${tone}
  Essence: ${strategy.brandEssence.join(', ')}
  Mission: ${strategy.mission}
`;

Figma Variables (API push)

BrandSpec colour tokens map directly to Figma Variable collections via the Figma REST API.

// Push BrandSpec colours to a Figma Variable collection
const variables = spec.brand.tokens.colors.map(color => ({
  name: `colour/${color.role}/${color.name}`,
  resolvedType: 'COLOR',
  valuesByMode: {
    default: {
      r: color.rgb.r / 255,
      g: color.rgb.g / 255,
      b: color.rgb.b / 255,
      a: 1
    }
  }
}));

// POST to Figma REST API → /v1/files/:key/variables

AI system prompt injection: Pass the entire brand object as structured context in an AI system prompt. The model can then reference colours, voice, values, and positioning without ambiguity — producing on-brand output from day one.

BrandSpec is designed to be standards-aware. Where relevant, it aligns with or extends existing open specifications rather than working against them.

W3C Design Tokens Community Group

The DTCG draft specification defines a standard format for design tokens using $value and $type descriptors. BrandSpec's brand.tokens structure is informed by this work. BrandSpec extends it with brand-specific additions — CMYK colour space support, a primarySpace declaration for print/screen authority, and semantic role assignment — none of which are covered by the DTCG scope.

Design Tokens Draft CG Report w3.org

JSON Schema

The BrandSpec document format is defined using JSON Schema (Draft 2020-12). The $schema field in every BrandSpec file points to the published schema, enabling validation in any compatible tool. Editors such as VS Code will auto-complete and validate a BrandSpec file when the schema URI is present.

json-schema.org Draft 2020-12 Validation

UN Sustainable Development Goals

The brand.purpose.sdgAlignment field references the 17 UN SDGs by their official index number. This allows brand purpose claims to be linked to a recognised, auditable international framework rather than remaining as freeform statements.

sdgs.un.org Goals 1–17 Purpose

Schema.org

BrandSpec pages and brand exports can be annotated with Schema.org structured data — Organization, Brand, and TechArticle types are most relevant. This makes brand information legible to search engines and AI crawlers without any additional configuration.

schema.org Organization Brand Structured Data

Relationship to DTCG: BrandSpec does not replace or compete with the W3C DTCG format. A future version may support exporting brand.tokens as a DTCG-compliant .tokens.json file, making BrandSpec the upstream source that compiles to the DTCG format for tool consumption.