Skip to content

Storybook Design System

Storybook's marketing-site design system as DESIGN.md. Midnight navy gradient canvas, Nunito Sans at 56px bold, hot-pink brand logo mark, 15 colors tokens, 15 components. For React, Next.js, and AI coding tools.

Add shadcn.io to your AI agent. · Pro It installs blocks, icons and templates in your design system from a prompt, with Pro.

Set up MCP
Primary
#ff4785
Typeface
Nunito Sans
Shape
Mixed
Base radius
6px
Colors
15
Type tokens
12
Components
15
Spacing values
8

About

About Storybook DESIGN.md

Curated by Dov Azencot · Updated May 19, 2026 · Source storybook.js.org (opens in a new tab)

Storybook's marketing page makes a choice that almost no other open-source dev-tool makes: the hero's visual protagonist is the product itself. A detailed mockup of the Storybook UI — component tree on the left, canvas in the center, controls panel on the right — sits inside a dark browser frame that spans the full hero width. The gradient behind it runs from near-black at the page center to a deep indigo-blue at the edges, creating a depth field that makes the product mockup appear to float. The brand's hot-pink logomark sits top-left but the pink goes nowhere else on the marketing surface; the only colors visible in the hero come from the rendered UI components inside the mockup.

The DESIGN.md file packages the system into a machine-readable spec for React tooling. Inside: 15 colors tokens anchored on a near-black-to-midnight gradient canvas with a single structural gray hairline and a muted secondary text tier; 12 typography tokens running Nunito Sans at sizes from 12px caption to 56px display hero; 6 corner-radius tokens from 2px (the tightest code fragment rounding) through 9999px pill (the primary CTA); and 15 components definitions covering the gradient hero, the navy card surface, the pill-shaped primary button, the dark text input, and the brand logo badge. The gradient brand colors (hot pink, deep blue, gradient variants) are declared in the system but appear only inside the logomark and the hero gradient fill.

Feed this file to Claude or Cursor and it reproduces Storybook's specific moves: near-black gradient hero instead of a flat dark canvas, product-screenshot as the visual hero above the fold, pill CTAs against a dark surface, and Nunito Sans across every typographic tier without a second voice. The token set is notably restrained for a brand with this much chromatic personality in its logomark — the design discipline is the abstinence of the pink, held back so the product can carry the page.

What makes it distinct

5

  1. Product-screenshot canvasthe hero's visual anchor is a literal Storybook UI mockup inside a dark browser frame, not brand illustration
  2. Logo-mark pink as the only chromatic signalthe hot-pink-to-coral gradient appears in the Storybook logomark but is absent from any CTA, text, or card fill
  3. Midnight navy gradientthe above-fold hero graduates from near-black at center to deep indigo at edges, a depth effect rare in open-source dev-tools brands
  4. Nunito Sans across every tierdisplay sits at 56px / weight 700, body at 16px / 400, with no second typeface or mono voice on the marketing surface
  5. Pill-dominant radiusthe primary CTA and nav pills use 9999px full rounding; cards and inputs use 6px; the binary choice mirrors Cloudflare's structure

storybook.js.org

Live at storybook.js.org

A snapshot of the brand in production. Scroll the frame to see the whole page.

Storybook's website at storybook.js.org

Colors

15 colors

Storybook's system anchors on #ff4785 (primary) as its primary color. Type is set in Nunito Sans across 12 tokens from 11px to 56px, weights 400–700. Shape language is mixed across 15 components, blending pills, soft rounds, and squarer corners.

Brand & Accent

Sparing, CTA-only voltage · 2

Surface

Page and card backgrounds · 3

Text

Headlines, body, captions · 4

Borders & Hairlines

Dividers, outlines, rules · 2

Semantic

Status, errors, success, links · 3

Other

Specialty colors · 1

Typography

12 type tokens

