Skip to content

Obsidian Design System

Obsidian's design system as a DESIGN.md file. Violet #a78bfa on zinc-900 canvas, system-ui stack, 19 colors, 19 components. 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
#a78bfa
Typeface
ui-sans-serif
Shape
Sharp
Base radius
6px
Colors
19
Type tokens
12
Components
19
Spacing values
7

About

About Obsidian DESIGN.md

Curated by Dov Azencot · Updated May 13, 2026 · Source obsidian.md (opens in a new tab)

Obsidian's marketing page reads like the readme for a privacy-first piece of software, not a SaaS landing. The page floor is "#171717" — zinc-900, never pure "#000000" — and headlines like "Sharpen your thinking." sit at 60px weight 600 with -1.2px tracking in the platform system-font stack. There is no custom display family, no web-font request, no atmospheric gradient. The only chromatic voltage is a single violet — "#a78bfa" on the wordmark and link accents, "#8a5cf5" as the lone filled-button background on the "Get Obsidian for macOS" pill. Below the hero, a 2×2 card grid hosts real product captures (vault graph, canvas board, plugin list, sync sheet) framed by 1px hairlines at "#262626". The card-as-screenshot pattern carries the entire page rhythm.

This DESIGN.md packages the spec into one machine-readable file written to the Google Labs format. Inside: 19 colors tokens grouped into a violet brand ramp, a four-step dark surface ladder, structural hairlines, and a window-chrome triad ("#ff5f57", "#febc2e", "#28c840") used on the hero screenshot mockup; 12 typography roles all running ui-sans-serif from a 60px display down to 11px caption; a 6-step rounded scale anchored on 4px with a pill exit; a 7-step spacing scale on a 4px base unit; and 19 components definitions covering the violet macOS-download pill, the secondary ghost link, the feature-card frame, the dark top-nav, the plugin row, the encrypted-sync surface, and the in-card product screenshot frame.

Feed the file to Claude, Cursor, or Copilot and the agent reproduces Obsidian's restraint — system-font stack, single violet, four-step dark ladder, screenshots framed in cards — instead of a generic dark-theme template. Reference the tokens directly: every hex, font, radius, and spacing value is a quoted scalar you can paste into Tailwind config, CSS variables, or a component library. Obsidian is worth studying because it inverts the prevailing convention that personal-knowledge tools must announce themselves with a custom typeface and a gradient mesh; the brand identity is built almost entirely on what is absent.

What makes it distinct

5

  1. System-font sovereigntyevery word on the page rides ui-sans-serif with zero web-font payload, where competitors load Inter or a custom display family
  2. Single violet voltage#a78bfa carries the wordmark and the macOS download pill, with #8a5cf5 as the only filled-button background across the whole page
  3. Zinc-900 canvas with #262626 hairlinesa four-step dark ladder (#171717, #1e1e1e, #262626, #363636) where most dark sites flatten to a single near-black
  4. 4px-dominant corner vocabulary34 occurrences of 4px versus 7 pill instances, anchoring a software-documentation rectangle geometry rather than consumer pill softness
  5. Card-as-screenshot frameevery feature card hosts a real product capture (vault graph, canvas board, mobile sync sheet), so the chrome is a hairline frame around app evidence

obsidian.md

Live at obsidian.md

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

Obsidian's website at obsidian.md

Colors

19 colors

Obsidian's system runs on #a78bfa as its primary voltage, used in 4 of 19 components. Type is set in ui-sans-serif across 12 tokens from 11px to 60px, weights 400–600. Shape language is sharp — components average 4px corner radius, favoring crisp rectangles.

Brand & Accent

Sparing, CTA-only voltage · 3

Surface

Page and card backgrounds · 4

Text

Headlines, body, captions · 6

Borders & Hairlines

Dividers, outlines, rules · 3

Other

Specialty colors · 3

Typography

12 type tokens

