Geist Serif

OFL-1.1 | Updated: Nov 2026
Geist Serif font preview

About Geist Serif

Classification
serif
Weights
Variable (100-900)
Features
Variable
SIL Open Font License 1.1

Free to use, modify, and distribute. Can be used commercially without attribution.

What's allowed?
  • ✓ Client work
  • ✓ SaaS / Web apps
  • ✓ YouTube / Video
  • ✓ Sell products
  • ✓ Print materials

Note: Derivative fonts must use the same license.

Full license guide →
Get Geist Serif Free ↗

Geist Serif is a high-contrast display serif from Vercel, released on 30 October 2026 as the fourth member of the Geist family alongside Geist Sans, Geist Mono and Geist Pixel. It is open source under the SIL Open Font License 1.1 and is distributed from the vercel/geist-font repository and the geist npm package (version 1.9.0).

History and Design

Vercel describes Geist Serif as a display face built on the same foundations as Geist Sans. It began as sketches by Evil Rabbit, which Andrés Briganti expanded, and Mark Davis then took over the drawings. The README credits Briganti and Davis as collaborators. The first release is deliberately display-only; Vercel's launch post says the full family, with more weights, is still in progress.

The signature is the serif: fine and saw-toothed, with a wedge on one side and a curve on the other, on sharp hairlines. Vercel thinned every downstroke by 50% and tightened the sidebearings to push the contrast. The stems match Geist Sans, and so do the cap height (710 units) and the x-height (530 units), so Geist Serif can replace Geist Sans in a layout without moving a line.

There is one weight (Regular, 400) and no italic. That weight comes in four variants of the same letterforms: Regular with round dots, Square, Triangle and Heart. They change the shape of every dot, including those on the i and j and in punctuation. In the variable font the variants are positions on one Element Shape axis, ELSH, from 0 to 100 (Regular 0, Square 25, Triangle 50, Heart 100); each variant also ships as its own static file. Vercel calls Regular and Square the primary variants and Triangle and Heart more decorative.

Language Support

Vercel reports 352 Latin-script languages. We measured the shipped font: 459 mapped codepoints, all of Basic Latin except the caret (^), 83 of the 96 Latin-1 Supplement characters, 113 of 128 in Latin Extended-A, and every Vietnamese letter in Latin Extended Additional. Several common symbols are missing from the cmap, including £, ¢, ± and ½. There is currently no Cyrillic and no Greek: none of the 256 Cyrillic codepoints and none of the 144 Greek ones are present. Cyrillic is on Vercel's roadmap, so check the repository again before committing a Cyrillic project to it.

Best Use Cases

Geist Serif is built for large text:

  • Headlines and hero text: sizes where the hairlines and sawtooth serifs stay visible
  • Editorial and fashion layouts: Vercel names Rolling Stone and Harper's Bazaar as its reference points
  • Brand and marketing pages that already use Geist Sans for the interface

Usage Tips

With a single weight, hierarchy has to come from size and spacing, not bold. The familiar pairing is Geist Sans for body copy and interface text and Geist Mono for code, with Geist Serif on top. Geist Pixel is the other display voice in the family; use it sparingly next to the serif.

In a Next.js project, install geist and import GeistSerif from geist/font/serif/variable for the variable font (CSS variable --font-geist-serif), or import one variant from geist/font/serif/regular, square, triangle or heart. Other projects can self-host the WOFF2 files that ship in the package. Geist Serif is not on Google Fonts yet.

Avoid small sizes and long body text, where hairline serifs break up. If you need a serif that keeps working at text sizes or in Cyrillic, look elsewhere.

Free Alternatives with a Similar Look

We measured the shipped Geist Serif Regular against free serifs in this catalogue, using the font files in the google/fonts repository. Geist Serif has an x-height of 0.53 em and a cap height of 0.71 em; the hairline across the top of its lowercase o is about 0.03 em thick. None of the options below is a close drawing match, since no other free serif has Geist Serif's saw-toothed serifs, but they share its high-contrast display job.

  • Playfair Display is the closest in proportion: x-height 0.515 em, cap height 0.708 em, and an average lowercase advance of 0.51 em against 0.52 em for Geist Serif. It adds Cyrillic, an italic and weights from 400 to 900.
  • Bodoni Moda has thinner hairlines (about 0.02 em) but a smaller x-height of 0.46 em, so it sets more delicately at the same point size.
  • Instrument Serif matches the vertical proportions (x-height 0.51 em, cap height 0.72 em) but is much narrower, with an average lowercase advance of 0.39 em. It has an italic, but no Cyrillic or Greek.
  • Libre Caslon Display has the finest hairlines of the four (about 0.01 em) in a lighter, more traditional shape, with a small x-height of 0.42 em.

For something heavier, DM Serif Display (lowercase o stem about 0.15 em) and Libre Bodoni (about 0.13 em at Regular, up to Bold) have thicker strokes than Geist Serif's single weight (about 0.10 em). For its siblings, see Geist, Geist Mono and Geist Pixel.

Is Geist Serif on Google Fonts?

No, Geist Serif is not on Google Fonts. It is available from GitHub ↗

Free Twins: one premium font and its best free lookalikes, every Thursday.

Get the free font substitution kit now

Confirm by email and the kit is yours.

We'll email you a link to confirm. Unsubscribe in one click. No spam, no selling your address. Privacy

Variable Font Axes

Geist Serif is a variable font with 1 axis you can fine-tune.

Axis Min Default Max
ELSH 0 0 100

How to Use Geist Serif

Copy these code snippets to quickly add Geist Serif to your project.

Quick Start

CSS code for Geist Serif

/* Download from: https://github.com/vercel/geist-font */
@font-face {
  font-family: "Geist Serif";
  src: url('/fonts/geist-serif.woff2') format('woff2');
  font-display: swap;
}