Set in Nunito Sans across 12 tokens, from 11px to 56px, weights 400–700. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.

  • display-xl56px · weight 700 · lh 70pxThe quick brown fox jumps over the lazy dog
  • heading-lg24px · weight 700 · lh 32pxThe quick brown fox jumps over the lazy dog
  • heading-md20px · weight 400 · lh 32pxThe quick brown fox jumps over the lazy dog
  • body-lg16px · weight 400 · lh 28pxThe quick brown fox jumps over the lazy dog
  • body-md16px · weight 400 · lh 24pxThe quick brown fox jumps over the lazy dog
  • body-sm14px · weight 400 · lh 20pxThe quick brown fox jumps over the lazy dog
  • body-xs13px · weight 400 · lh 19.5pxThe quick brown fox jumps over the lazy dog
  • label-md14px · weight 700 · lh 20pxThe quick brown fox jumps over the lazy dog
  • button-md16px · weight 700 · lh 24pxThe quick brown fox jumps over the lazy dog
  • nav-link14px · weight 700 · lh 20pxThe quick brown fox jumps over the lazy dog
  • caption12px · weight 700 · lh 16pxThe quick brown fox jumps over the lazy dog
  • overline11px · weight 700 · lh 16.5px · tracking 0.55pxThe quick brown fox jumps over the lazy dog

Layout

Radii and spacing

7 corner radii and 8 spacing values. Shape language: mixed.

Radii

  • none0px
  • xs2px
  • sm4px
  • md6px
  • lg8px
  • xl12px
  • full9999px

Spacing

  • xs4px
  • sm6px
  • base8px
  • md16px
  • lg20px
  • xl24px
  • 2xl32px
  • 3xl80px

Components

15 components

Each rendered from its tokens (color, type, radius, padding) on Storybook's own canvas.

  • Button Primary
    button-primaryButton Primary
  • Button Primary Hover
    button-primary-hoverButton Primary Hover
  • Button Secondary
    button-secondaryButton Secondary
  • Top Nav
    top-navTop Nav
  • Nav Link
    nav-linkNav Link
  • Hero Section
    hero-sectionHero Section
  • Hero Heading
    hero-headingHero Heading
  • Section Heading
    section-headingSection Heading
  • Body Paragraph
    body-paragraphBody Paragraph
  • Body Paragraph Muted
    body-paragraph-mutedBody Paragraph Muted
  • Card Dark
    card-darkCard Dark
  • Type here…
    text-inputText Input
  • Badge Pill
    badge-pillBadge Pill
  • Status Dot Error
    status-dot-errorStatus Dot Error
  • Status Dot Success
    status-dot-successStatus Dot Success

In use

The system, in use

Storybook's tokens on the kind of product it builds.

Build something people actually use.

A short paragraph of marketing copy that previews how the brand's display tier and body tier read together. Two sentences is usually enough.

Get startedLearn more
Marketing heroHeadline, sub-copy, primary CTA — the universal homepage opener.
Active users12,489+8.4%
Revenue$84.2k+12.1%
Sessions32,118+3.2%
Errors47−18%
Dashboard4-tile analytics grid — the dev-tools / SaaS-platform archetype.

FAQ

Storybook design system FAQ

Common questions about Storybook's tokens, components, and how to use this DESIGN.md in your project.

Read next

Specs, directories, and component libraries that pair with this design system.

Use it

Use Storybook in your project

One machine-readable file. Drop it into Claude, Cursor, or any AI tool that reads DESIGN.md.

Download DESIGN.md
  1. Download the DESIGN.md

    One machine-readable file: every color, type, radius, spacing, and component token of Storybook.

  2. Feed it to your AI tool

    Drop it into Claude, Cursor, or GitHub Copilot. The agent writes React components and Tailwind classes that match Storybook's visual language.

  3. Reference the tokens directly

    Or paste the values into your Tailwind config, CSS variables, or component library: every color, size and radius is a quoted, ready-to-copy value.

Read the full DESIGN.md: overview, rationale, do’s and don’ts

Overview

