Sant Fonts
A free editorial catalog of every open-source typeface on the Google Fonts library. 1,938 families, hand-curated pairings, custom-text specimen rendered in the actual face. Built in Christchurch, Aotearoa New Zealand. No accounts, no tracking, no bills.

A catalog that shows the voice, not the name.
Every typeface is rendered live in its own face. Type your own phrase, watch it set. Pairings are hand-curated, one editorial composition at a time. Variable axes load when the family supports them. Copy a CSS @import and ship. Static export, deployed as plain HTML to Vercel free tier.
Google Fonts is a list. You don't see the voice.
The source catalog is comprehensive but quiet. Small previews, generic phrases, no editorial point of view. Picking a typeface from a thumbnail grid is like picking a wine from the label.
We rebuilt the surface. Custom phrases at full display size. Hand-curated pair-of-the-day compositions. Variable axes you can drag. Type, with intent.
Catalog, pair, specimen. Three lenses on the same library.
The Catalog
Filter by sans, serif, mono, display. Live preview rendered in the actual face. Live custom text. Type a phrase, see it set across every face. No login, no rate limit, no tracking.
The Pairings
Every catalog site can list typefaces. Few tell you what to put one beside. The pairings index is editorial. One composition at a time, lead font as the headline, pair as the body. Shuffle for serendipity, filter by role.
The Specimen
One static page per font, generated at build (~1,940 routes). Custom text input, weight slider, variable-axis controls when supported. Copy a CSS @import or grab the CSS class names. That's it, ship.

Light or dark, the palette stays editorial. Bone, ink, terracotta. One accent, used once.
Most catalogs list. This one composes.
Each pairing is its own editorial spread. Display face for the headline, body face for the column. Lead, body, and code blocks are all live, all in the actual typeface. Shuffle for serendipity, or filter by role.
- →Hand-curated, not algorithmic
- →Roles: Display, Body, Code, Accent
- →Headline, paragraph, caption. Three voices on one spread
- →License visibility front and centre (OFL or Apache)


Press /.
Find any typeface.
A keyboard-first search spotlight reads the full catalog with Fuse.js fuzzy match. Names render in their own face inside the dropdown. Even before you click through, you can see what each one looks like.
Indexed in the browser. No server round-trip, no rate limit.
Static at 1,940 routes.
An ingestion script pulls the full Web Fonts Developer API response, normalises into a FontRecord shape, and writes the manifest to public/fonts.json. Hand-curated overrides (designer attribution, editorial blurbs) live in the same script.
Next.js App Router with output: 'export'. One static HTML file per typeface. ~1,940 routes deploy to Vercel free tier as plain HTML and CSS. No server, no API routes, no database.
The Google Fonts CSS API loads dynamically. One <link> per visible family. The catalog uses Tanstack Virtual to keep the grid windowed, so only what's on screen actually loads its face.
No analytics on the public assets, no accounts, no cookies. The whole site is HTML, a slim React bundle, and dynamic Google Fonts links. Open the dev tools. There is nothing to look at.
CLI and MCP. Same trick as Sant Icons.
The catalog is shipped, the pairings are live, the specimen works. Next on the bench: a CLI for the terminal and a Model Context Protocol server so coding assistants can pick a typeface without leaving the editor. Same architecture pattern that worked for icons.
npx santfonts search 'editorial serif'. List, preview, and copy CSS imports from the terminal. Manifest bundled in the package, works offline.
An MCP server giving Claude Code, Cursor, and friends a search and recommend tool over the full catalog. Ask for a pairing, get a CSS import.
Editorial restraint scales.
Voice over volume
Show the typeface in its own voice and it sells itself. Generic Lorem ipsum at thumbnail size doesn't.
Curate where it counts
1,938 fonts is a list. 36 hand-curated pairings is an opinion. The opinion is the value.
Static is the right default
1,940 routes, no backend, no bills. The static export model is the answer for almost any catalog problem.
1,938 typefaces.
One quiet catalog.
Free, no signup, no tracking. Pick a typeface, set your voice.