Set in ui-sans-serif across 12 tokens, from 11px to 60px, weights 400–600. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.

  • display-xl60px · weight 600 · lh 1 · tracking -1.2pxThe quick brown fox jumps over the lazy dog
  • display-lg36px · weight 400 · lh 1.11 · tracking -0.4pxThe quick brown fox jumps over the lazy dog
  • heading-md24px · weight 600 · lh 1.33 · tracking -0.2pxThe quick brown fox jumps over the lazy dog
  • heading-sm20px · weight 600 · lh 1.4The quick brown fox jumps over the lazy dog
  • subhead20px · weight 500 · lh 1.4The quick brown fox jumps over the lazy dog
  • body-lg16px · weight 400 · lh 1.5The quick brown fox jumps over the lazy dog
  • body-md14px · weight 400 · lh 1.43The quick brown fox jumps over the lazy dog
  • body-sm13px · weight 400 · lh 1.5The quick brown fox jumps over the lazy dog
  • label-md14px · weight 500 · lh 1.43The quick brown fox jumps over the lazy dog
  • button-md16px · weight 500 · lh 1.25The quick brown fox jumps over the lazy dog
  • caption12px · weight 400 · lh 1.33The quick brown fox jumps over the lazy dog
  • micro11px · weight 400 · lh 1.5The quick brown fox jumps over the lazy dog

Layout

Radii and spacing

7 corner radii and 7 spacing values. Shape language: sharp.

Radii

  • none0px
  • xs2px
  • sm4px
  • md6px
  • lg8px
  • xl12px
  • pill9999px

Spacing

  • xxs2px
  • xs4px
  • sm6px
  • md8px
  • base12px
  • lg16px
  • xl24px

Components

19 components

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

  • Button Primary
    button-primaryButton Primary
  • Button Primary Hover
    button-primary-hoverButton Primary Hover
  • Button Primary Pressed
    button-primary-pressedButton Primary Pressed
  • Button Secondary
    button-secondaryButton Secondary
  • Link Accent
    link-accentLink Accent
  • Feature Card
    feature-cardFeature Card
  • Feature Card Title
    feature-card-titleFeature Card Title
  • Hero Screenshot Frame
    hero-screenshot-frameHero Screenshot Frame
  • Window Chrome Bar
    window-chrome-barWindow Chrome Bar
  • Plugin Row
    plugin-rowPlugin Row
  • Toggle On
    toggle-onToggle On
  • Toggle Off
    toggle-offToggle Off
  • Top Nav
    top-navTop Nav
  • Nav Link
    nav-linkNav Link
  • Type here…
    text-inputText Input
  • Vault Row
    vault-rowVault Row
  • Bullet Marker
    bullet-markerBullet Marker
  • Footer Band
    footer-bandFooter Band
  • Graph Node
    graph-nodeGraph Node

In use

The system, in use

Obsidian'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.

FAQ

Obsidian design system FAQ

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

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

Obsidian's marketing page is a dark-canvas software-documentation system that reads as a privacy app's readme rather than a productivity SaaS landing. The page floor is {colors.canvas} ("#171717") — zinc-900, with a faint warm cast and a four-step surface ladder running through {colors.surface-1} ("#1e1e1e"), {colors.surface-2} ("#262626"), and {colors.surface-3} ("#363636") for cards, hairline borders, and the publish-instantly band. Body ink sits at {colors.ink} ("#e5e5e5") with a quiet {colors.ink-muted} ("#b3b3b3") for deks and secondary copy. There is no atmospheric gradient anywhere on the page.

The single chromatic voltage is violet scarcity: {colors.primary} ("#a78bfa") carries the wordmark, the underlined link accents, the keyword color in code samples, and the crystal-mascot fill — appearing 17 times across the page. The macOS-download pill steps one tier deeper to {colors.primary-bold} ("#8a5cf5"), the only filled-button background on the entire page. Pressed lands on {colors.primary-pressed} ("#7c3aed"). Where most note-taking and project-management brands deploy a chromatic accent and a secondary accent and a gradient mesh, Obsidian commits to one violet and one geometry — a pill on macOS, a 4px rectangle on everything else.