Storybook's marketing page does something almost no other open-source developer tool does. Product-as-proof: the hero is not an illustration of the tool — it is a screenshot of the tool running. A real Storybook session fills a dark browser-frame mockup spanning the full hero width: component tree on the left (ProductCard, Dashboard, Homepage, Sign In), canvas in the center showing a Space Helmet product card, controls panel on the right with backgroundColors, outOfStock toggle, and padding slider. The surrounding gradient is the brand's midnight-navy-to-indigo radial depth field, making the frame appear lit from behind. Where Linear renders its interface as a perspective illustration and GitHub shows abstract code animations, Storybook puts the real interface in front.

Single-voltage restraint in the wrong place: the brand owns a vivid hot-pink-to-coral gradient, but it appears only in the logomark. The marketing surface itself is nearly monochrome — white text on the navy gradient hero, dark-navy cards in the feature sections, and white for body surfaces below the fold. The pink is withheld so that the product's own UI colors (the rendered component states, status indicators, control panel tokens) are the page's only chromatic moments. Unlike tools like Netlify or Vercel that stamp their brand accent on every primary CTA, Storybook lets the product's UI language do the chromatic work.

Typography is Nunito Sans across every tier — the humanist rounded sans used consistently from the 56px hero headline to the 11px overline labels. Display weight is 700, body is 400, and there is no intermediate 500 or 600 weight on the captured surfaces. The system's typographic character comes from Nunito Sans's rounded apertures rather than weight manipulation.

