Skip to content

Vite Design System

Vite's marketing design system: APK Protocol display type, soft lavender brand voltage on a purple-tinted near-black canvas, KH Teka Mono for code labels, 8px radius. Tokens for React, Next.js, and AI 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
#b39aff
Typeface
APK Protocol
Shape
Mixed
Base radius
8px
Colors
10
Type tokens
11
Components
13
Spacing values
10

About

About Vite DESIGN.md

Curated by Dov Azencot · Updated May 19, 2026 · Source vitejs.dev (opens in a new tab)

Vite's marketing site announces its personality through a typographic move most build tools skip. The hero headline — "The Build Tool for the Web" — renders in APK Protocol, a custom geometric display sans, at 60px with -3px letter-spacing so tight the letters nearly touch. Behind the type, an isometric 3D render of the Vite logo glows against the purple-tinted near-black canvas. The overall register is: dark, precise, and slightly theatrical — a tool that benchmarks faster than Webpack by orders of magnitude and is not shy about the flex.

The chromatic story is a lavender-on-dark tension. The brand voltage is `--color-brand` / `--color-vite` — a soft, desaturated violet-lavender — wired into 31 CSS custom properties and appearing as the primary button background, the hero name gradient, inline code link color, and search highlight. At #b39aff it is notably more muted than the electric purples that competing tools might deploy. Against the `--color-slate` (#16171d) canvas — which sits a step warmer and more violet than the blue-black Vercel uses — the lavender reads as a signature: quiet voltage, maximum heat. The feature section panels alternate between pure dark prose sections and purple-tinted wide bands with code screenshots, a cadence that keeps the lavender from feeling monotonous.

For React teams adopting Vite's aesthetic, the operative tokens are the canvas color and the typeface split. The near-black floor (#16171d) is distinctive — it shifts every surface toward cooler-warmer purple rather than neutral gray. APK Protocol is proprietary; the closest open substitute is Neue Haas Grotesk or Syne at tight negative tracking. KH Teka Mono for uppercase label caps is the system's most specific move — a mono font used not for code content but for section labels, which is unusual and worth preserving. The 8px radius is the correct default; stay away from the large-pill radii that consumer SaaS favors.

What makes it distinct