The named principle is system-font sovereignty. Every word on the page rides ui-sans-serif, system-ui, -apple-system with zero web-font request. Display headings render at 60px weight 600 with -1.2px tracking in whatever face the operating system supplies — San Francisco on macOS, Segoe UI on Windows, Roboto on Android. The 36px / weight 400 dek immediately under each display line is the brand's signature typographic gesture: a near-display weight at near-body color, used to soften the headline rather than reinforce it.

Page rhythm leans on card-as-screenshot frame. Below the hero, a 2×2 card grid hosts real product captures — the vault knowledge graph, the canvas board, the plugin list, the mobile sync sheet. Each card is {colors.surface-1} filled with a 1px {colors.hairline} border and a 4-8px {rounded.lg} corner; the marketing chrome is a hairline frame around app evidence. There are no illustrations, no stock photography, no decorative iconography.

Key Characteristics:

  • Dark-canvas marketing system — {colors.canvas} ("#171717") zinc-900, never pure black, with a four-step surface ladder.
  • Single violet voltage — {colors.primary} ("#a78bfa") at 17 occurrences, the only chromatic color on the entire page.
  • System-font sovereignty — every text role on ui-sans-serif with zero web-font payload.
  • Display tracking pulls to -1.2px at 60px; body holds at 0.
  • Cards render at {rounded.lg} 8px with 1px {colors.hairline} borders — 4px corners dominate the radius vocabulary.
  • Product screenshots dominate the page. Each card is a hairline frame around an app capture.
  • No atmospheric gradients. No second chromatic color. No custom typeface.