Key Characteristics:

  • Midnight-navy-to-indigo radial gradient hero ({colors.canvas} deep to {colors.canvas-gradient-edge}), not a flat dark canvas — the vignette depth is the hero's structural device.
  • Hot-pink brand voltage ({colors.primary} — #ff4785) appears only in the logomark; absent from all marketing CTAs, cards, and text.
  • Product UI screenshot inside a dark browser frame as the primary above-fold visual — 100% real product, not illustration.
  • Nunito Sans across all 12 typographic tokens — single family, 56px display at 700 down to 11px overline at 700 with 0.55px letter-spacing.
  • Full-pill primary CTA ({rounded.full}) against the dark canvas; small surfaces (6px) elsewhere — binary radius pattern.
  • Status colors (error red {colors.status-error}, warning amber {colors.status-warning}, success green {colors.status-success}) appear in the product mockup as component state indicators, not as brand chrome.

Colors

Brand

  • Primary Pink ({colors.primary} — #ff4785): frequency 2. Used as gradient fill only — exclusively inside the Storybook logomark. Not rendered on CTAs, cards, or section fills. The brand's held-in-reserve identity color.
  • Primary Blue ({colors.primary-alt} — #4791ff): frequency 3. Used as gradient fill only — appears paired with the pink in the logomark gradient. Wired into the logo mark with no marketing-surface application.

Surface

  • Canvas ({colors.canvas} — #0d1026): frequency 3. The deep-navy hero floor, used as background fill on the above-fold section and inside gradient animations. Wired as a brand-layer color.
  • Canvas Gradient Edge ({colors.canvas-gradient-edge} — #232a35): frequency 2. The secondary dark surface — used for the edge of the hero gradient and for the dark card surfaces in the feature sections below.
  • Surface-1 ({colors.surface-1} — #232a35): the elevated dark card surface, same hex as the gradient edge tone. Used for feature cards and the embedded browser frame background.

Text

  • Ink ({colors.ink} — #ffffff): frequency 278 — the dominant page text color. White on every dark surface, used for display headlines, body paragraphs, nav labels, and button text. Also the background fill for the text-input below the fold.
  • Ink Muted ({colors.ink-muted} — #94a3b8): frequency 21 — cool slate used for secondary text, metadata labels, and muted body paragraphs.
  • Ink Secondary ({colors.ink-secondary} — #73828c): frequency 21 — mid-range muted text for captions and tertiary labels.
  • Ink Tertiary ({colors.ink-tertiary} — #71717a): frequency 7 — the dimmest text tier, used for the smallest metadata below the product mockup.

Hairlines

  • Hairline ({colors.hairline} — #e5e7eb): frequency 620 — the dominant border token, appearing on 611 border occurrences. Card outlines, input edges, and section dividers. The high frequency is driven by the product mockup's internal UI chrome.
  • Hairline Dark ({colors.hairline-dark} — #3f3f46): frequency 12. Used on the dark-surface card borders in the feature sections.

Semantic

  • Focus Ring ({colors.focus-ring} — #029cfd): frequency 12 — wired as --tw-ring-color. Appears as the focus state on the email input field.
  • Status Error ({colors.status-error} — #ef4444), Status Warning ({colors.status-warning} — #eab308), Status Success ({colors.status-success} — #22c55e): each frequency 1, all as background fills in the product mockup's component status dots. Not brand chrome — these are the status colors Storybook renders for component state visualization.

Typography

Font Family

The system runs Nunito Sans for everything — a humanist rounded sans-serif that reads warmly at both display and label sizes. Fallbacks walk system-ui, sans-serif. There is no second family and no monospace voice on the captured marketing surfaces; even the technical labels inside the product mockup inherit Nunito Sans. The rounded apertures give the brand a friendlier character than the geometric or grotesque alternatives that dominate dev-tools brands.

Hierarchy

TokenSizeWeightLine HeightUse
{typography.display-xl}56px70070pxHero h1, section h2 ("Build, test & document components")
{typography.heading-lg}24px70032pxFeature section h3 headings
{typography.heading-md}20px40032pxBlockquote / testimonial tier
{typography.body-lg}16px40028pxHero sub-paragraph, lead body copy
{typography.body-md}16px40024pxDefault running text
{typography.body-sm}14px40020pxSecondary body, nav descriptions
{typography.body-xs}13px40019.5pxTertiary descriptions
{typography.label-md}14px70020pxLabels, active nav badges
{typography.button-md}16px70024pxCTA button labels
{typography.nav-link}14px70020pxTop-nav link labels
{typography.caption}12px70016pxBadge text, small labels
{typography.overline}11px70016.5pxSmall-caps overlines above section headings

Principles

Display weight is 700 — the single heavy typographic moment. Body and most labels sit at 400. The 700 weight appears on display headlines, nav links, button labels, and captions, but at sizes that descend from 56px to 11px; the single weight stretches across all roles rather than each role having its own weight. Nunito Sans's rounded terminals remain legible at 11px, which is why the system can hold one family this far down.

Note on Font Substitutes

Nunito Sans is available from Google Fonts at no cost. The commercial Nunito (slightly more rounded) is a close sibling. For an open-source alternative with similar humanist warmth, DM Sans transfers well at the heading and body sizes; Plus Jakarta Sans at 95% line-height covers the display tier.

Layout

Spacing System

  • Base unit: 8px.
  • Tokens: {spacing.xs} 4px · {spacing.sm} 6px · {spacing.base} 8px · {spacing.md} 16px · {spacing.lg} 20px · {spacing.xl} 24px · {spacing.2xl} 32px · {spacing.3xl} 80px.
  • Section padding (vertical): 80px between major sections — {spacing.3xl}.
  • Card internal padding: {spacing.xl} (24px) for feature cards.
  • Hero internal padding: 0 horizontal on the headline; the product mockup extends full-width.

Grid & Container

  • Max content width: ~1376px on the hero; feature sections constrain to ~1080px.
  • Hero: full-bleed midnight-navy gradient canvas. The browser-frame product mockup spans approximately 80% of the viewport width.
  • Feature sections: alternating left-text / right-image layout at 50/50 below the fold.
  • Integration logo wall: six-icon row (VS Code, GitHub, Airbnb, Mozilla, monday.com, BBC) in white on the dark mid-section.

Rhythm

The page runs on a consistent dark canvas from hero through the feature sections. There is no light-mode inversion below the fold — the entire page holds the near-black surface. Individual sections are separated by vertical rhythm only, not by background-color shifts. This is unusual among open-source dev-tools brands; most (Linear, Vercel) alternate between dark hero and light content sections.

Elevation

The system uses tonal lift rather than shadows — dark cards ({colors.surface-1} #232a35) lift off the hero canvas ({colors.canvas} #0d1026) through lightness contrast alone. The browser-frame product mockup is the most visually elevated element, but its lift comes from the radial gradient depth field rather than from a drawn shadow. There are 60 shadow occurrences in the capture, all pure black — used as logo glows and gradient overlays rather than card elevation.

Shapes

The radius scale centers on pill-or-small with nothing in between:

  • {rounded.none} 0px — section dividers, full-bleed bands.
  • {rounded.xs} 2px — inline code-fragment corners.
  • {rounded.sm} 4px — the smallest interactive chip surfaces.
  • {rounded.md} 6px — nav links, the text input, and the product mockup tab bar.
  • {rounded.lg} 8px — feature cards and medium surfaces.
  • {rounded.xl} 12px — the browser-frame mockup outer container.
  • {rounded.full} 9999px — the primary "Get Started" CTA pill and badge pills.

There is no 16px or 24px middle tier. The system is binary: small-step rounding for content surfaces, full pill for interactive CTAs and badges.

Components

button-primary — White fill, dark text, full pill {rounded.full}, 8×20px padding, 40px height. "Get Started" is the canonical instance, rendered as a white pill against the dark hero.

button-primary-hover — Background shifts to muted {colors.ink-muted} for the hover state.

button-secondary — Transparent fill, white text, 1px dark hairline {colors.hairline-dark} border, full pill, same dimensions. Used for secondary CTAs like "npm create storybook@latest" in the hero.

top-nav — Transparent over the hero gradient, 56px height, 32px horizontal padding. Houses the Storybook wordmark, product nav (Docs, AI, Addons, Showcase, Blog, Visual Test, Enterprise), GitHub star count, search, and the "Get Started" CTA.

nav-link — Transparent background, white text, {typography.nav-link} (14px / 700), {rounded.md} 6px hover radius, 0×8px padding.

hero-section — Midnight-navy radial gradient canvas, 80×32px padding. Holds the headline, sub-copy, CTA row, stat row (66.41m installs/month, 2282 contributors), and the full-width browser-frame product mockup.

hero-heading — White text at {typography.display-xl} (56px / 700 / 70px line-height). "Build, test & document components."

section-heading — Same {typography.display-xl} token on the dark canvas for section h2s.

body-paragraph — White text at {typography.body-lg} (16px / 400 / 28px). Standard lead copy beneath section headings.

body-paragraph-muted — {colors.ink-secondary} text at {typography.body-md}. Sub-text and secondary feature descriptions.

card-dark — {colors.surface-1} fill, white text, {rounded.lg} 8px, 24px padding. Used in the feature grid below the fold.

text-input — White {colors.ink} background, dark text, 1px {colors.hairline} border, {rounded.md} 6px, 100px right padding (for the submit button inset), 48px height.

badge-pill — Dark surface {colors.surface-1}, white text, {rounded.full} pill, 4×8px padding. Used for the "Introducing MCP for React" announcement banner.

status-dot-error / status-dot-success — Circular dots in {colors.status-error} and {colors.status-success}, full pill. Appear inside the product mockup as component state indicators — not brand decorations.

Do's and Don'ts

Do use the product-UI mockup as the hero's primary visual anchor. The mockup is not a decorative illustration — it is the argument for using the tool. Replacing it with abstract illustration would break the page's editorial logic.

Do hold the hot-pink brand voltage for the logomark only. The design discipline of the system is restraint: the pink is the identity, not the interactive accent. Spreading it to CTAs or card backgrounds defeats the entire "product-as-proof" strategy.

Do use {colors.surface-1} (#232a35) for elevated card surfaces against the hero canvas. The lightness gap between the two dark tones provides all the elevation the system needs — no shadow required.

Do keep display weight at 700 only for the hero h1 and section h2 headings. Nunito Sans at 700 is assertive; applying it to body paragraphs or feature descriptions makes the page feel loud.

Don't add a second typeface for code or monospace content. The marketing surface runs Nunito Sans throughout — even the product mockup's panel labels use it. Adding a mono family would introduce a voice the system doesn't have.

Don't use the status colors ({colors.status-error} #ef4444, {colors.status-warning} #eab308, {colors.status-success} #22c55e) as brand accents. They are component-state indicators that appear inside the product mockup; using them in marketing chrome would conflate tool output with brand identity.

Don't lighten the hero canvas to charcoal or use a flat dark background. The radial gradient — darker at center, navy at edges — is the structural device that makes the product mockup float. A flat dark canvas collapses the depth field.

Don't use the 12–24px mid-range radii that the system skips. The radius scale is binary: small-step (2–8px) for content surfaces or full pill (9999px) for CTAs and badges. Introducing a 16px or 24px radius would soften the distinction between content surfaces and interactive pill elements.

Known Gaps

  • Dark mode / light mode toggle: the captured marketing surface is dark-only. The product itself ships a light-mode canvas, but the marketing page does not expose a theme toggle.
  • Hover and focus states: documented for {component.button-primary-hover} only; the complete interaction matrix (focus rings on nav links, active-state pills, disabled button tints) was not visible on the captured surfaces.
  • Animation and motion: the hero gradient animates subtly on load, and the feature-section alternating layout uses scroll-triggered visibility. Timing, easing, and stagger values are not captured in this static spec.
  • Mobile breakpoint: the marketing site collapses the hero mockup on narrow viewports. The token system represents desktop capture at 1440px width only.
  • Product surfaces: this DESIGN.md captures the marketing site only. The Storybook editor itself (the actual workshop surface) carries a richer token system — light canvas, sidebar trees, control panels, addon tabs — that is not represented here.
  • Addon ecosystem colors: Storybook's addon directory and showcase pages use product-specific accent colors (the Test addon badge, the A11y addon badge) that are not present in the marketing capture.

Developer Tools & IDEs

More systems like this

More DESIGN.md files in Developer Tools & IDEs.

Pricing

Build it with Pro

The DESIGN.md files are free. Pro adds 6,000+ blocks, premium templates and the MCP server, so your AI editor builds in your system for you.

4.9/5 out of 5 · 150+ reviewsfrom 150+ founders and developers.

Billed once a year in USD. Cancel anytime.

Individual

For personal projects & open source

$32instead of $49/mo

$389 billed yearly

  • How many people can use the license.Seats: 1 seat
  • Client work, SaaS products and anything you charge for.Commercial use: Personal & open source only
  • Production-ready React sections: hero, pricing, features, dashboards and more.Pro blocks: 6,000+ blocks
  • Complete multi-page sites you can ship as they are.Templates: All 14 templates
  • React icons from every major library, installable with one command.React icons: 294k+ icons
  • Presets that restyle every block, in light and dark.Themes: All 59 themes
  • Lets your AI editor search, preview and install blocks for you.MCP server: Basic usage
  • Priority requests are answered first.Support: Standard

Team

Most popular

For freelancers, agencies & startups

$66instead of $99/mo

$789 billed yearly · ≈ $13/dev/mo

Everything in Individual, plus

  • How many people can use the license.Seats: Up to 5 seats
  • Client work, SaaS products and anything you charge for.Commercial use: Included
  • Lets your AI editor search, preview and install blocks for you.MCP server: High usage
  • Priority requests are answered first.Support: Priority

Organization

For companies with larger teams

$132instead of $199/mo

$1,589 billed yearly

Everything in Team, plus

  • How many people can use the license.Seats: Unlimited seats
  • Lets your AI editor search, preview and install blocks for you.MCP server: Unlimited usage
  • Secure checkout via Stripe
  • Code lives in your repo
  • Keep what you've shipped if you cancel
  • License terms

Your system, built for you

Every block, template and icon, installed by your AI agent in your design system. The DESIGN.md files stay free.

Get Pro