5

  1. APK Protocol as proprietary displaya geometric display sans at 60px / -3px tracking for the hero; no other build tool uses a custom display typeface
  2. Soft lavender brand voltagethe primary brand color (#b39aff) is a desaturated violet-lavender wired to 31 CSS custom properties including --vp-c-brand, --color-brand, --color-vite; unusually muted for a framework with lightning in its logo
  3. Purple-tinted near-black canvas#16171d as the page floor, one shade more violet than the blue-black that Vercel and Linear use; the entire system shifts color temperature toward the purple spectrum
  4. Three-family type stackAPK Protocol (display), Inter (body and UI), KH Teka Mono (code labels and uppercase caps); each scoped to a distinct surface type
  5. 8px dominant radiusa mid-tier rounding at 15 occurrences, with 4px for tight UI; avoids both the large-pill softness and the sharp zero-radius extremes

vitejs.dev

Live at vitejs.dev

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

Vite's website at vitejs.dev

Colors

10 colors

Vite's system runs on #b39aff as its primary voltage, used in 1 of 13 components. Type is set in APK Protocol across 11 tokens from 12px to 60px, weights 400–500. Shape language is mixed across 13 components, blending pills, soft rounds, and squarer corners.

Brand & Accent

Sparing, CTA-only voltage · 1

Surface

Page and card backgrounds · 3

Text

Headlines, body, captions · 3

Borders & Hairlines

Dividers, outlines, rules · 2

Other

Specialty colors · 1

Typography

11 type tokens

Set in APK Protocol across 11 tokens, from 12px to 60px, weights 400–500. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.

  • display-xl60px · weight 500 · lh 67.2px · tracking -3pxThe quick brown fox jumps over the lazy dog
  • display-lg48px · weight 500 · lh 48px · tracking -1.2pxThe quick brown fox jumps over the lazy dog
  • display-md40px · weight 500 · lh 53.3px · tracking -1pxThe quick brown fox jumps over the lazy dog
  • heading-lg24px · weight 500 · lh 28pxThe quick brown fox jumps over the lazy dog
  • heading-md20px · weight 500 · lh 28pxThe quick brown fox jumps over the lazy dog
  • body-lg18px · 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
  • label-md16px · weight 500 · lh 22.4pxThe quick brown fox jumps over the lazy dog
  • mono-label12px · weight 400 · lh 16px · tracking 0.3pxThe quick brown fox jumps over the lazy dog
  • mono-md14px · weight 400 · lh 20pxThe quick brown fox jumps over the lazy dog

Layout

Radii and spacing

3 corner radii and 10 spacing values. Shape language: mixed.

Radii

  • none0px
  • sm4px
  • md8px

Spacing

  • xs4px
  • sm8px
  • md12px
  • base16px
  • lg20px
  • xl24px
  • 2xl32px
  • 3xl40px
  • 4xl64px
  • 5xl80px

Components

13 components

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

  • Button Primary
    button-primaryButton Primary
  • Button Secondary
    button-secondaryButton Secondary
  • Top Nav
    top-navTop Nav
  • Nav Link
    nav-linkNav Link
  • Hero Heading
    hero-headingHero Heading
  • Section Heading
    section-headingSection Heading
  • Body Paragraph
    body-paragraphBody Paragraph
  • Body Paragraph Muted
    body-paragraph-mutedBody Paragraph Muted
  • Card
    cardCard
  • Type here…
    text-inputText Input
  • Code Block
    code-blockCode Block
  • Section Label
    section-labelSection Label
  • Footer
    footerFooter

In use

The system, in use

Vite'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.
src index.ts utils.tspackage.jsonREADME.md
index.ts · 12 lines
import { build } from "./build"

export async function main() {
  const result = await build()
  console.log("done", result)
}
Run
Code editorFile tree + editor with syntax-colored snippet.

FAQ

Vite design system FAQ

Common questions about Vite'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 Vite 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 Vite.

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

Vite's marketing site stakes out the darkest and most theatrically branded position in the build-tool category. Speed as Aesthetic. The 60px APK Protocol headline with -3px letter-spacing, the isometric 3D logo glowing faint lavender against the purple-tinted near-black canvas, the tightly tracked mono labels — every design decision translates "faster than everything" into a visual register. Where Webpack reads like documentation, Parcel reads like a side project, and esbuild has no marketing site at all, Vite presents itself as the category's designed product.

The three-family type architecture is the technical signature. APK Protocol handles the display tier with custom negative tracking; Inter handles all prose and UI labels; KH Teka Mono handles section category labels in uppercase small-caps — an unusual application of monospace that gives the feature sections an engineering-log precision. No other build tool in the measured space uses a custom display typeface with this degree of tracking specificity.

Key Characteristics:

  • APK Protocol display type at 60px / -3px tracking — the tightest tracked headline in the developer tools category.
  • Soft lavender brand voltage ({colors.primary} — wired as --color-brand, --color-vite) against a purple-tinted near-black canvas.
  • {colors.canvas} is #16171d — not neutral near-black but violet-shifted; every surface gets the temperature cast.
  • KH Teka Mono used for uppercase section labels (not just code blocks) — an editorial application of mono type in a marketing context.
  • 8px dominant radius for cards and inputs; 4px for tighter chips; no pill radius anywhere.
  • White text ({colors.ink}) as the near-universal foreground; muted gray ({colors.ink-muted}) for secondary prose.
  • Feature sections alternate between pure dark text bands and purple-tinted accent-strip panels.
  • Flat elevation: cards use surface color contrast against the canvas rather than shadows.

Colors

Brand

  • Primary ({colors.primary} — #b39aff): frequency 6. Used as border (3), text (3). The soft lavender brand voltage wired to --color-brand, --color-vite, --vp-c-brand-1, --vp-home-hero-name-color. Appears in hero name gradient, inline code links, and search highlights. Desaturated by design — full saturation would read as neon on the dark canvas.
  • Secondary ({colors.secondary} — #370a7f): frequency 3. Used as background (3). Deep purple for gradient node backgrounds behind feature panels.

Text

  • Ink ({colors.ink} — #ffffff): frequency 553. Used as text (303), border (246), background (4). The dominant foreground across every tier; pure white on the near-black canvas.
  • Ink Muted ({colors.ink-muted} — #98989f): frequency 40. Used as text (20), background (1), border (19). Secondary prose color for body paragraphs and code block annotations.
  • Ink Faint ({colors.ink-faint} — #867e8e): frequency 75. Used as text (38), border (37). Muted violet-gray for section label text and lower-hierarchy prose.

Canvas & Surface

  • Canvas ({colors.canvas} — #16171d): frequency 11. Used as background (9). The page floor — a violet-shifted near-black, wired as --color-primary, --vp-c-bg, and --vp-nav-bg-color.
  • Surface-1 ({colors.surface-1} — #14121a): frequency 11. Used as background (9). Slightly darker than canvas; code blocks, the sidebar, nav and search backgrounds. Wired as --color-slate, --vp-c-bg-elv.
  • Surface-2 ({colors.surface-2} — #3b3440): frequency 57. Used as border (57). Secondary elevated surface for alt buttons and hover states. Wired as --color-nickel, --vp-button-alt-bg.

Hairlines

  • Hairline ({colors.hairline} — #3b3440): frequency 57 (border). The dominant border tone, a deep purple-gray.
  • Hairline Inner ({colors.hairline-inner} — #2e2e32): frequency 1. Used as border (1). Tighter divider for code tabs and sidebar borders; wired as --vp-c-divider.

Typography

Font Families

Three dedicated families, each with a distinct role:

APK Protocol — custom geometric display sans. Used exclusively for headings (h1, h2, h3, h5, h6) with aggressive negative tracking at the large sizes (-3px at 60px, -1.2px at 48px, -1px at 40px).

Inter — open-source neutral grotesque. Used for all body copy, nav links, button text, form labels. Falls back to sans-serif. The stable, high-legibility reading voice.

KH Teka Mono — custom monospace. Used for two distinct purposes: (1) code annotation spans in the live code examples, and (2) section category labels in uppercase at 12px with 0.3px letter-spacing. The second use is rare and signals brand personality.

Hierarchy

TokenSizeWeightLine HeightTrackingUse
{typography.display-xl}60px50067.2px-3pxHero h1
{typography.display-lg}48px50048px-1.2pxSection h2
{typography.display-md}40px50053.3px-1pxSub-section h3
{typography.heading-lg}24px50028px0h5 feature titles
{typography.heading-md}20px50028px0h6 minor titles
{typography.body-lg}18px40028px0Primary prose
{typography.body-md}16px40024px0UI labels, nav
{typography.body-sm}14px40020px0Secondary prose
{typography.label-md}16px50022.4px0Bold nav links
{typography.mono-label}12px40016px0.3pxUppercase section labels
{typography.mono-md}14px40020px0Code content

Substitutes

APK Protocol: substitute Neue Haas Grotesk Display or Syne, applying manual tracking of -0.05em at the 48-60px sizes. KH Teka Mono: substitute JetBrains Mono or IBM Plex Mono; apply the same uppercase transformation with letter-spacing 0.3px for section labels.

Layout

Spacing System

  • Base unit: 4px.
  • Section padding (vertical): 80px top and bottom for major sections; 112px for the hero band.
  • Card padding: 28px vertical / 32px horizontal ({spacing.2xl} × {spacing.3xl}).
  • Nav height: 82px, declared as --vp-nav-height.
  • Layout max-width: 90rem (~1440px), declared as --vp-layout-max-width.

Grid & Container

  • Hero: full-bleed dark canvas with the 3D Vite logo centered right and the headline + CTA stack left-aligned.
  • Sponsor strip: horizontal scrolling logos (Nuxt, Svelte, Astro, Storybook, Nx, Cloudflare, Shopify, etc.) in white monochrome.
  • Feature panels: alternating two-column layouts with code screenshots in dark surface tiles.
  • Quote/testimonial row: single-column quotes from framework authors (Ryan Carniato, Fred K. Schott, Sebastien Chopin).
  • Framework adoption row: logos of frameworks built on Vite at page bottom.

Rhythm

The page alternates between full-width dark text-and-prose bands ("Redefining developer experience," "A shared foundation to build upon") and narrower two-column feature panels with code screenshots. No band uses a tinted background — all editorial sections sit on the same canvas color. Accent strips use the secondary purple (#370a7f) behind specific feature code panels.

Elevation

Shadow-free. The dark canvas makes traditional drop shadows invisible — the system uses surface color contrast alone. {colors.surface-1} (#14121a) is slightly darker than {colors.canvas} (#16171d), so code blocks and the sidebar recede slightly rather than lifting. This is a reversed elevation model: instead of cards floating above the floor, code panels sink below it. Cards ({colors.surface-1}) at 28-32px padding sit on canvas, distinguished by surface contrast alone. The CSS shadow variables (--vp-shadow-1 through --vp-shadow-4) are declared but their oklch contrast against the near-black canvas is minimal.

Shapes

The radius scale is minimal and utilitarian:

  • {rounded.none} 0px — hero text, editorial prose sections, most layout containers.
  • {rounded.sm} 4px — code block corners, compact badge chips, inner elements (10 occurrences).
  • {rounded.md} 8px — cards, search input, primary buttons, feature panels (15 occurrences — the dominant tier).

There is no 12px, 16px, or 24px tier. No pill. The system stays deliberately understated on corners to keep the engineering-grade signal intact.

Components

button-primary — Soft lavender {colors.primary} fill, dark canvas text ({colors.canvas}), {rounded.md} 8px radius, 8-16px padding. The search button on the nav is captured here; the hero CTA "Get Started" uses the same treatment.

button-secondary — {colors.surface-2} fill, white text, 8px radius. Used for the "Why Vite?" secondary CTA in the hero.

top-nav — Canvas (#16171d) fill, 82px height, 20-28px padding. Houses the Vite wordmark, nav links (Guide, Config, Plugins, Resources, Team, Blog), GitHub icon, and search button.

nav-link — Transparent, white text, APK Protocol 16px / weight 400, 8-12px padding. No hover background captured in the measured surface.

hero-heading — White text, APK Protocol 60px / weight 500, -3px letter-spacing. "The Build Tool for the Web."

section-heading — White text, APK Protocol 48px / weight 500, -1.2px tracking. "Redefining developer experience," "A shared foundation to build upon."

body-paragraph — White text, Inter 18px / weight 400. Hero sub-copy and feature prose.

body-paragraph-muted — Ink-muted (#98989f) text, Inter 16px / weight 400. Secondary prose in feature descriptions.

card — Surface-1 fill, white text, Inter 16px, 8px radius, 28-32px padding. Feature section cards and quote panels.

text-input — Surface-1 fill, ink-muted text, Inter 14px, 8px radius. The search input in the nav.

code-block — Surface-1 fill, white text, KH Teka Mono 14px, 4px radius, 20px padding. Feature code screenshots and inline snippets.

section-label — Ink-faint (#867e8e) text, KH Teka Mono 12px uppercase with 0.3px spacing. Used for category labels above feature panels like "PLUGIN SYSTEM" and "FULLY TYPED API."

footer — Surface-1 fill, ink-muted text, Inter 14px, 40-32px padding.

Do's and Don'ts

Do apply aggressive negative tracking to APK Protocol at large sizes. The -3px tracking on the 60px h1 is not accidental — it defines the tight, high-precision character of the display tier. At 60px without tracking, the headline reads as generic. The tracking is the brand.

Do use {colors.primary} (the soft lavender) at low frequency. It appears in 6 measured uses — the hero name gradient, inline code link text, and search highlight. Deploying it on card backgrounds or section fills would make it feel like a generic purple brand instead of a restrained voltage.

Do use KH Teka Mono (or its substitute) for uppercase section category labels. The application of mono type to non-code marketing labels is the system's most specific and unusual design move. It signals "this tool understands the terminal" without requiring you to put terminal UI on the marketing page.

Do keep the canvas at #16171d. The violet shift is the system's temperature — cooler than neutral, warmer than true black. Changing it to #000000 loses the amethyst warmth; changing it to a Catppuccin-dark near-black or a deeper violet-black makes the page feel like a theme instead of a product.

Don't add a pill radius. The system tops out at 8px ({rounded.md}). The decision to avoid capsule-shaped buttons distinguishes Vite from SolidJS (24px pill) and consumer products generally — it signals utility, not consumer-friendly softness.

Don't use the brand lavender as a background fill for sections. The {colors.primary} (#b39aff) reads correctly as a text accent and link color on dark; as a section fill it turns into a lavender gradient that reads as decorative rather than functional.

Don't introduce a warm-toned accent alongside the lavender. The entire palette is cool-purple-shifted — the canvas, the hairlines, the brand. Introducing amber, orange, or green would break the single-temperature identity and make the page look like a generic multi-color SaaS.

Don't use Inter for headings. APK Protocol is the display voice; Inter is the reading voice. Swapping them — even temporarily in a prototype — collapses the three-family tension that makes the page feel engineered rather than assembled.

Known Gaps

  • Brand CTA button: the extracted primary button is the nav search control, not the hero "Get Started" CTA; the hero button tokens are inferred from CSS variables rather than a direct measurement.
  • Hero gradient: the #370a7f accent strip backgrounds in feature panels suggest gradient values, but exact direction and stop positions are not captured.
  • Logo glow effect: the Vite 3D logo above the fold appears to have a faint lavender glow/bloom; the glow radius, opacity, and animation timing are not in the extracted tokens.
  • Light mode: Vite docs ship a light mode (white canvas, dark ink, lavender accent), but the marketing homepage is dark-only and that is what this file captures.
  • Scroll animation: feature cards appear to animate in on scroll; timing and easing curves are not captured.
  • Sponsor logos: the sponsor strip renders logos in white monochrome at varying sizes; the exact opacity and sizing rules are not extracted.
  • Plugin ecosystem pages: the plugins directory at vitejs.dev/plugins uses a slightly distinct layout system not covered here.

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