Colors

  • Obsidian Violet (#a78bfa) — frequency 17. Used as text (16), bg (1). Registered under --color-violet-400, --color-accent-400, and --code-value. The brand voltage, reserved for the wordmark, the underlined link accents, and the crystal mascot.
  • Violet Bold (#8a5cf5) — frequency 8. Used as bg (8). The macOS-download pill background and the only filled-button color anywhere on the page. Steps to #7c3aed on press.
  • Violet Pressed (#7c3aed) — frequency 2. Used as bg (2). The deepest pressed-state for the macOS pill; appears only on active button events.
  • Canvas Zinc (#171717) — frequency 4. Used as bg (4). The page floor across every section, holding the entire dark marketing rhythm without an alternating-band pattern.
  • Surface-1 (#1e1e1e) — frequency 4. Used as bg (4). Card and feature-tile fills, one tier lighter than canvas, with hairline borders.
  • Surface-2 (#262626) — frequency 36. Used as text (12), bg (18), border (6). Doubles as the dominant hairline color ({colors.hairline}) and as the lifted top-nav surface fill.
  • Surface-3 (#363636) — frequency 4. Used as border (4). The strongest hairline tier, used on hovered cards and on the encrypted-sync band separator.
  • Ink (#e5e5e5) — frequency 751. Used as text (284), border (467). The workhorse body color, also doubling as a faint hairline inside the embedded mobile-app screenshot.
  • Ink Muted (#b3b3b3) — frequency 124. Used as text (124). The hero dek color and secondary body copy — the "free and lightweight app for your private thoughts" sentence under each display headline.
  • Ink Subtle (#a3a3a3) — frequency 17. Used as text (17). Caption-tier copy on footer rows and feature-card metadata.
  • Hairline Strong (#404040) — frequency 12. Used as bg (1), border (11). The card-divider color on the plugin list and the inset hairline on toggle backgrounds.
  • Hairline Soft (#525252) — frequency 6. Used as bg (3), border (3). Tertiary divider on FAQ rows and the encrypted-sync surface inner border.
  • Ink Deepest (#0f0f0f) — frequency 2. Used as bg (1), gradient (1). The footer floor, one shade deeper than canvas to mark the band transition.
  • Window-chrome Red (#ff5f57) — frequency 1. Used as bg (1). The macOS-style close-window dot inside the hero screenshot mockup.
  • Window-chrome Amber (#febc2e) — frequency 1. Used as bg (1). The minimize dot in the same hero mockup.
  • Window-chrome Green (#28c840) — frequency 1. Used as bg (1). The maximize dot completing the macOS chrome triad.

Typography

Obsidian runs the platform system-font stack across every text role — ui-sans-serif, system-ui, -apple-system, "system-ui", Roboto, Inter, "Helvetica Neue", Arial, "Noto Sans", sans-serif. There is no custom typeface, no Google Fonts request, no web-font payload anywhere in the page. Display headlines render in San Francisco on macOS, Segoe UI on Windows, Roboto on Android — whatever the operating system supplies natively.

The display tier sits at 60px weight 600 with -1.2px tracking; the matching display-lg dek lands at 36px weight 400 with -0.4px tracking — a deliberately large secondary line that absorbs the visual weight of the headline above it. Body copy holds at 16px weight 400 / 1.5 line-height for the primary paragraph and 14px / 1.43 for inside-card body. Captions run 12px / 1.33 and the smallest tier — micro labels and footer fine print — sits at 11px / 1.5. Weight discipline is restrained: 400 carries body, 500 marks links and labels, 600 marks display and section headings. There is no weight 700 anywhere except inside the in-card screenshot mockups.

Layout

The page rides a centered single-column layout capped at roughly 672px for prose blocks and a 2-column grid for feature cards. Section padding lands at 96px top/bottom on the hero and the spark-ideas band, with 48px between dense rows. Card interiors use 24px padding, with 12px inner spacing between metadata rows. The 4px base spacing unit anchors a 4 / 6 / 8 / 12 / 16 / 24 scale — none of the larger tokens you would find on a fintech or marketplace page. Card grids hold a 24px gap between tiles; the feature-card pair on the second band uses a 16px gap to read as one unit.

Elevation & Depth

Obsidian carries hierarchy with surface ladder over shadows. Canvas at {colors.canvas} is the page floor; {colors.surface-1} lifts cards one tier; {colors.surface-2} lifts the top-nav and the encrypted-sync band one tier above that; {colors.surface-3} marks hovered cards. There is no drop shadow on any card in the marketing chrome — every elevation cue is a surface-fill change paired with a 1px hairline border at {colors.hairline} ("#262626"). The only shadows in the system live inside the embedded mobile-app screenshot, where iOS-style elevation is rendered as part of the product capture rather than as marketing chrome.

Shapes

The radius vocabulary is anchored on 4px — {rounded.sm} appears 34 times across the page, more than any other value. {rounded.md} 6px and {rounded.lg} 8px follow at 14 and 19 occurrences; {rounded.xl} 12px lands on hero-screenshot frames and the encrypted-sync surface; {rounded.pill} 9999px is reserved for one place — the violet macOS-download pill in the hero. Cards default to 8px corners; toggles, badges, and the bullet markers next to feature copy use the pill. The 4px-dominant geometry inverts the consumer-SaaS convention of 12-16px rounded cards and reads as software-documentation rather than marketing.

Components

  • button-primary: violet macOS-download pill at {colors.primary-bold} ("#8a5cf5"), {rounded.pill}, 8/16px padding. The only filled button on the page.
  • button-primary-hover / button-primary-pressed: hover lightens to {colors.primary} ("#a78bfa"); pressed deepens to {colors.primary-pressed} ("#7c3aed").
  • button-secondary: ghost violet "More platforms" link at {colors.primary} text on canvas, {rounded.sm}, 8/12px padding.
  • link-accent: inline underlined violet links inside body copy ("thousands of plugins", "Learn more"), {colors.primary} text, no padding, no radius.
  • feature-card: dark zinc-900 card at {colors.surface-1} with a 1px {colors.hairline} border, {rounded.lg} corner, 24px padding. The repeating tile shape across "Links / Graph / Canvas / Plugins" and the encrypted-sync band.
  • feature-card-title: {typography.heading-sm} at 20px weight 600 sitting inside each feature card above the body block.
  • hero-screenshot-frame: dark card holding the "Writing is telepathy" hero capture, 1px {colors.hairline} border, 12px inner padding, 8px corner.
  • window-chrome-bar: the macOS-style window chrome inside the hero screenshot — {colors.surface-2} fill, 32px height, hosting the red/amber/green dots.
  • plugin-row: dark card row with the toggle on the right (Calendar / Kanban / Dataview / Outliner), {colors.surface-1} fill, 12/16px padding, 4px corner.
  • toggle-on / toggle-off: pill-shaped toggle, 20px height, {colors.primary-bold} violet when on and {colors.surface-3} gray when off.
  • top-nav: canvas-color nav bar at 56px height, 12/24px padding, label-md typography, wordmark in violet on the left.
  • nav-link: muted top-nav items ("Download", "Pricing", "Sync", "Publish", "Enterprise") in {colors.ink-muted} body-md.
  • text-input: dark form input on {colors.surface-1} with 1px {colors.hairline-soft} border, 8/12px padding, 4px corner — used on the encrypted-sync waitlist form.
  • vault-row: row showing a vault entry in the encrypted-sync mockup, {colors.surface-1} fill, 12/16px padding, 4px corner.
  • bullet-marker: violet inline pill marker preceding the three sync-feature rows (editing, collaboration, fine-grained control) in the encrypted-sync band.
  • footer-band: deepest-canvas band at the bottom of the page, {colors.ink-deepest} floor, 48/24px padding, caption-tier copy in {colors.ink-subtle}.
  • graph-node: dot in the knowledge-graph visualization inside the "Writing is telepathy" hero card, 8px pill, {colors.ink} fill.

Do's and Don'ts

Do keep {colors.primary-bold} ("#8a5cf5") as the only filled-button background on the page. Adding a second filled button at any chromatic color — green, blue, even a violet hover variant — collapses the page's signal-to-noise ratio.

Do render every text role in ui-sans-serif, system-ui without a web-font fallback. The system-font choice is the brand identity; substituting Inter or a custom face is the loudest change you can make.

Do frame product screenshots in a {colors.surface-1} card with a 1px {colors.hairline} border and a 4-8px corner. The hairline frame is the page's only chrome treatment.

Don't use {colors.surface-2} ("#262626") for card backgrounds — it appears 36 times but 467 of those uses are as borderColor rather than fill. Mistaking it for a surface-1 substitute reads as a 1-tier darker card than the rest of the grid.

Don't reach for {colors.hairline-strong} ("#404040") as a body-text color. It appears as borderColor 11 times and as backgroundColor once — it is a divider, not ink. For body copy use {colors.ink} ("#e5e5e5") or {colors.ink-muted} ("#b3b3b3").

Don't add a second chromatic accent (a blue link, an orange CTA, a teal badge). The page commits to one violet and one geometry. Any second hue reads as theme drift, since the violet is intentionally the only chromatic event in 18,000+ rendered pixels of dark canvas.

Don't use the {rounded.pill} 9999px radius anywhere except the macOS-download pill and the toggle bullet markers. The 4px-dominant geometry is what reads as software-documentation; rounding cards to pills would push the system toward consumer-app softness.

Don't load the Tailwind violet-50, violet-100, or violet-200 tints inside the dark canvas — they appear in the CSS variable table but never paint a surface. Light-tint violet on {colors.canvas} reads as a different theme entirely.

Known Gaps

  • The marketing site is dark-only; light-mode tokens are not captured. The Obsidian desktop and mobile apps both ship a light theme that lives in product surfaces.
  • Hover state is documented for the macOS-download pill; secondary ghost-link hover is observation-based.
  • Animation and transition timings were not extracted; 150-200ms ease is a safe default.
  • The in-app plugin and theme gallery uses a richer multi-color tag palette that is not represented in marketing chrome.
  • Mobile responsive breakpoints are inferred from the captured 1440px page; the mobile composition of the feature-card grid is not separately captured.
  • The window-chrome triad ("#ff5f57", "#febc2e", "#28c840") inside the hero screenshot is part of the macOS UI mockup rather than Obsidian brand tokens; they appear in the spec for fidelity but should not propagate to non-screenshot surfaces.

Productivity & SaaS

More systems like this

More DESIGN.md files in Productivity & SaaS.

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