Geist has grown from a monospace face for editors and terminals into Geist Sans for product interfaces and Geist Pixel, which drew on the grids of early computer screens. The newest family member is Geist Serif, a high-contrast display serif built on the same foundations as the other three.

Geist Serif posters

Its serifs are fine and saw-toothed, its hairlines sharp. It was drawn for headlines that must land forcefully, whether printed in the physical world or set on the high-density displays of current devices.

Geist Serif posters

A second voice inside the system

Geist Sans carries the product at Vercel, but headlines called for something else: a second voice belonging to the same system rather than a stranger from a font drop-down. Many tech brands have traded clean sans-serifs for personality borrowed from vintage computer ads. Geist Serif takes another direction — fashion, editorial design, magazine headlines — as an homage to the artists behind Rolling Stone and Harper's Bazaar. Each Geist family reads from a chapter of type history: the Swiss design movement, early terminal and DOS computing, and now editorial print.

Drawings, then a display face

The face began as sketches by Evil Rabbit, expanded by Andrés Briganti; the first letters already showed an expressive serif in the spirit of typefaces like Victor Serif and Stanley. When Mark Davis took over the drawings, the decision was to ship a display face for headlines, posters and other large sizes first, and continue the full family in parallel. Fine hairlines and sharp serifs have always been hard for print to hold, but modern displays tolerate a high level of detail. Every downstroke was thinned by 50% and sidebearings tightened, pushing contrast as far as it would go. Each serif carries a wedge on one side and a curve on the other: classical proportions that look right in print, with a new construction tuned for digital devices.

Original Geist Serif drawings

"We created something that could only be made for today. Not overly blocky for screens from a decade ago, not filled with mechanical compromises for physical ink. Just serifs at perfect points."

Original Geist Serif drawingsMark Davis, founder & font designer at WORDMARK

The first prototype was shared on April 1, 2026. Comparing that prototype's rendering of the word "Geist" with the display drawing shipping today shows how far the shapes traveled.

Original prototype shown as dotted lines

Geist grew teeth

Even with letters overlapping, the serif had to stay tied to the sans. Geist Serif's stems match Geist Sans, and the two share widths and postures. The saw-toothed serifs and high contrast supply the editorial voice; one phrase recurred as each character was drawn: "Geist grew teeth." Cap height and x-height are identical to Geist Sans as well, so the serif drops into any Geist layout without moving a line. Mix Sans, Mono, Pixel and Serif in one sentence and every word still reads at the same size.

Original prototype shown as dotted lines

The Element Shape axis

As with Geist Pixel, a variable axis changes the shape of every dot in the font — those on i and j included, plus punctuation. The axis is called Element Shape (ELSH) and offers four variants: Regular with round dots (the default), Square, Triangle (a nod to the Vercel logo) and Heart. Each also ships as a static file; with the variable font, select a variant through font-variation-settings.

Counts and details

In July the font had 227 glyphs; it now has 894 and covers 352 Latin-script languages, with more than 52,000 kerning pairs worked through for correct spacing. Some details are tiny — the eye of the g, for instance, tilts exactly 7°.

Geist Serif ships with:

  • 1 weight (Regular)
  • 4 variants (Regular, Square, Triangle, Heart)
  • 894 glyphs
  • 5 stylistic sets (ss01 to ss05)
  • 352 supported languages

Using it

Geist Serif ships in the same package as the rest of the family:

Metric

Geist Sans

Geist Serif

UPM

1000

1000

Cap height

710

710

x-height

530

530

Ascender

710

750

Descender

-150

-200

Exports and their CSS variables:

  • GeistSerif (variable, all shapes): --font-geist-serif
  • GeistSerifRegular: --font-geist-serif-regular
  • GeistSerifSquare: --font-geist-serif-square
  • GeistSerifTriangle: --font-geist-serif-triangle
  • GeistSerifHeart: --font-geist-serif-heart

Every export has its own entry point, so only the font file you use gets shipped. In layout.tsx, for example, with GeistSerifRegular:

npm i geist

The font files can be downloaded, and every stylistic set and glyph inspected, at vercel.com/font.

Where the family goes next

Regular is the first style out; the rest of the family is already in progress, tested while this release was built.

Weights from Thin to Black

The variable font will range from Thin (100) to Black (900). In this week's proofs, the g in Black is the letter the team can't stop looking at.

Toward a text face

A foundry tool built to explore a text version measures strokes, including where they meet, and thickens the display outlines. It edits outlines directly, so real words can be set to see which strokes need more weight.

Italics, built rule by rule

An italic is being generated entirely in Python. Existing italics were slanted back upright and compared with their romans; with the angle removed, the remaining differences stand out, and those observations became rules that can be tested and revised. This italic won't be the final version, but breaking glyphs in code finds the limits faster.

More scripts, and Google Fonts

Cyrillic support is planned to match Geist Sans and Geist Mono, and Geist Serif will arrive on Google Fonts after launch.

With Geist Sans, Geist Mono, Geist Pixel and now Geist Serif, one family spans UI text, code and expressive display type, and all four feel at home together.