Introducing Geist Serif

Source: Vercel•

Introducing Geist Serif

Geist Serif is a high-contrast display serif built on the same foundations as Geist Sans, Geist Mono, and Geist Pixel.

Geist started as a monospace typeface for developers, built for the editors and terminals where they spend their day doing their work. From there it grew into Geist Sans for product interfaces, and then into Geist Pixel, which was inspired by the grids of early computer screens.

Today, we're adding a new member to the family: Geist Serif.

Geist Serif is a high-contrast display serif built on the same foundations as Geist Sans, Geist Mono, and Geist Pixel. It has fine, saw-toothed serifs and sharp hairlines, and it was drawn to communicate messages powerfully both in the physical world and on the high-density screens on modern devices.

Copy link to headingSame system, new voice

At Vercel, Geist Sans runs the product. For headlines, though, we wanted a second voice, one that belongs to the same system, instead of a stranger picked from a drop-down menu.

A lot of tech brands have moved away from clean sans-serifs to get some personality back, and many of them borrow from vintage computer ads. Geist Serif takes a different path: toward fashion, editorial design, and magazine headlines. It's our homage to the artists behind Rolling Stone and Harper's Bazaar.

From the beginning, each Geist family has read from a chapter of type history: the Swiss design movement, early terminal and DOS computing, and now editorial print.

Copy link to headingDisplay first

Geist Serif began as a set of sketches by Evil Rabbit, which Andrés Briganti then expanded. 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, we made the first release a display face for headlines, posters, and other large sizes, while work on the full family continued. Print has always struggled to hold fine hairlines and sharp serifs, but today's displays can handle a high level of detail. We wanted the new face to take full advantage of modern screens, so we thinned every downstroke by 50% and tightened the sidebearings to push the contrast as far as it would go.

Each serif has a wedge on one side and a curve on the other, so the proportions are classical and look beautiful in print, but the construction is new and optimized for digital devices.

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. Mark Davis founder & font designer at WORDMARK

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.

Mark Davis founder & font designer at WORDMARK

Copy link to headingFrom the first prototype to today

The first prototype of Geist Serif was shared on April 1, 2026. Here's the same word, Geist, in that prototype, compared with the display drawing shipping today.

Copy link to headingGeist grew teeth

The goal was to honor our original intent and keep the serif closely tied to the sans, even when the letters sit on top of each other. Geist Serif’s stems match Geist Sans, and the two share widths and postures.

The saw-toothed serifs and high contrast give Geist an editorial voice. One phrase kept coming up as each character was drawn: “Geist grew teeth.”

Copy link to headingFour families, one x-height

Geist Serif uses the same cap height and x-height as Geist Sans, so you can drop it into any Geist layout without moving a line. Mix Sans, Mono, Pixel, and Serif in the same sentence and every word looks the same size.

Metric

Geist Sans

Geist Serif

UPM

1000

1000

Cap height

710

710

x-height

530

530

Ascender

710

750

Descender

-150

-200

Copy link to headingFour variants, one axis

Like Geist Pixel, Geist Serif has a variable axis that swaps the shape of every dot in the font, including those on i and j and in punctuation. The axis is called Element Shape (ELSH), and it gives you four variants: Regular with round dots (the default), Square, Triangle (a nod to the Vercel logo), and Heart.

Each variant also ships as its own static file. If you use the variable font, pick a variant with font-variation-settings:

Copy link to headingCrafted by hand

In July the font had 227 glyphs. It now has 894 and covers 352 Latin-script languages, and we worked through more than 52,000 kerning pairs to get the spacing right. Some of the details are tiny. The eye of the g, for example, is tilted exactly 7°.

Copy link to headingSpecs at a glance

Geist Serif ships with:

  • 1 weight (Regular)

1 weight (Regular)

  • 4 variants (Regular, Square, Triangle, Heart)

4 variants (Regular, Square, Triangle, Heart)

  • 894 glyphs

894 glyphs

  • 5 stylistic sets (ss01 to ss05)

5 stylistic sets (ss01 to ss05)

  • 352 supported languages

352 supported languages

Copy link to headingGetting started

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

terminal

npm i geist

Exports and CSS variables:

  • GeistSerif (variable, all shapes): --font-geist-serif

GeistSerif (variable, all shapes): --font-geist-serif

  • GeistSerifRegular: --font-geist-serif-regular

GeistSerifRegular: --font-geist-serif-regular

  • GeistSerifSquare: --font-geist-serif-square

GeistSerifSquare: --font-geist-serif-square

  • GeistSerifTriangle: --font-geist-serif-triangle

GeistSerifTriangle: --font-geist-serif-triangle

  • GeistSerifHeart: --font-geist-serif-heart

GeistSerifHeart: --font-geist-serif-heart

Each one has its own entry point, so you only ship the font file you use. For example, in layout.tsx with GeistSerifRegular:

import { GeistSerifRegular } from 'geist/font/serif/regular';

export default function RootLayout({ children }) {

return (

<html lang="en" className={GeistSerifRegular.variable}>

<body>{children}</body>

</html>

You can also download the font files, test every stylistic set, and inspect each glyph at vercel.com/font.

Copy link to headingWhat’s next

Regular is the first style we’re releasing, and the rest of the family is already in progress. We’re testing future versions while building this one, so this release is just the start.

Copy link to headingWeights 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 we can’t stop looking at.

Copy link to headingToward a text face

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

Copy link to headingItalics, built rule by rule

We’re also developing an italic generated entirely in Python. We slanted existing italics back upright and compared them with their romans. With the angle removed, the remaining differences show up clearly, and we turned them into rules we can test and revise. This italic won’t be the final version, but breaking glyphs in code helps us find the limits faster.

Copy link to headingMore scripts and Google Fonts

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

Copy link to headingOne family

With Geist Sans, Geist Mono, Geist Pixel, and now Geist Serif, the family runs from UI text and code to expressive display type, and all four feel at home together.

Download Geist Serif and start building.

Thank you to everyone who made Geist Serif possible.

None of this would have been possible without an incredible group of people behind the scenes.

Huge thanks to Andrés Briganti for starting this journey with me and drawing the first version that everything else grew from, and to Mark Davis for carrying it across the finish line with obsessive craft, from the expanded glyph set and variable axis to every last kerning pair. Thanks also to Patrick McDonald and Marijana Pavlinić for the poster designs, to Luis Gutierrez Rico for the motion and incredible magic, to Christopher Kindl for shipping the package and rebuilding the landing page down to the smallest details, and to Zahra Jabini for the coordination and technical support that brought it all together. This was a true team effort, and I’m grateful to have built it with all of you.

What this article says