UI.MD

Search documentation

Search for components, guides, and tokens

Typography

Geist Sans for UI text, Geist Mono for code. A custom type scale from 3xs to jumbo with strict tracking rules for precise typographic control.

Type scale

12 sizes from 3xs (10px) to jumbo (45px). Finer granularity than Tailwind defaults below base.

3xs

The quick brown fox

leading13.75px (snug)

10px
2xs

The quick brown fox

leading15.13px (snug)

11px
1xs

The quick brown fox

leading16.5px (snug)

12px
xs

The quick brown fox

leading19.5px (normal)

13px
sm

The quick brown fox

leading21px (normal)

14px
base

The quick brown fox

leading24px (normal)

16px
lg

The quick brown fox

leading27px (normal)

18px
xl

The quick brown fox

leading27.5px (snug)

20px
2xl

The quick brown fox

leading33px (snug)

24px
3xl

The quick brown fox

leading38.5px (snug)

28px
display

The quick brown fox

leading43.92px (1.22)

36px
jumbo

The quick brown fox

leading48.15px (1.07)

45px

Font families

Two families: one for interface, one for code.

Geist Sansfont-sans

Components

The primary interface font. Clean, neutral, and readable from micro labels to display headings.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789

Geist Monofont-mono

npx shadcn add

Code blocks, terminal commands, data labels, and technical values.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789

Font weights

Three weight levels, from light body text to heading emphasis.

Regular

Light or secondary text400

Medium

Body copy, base text500

Semibold

Headings, labels, emphasis600

Heading defaults

Recommended heading styles. Hierarchy comes from size; weight stays at semibold throughout.

h1

Page Title

28px
h2

Section Heading

20px
h3

Subsection

18px
h4

Label / Overline

12px

Line height

Four levels from tight display text to comfortable long-form reading.

leading-tight

Typography is the craft of endowing human language with a durable visual form. Good typography is measured by how well it reinforces the meaning of the text, not by how much attention it draws to itself. The best typography is invisible. It serves the reader without being noticed.

1.25
leading-snug

Typography is the craft of endowing human language with a durable visual form. Good typography is measured by how well it reinforces the meaning of the text, not by how much attention it draws to itself. The best typography is invisible. It serves the reader without being noticed.

1.375
leading-normal

Typography is the craft of endowing human language with a durable visual form. Good typography is measured by how well it reinforces the meaning of the text, not by how much attention it draws to itself. The best typography is invisible. It serves the reader without being noticed.

1.5
leading-reading

Typography is the craft of endowing human language with a durable visual form. Good typography is measured by how well it reinforces the meaning of the text, not by how much attention it draws to itself. The best typography is invisible. It serves the reader without being noticed.

1.625

Letter spacing

Tighten display headings, loosen uppercase labels. Body text rides the font's default metrics.

tracking-tightDisplay headings (2xl and up)-0.025em
tracking-wideUppercase labels, overlines0.08em (8%)

Composition

How the type tokens combine in real UI patterns.

Page Header

A concise description that explains what this page is about and what the user can do here.

Card Header

Supporting text that provides additional context below the title.

Section Title

Section body text at the default size with normal line height for comfortable reading.

Tertiary info like a timestamp or metadata

OVERLINE LABEL

Content beneath an overline label, often in a sidebar or settings panel.

Long-form prose

A full article composition: how headings, body, lists, links, and code read together.

Design System

Typography is the voice of the interface

Good type is invisible. It serves the reader without asking for attention. This is how the system composes at reading length.

Matt Downey·8 min read·April 2026

Every interface is a sequence of typographic decisions. Size, weight, tracking, and rhythm do most of the work before color or layout ever get a turn. A system that gets type right feels calm; a system that gets it wrong feels noisy no matter how many other details are polished.

The scale here spans twelve sizes, from text-3xs for dense metadata up to text-jumbo for marketing moments. Most of your UI will live between text-xs and text-lg.

Hierarchy, not decoration

Headings exist to help the eye skim, not to announce importance. Use them sparingly, and let weight and size carry the structure. When every heading shouts, none of them do.

A few rules worth internalizing:

  • Never skip levels: an h2 follows an h1, not an h3.
  • Keep measure tight: aim for 60 to 75 characters per line for body copy.
  • Trust the scale: if a size doesn’t exist in the system, extend the scale rather than reach for an arbitrary value.

A typical workflow

When composing a new page, start from the outside in:

  1. Pick the page-level heading size first: this anchors everything else.
  2. Set the body size and line height to match the reading context.
  3. Fill in supporting sizes last: overlines, captions, metadata.

For inline emphasis, prefer semantic weight over italics. Links should feel like links: we use underlined accent color so they read clearly in both paragraphs and lists.

Typography has one plain duty before it and that is to convey information in writing.
Emil Ruder

Code in prose

Inline tokens like font-semibold or leading-reading sit comfortably mid-sentence. Longer examples get their own block:

export function Button({ children }: { children: React.ReactNode }) {
  return (
    <button className="h-8 px-4 rounded-lg bg-accent text-accent-foreground">
      {children}
    </button>
  )
}

The body font is Geist Sans and code uses Geist Mono. Both are variable fonts, so weights blend cleanly across the whole scale.


This specimen is itself rendered with the system’s tokens: no custom typography CSS. If a line looks off here, it’ll look off everywhere.