Pixel-perfect monospaced font for code. No ligatures. No surprises.
Website • Download • Contributing
Most programming fonts chase the same goals: ligatures, multiple weights, smooth curves. Sergamon goes the opposite direction.
Every glyph is hand-crafted on an 8x16 pixel grid — the same constraints as a classic hardware terminal. The result is a font that is sharp, predictable, and honest:
==is two equal signs.->is a hyphen and a greater-than. No ligatures, no magic substitutions — your source code looks exactly as you typed it.- One weight. No bold, no light, no italic. Like a real terminal, every character has the same stroke.
- Confusables are distinct.
0/O/o,1/l/I,`/'/"— each pair is carefully designed to be unambiguous at a glance. - Massive coverage. 3,800+ glyphs spanning Latin, Cyrillic, Greek, Hebrew, Arabic, Thai, Devanagari, Georgian, Armenian, box-drawing, braille, math operators, and more.
Download the latest Sergamon.ttf (desktop) or Sergamon.woff2 (web) from the Releases page.
macOS
- Double-click
Sergamon.ttfand click Install Font in Font Book.
Updating? macOS caches font metadata aggressively. Remove the old font first, then:
sudo atsutil databases -remove sudo killall fontd
Windows
Right-click Sergamon.ttf and select Install (or Install for all users).
Linux
cp Sergamon.ttf ~/.local/share/fonts/
fc-cache -fvVS Code
{
"editor.fontFamily": "'Sergamon', monospace",
"editor.fontSize": 16,
"editor.letterSpacing": 0
}JetBrains IDEs (IntelliJ, WebStorm, PyCharm, etc.)
Settings > Editor > Font — set Font to Sergamon, Size to 16.
Sublime Text
{
"font_face": "Sergamon",
"font_size": 16
}Vim / Neovim (GUI)
set guifont=Sergamon:h16iTerm2
Preferences > Profiles > Text — set Font to Sergamon, Size to 16.
Disable Use bold fonts and Draw bold text in bright colors for best results.
Windows Terminal
{
"profiles": {
"defaults": {
"font": {
"face": "Sergamon",
"size": 16
}
}
}
}Alacritty
[font]
size = 16.0
[font.normal]
family = "Sergamon"@font-face {
font-family: 'Sergamon';
src: url('/fonts/Sergamon.woff2') format('woff2'),
url('/fonts/Sergamon.ttf') format('truetype');
font-display: swap;
}
code, pre {
font-family: 'Sergamon', monospace;
}Or load directly from the project site:
@font-face {
font-family: 'Sergamon';
src: url('https://sgmonda.com/sergamon/fonts/Sergamon.woff2') format('woff2');
font-display: swap;
}Sergamon treats glyph definitions as source code. Each character lives in a plain-text .glyph file — an 8x16 pixel grid that a TypeScript pipeline compiles into vector font files.
# zero (U+0030)
........ . = empty pixel
........ X = filled pixel
........ 8 columns wide
.XXXXX.. 16 rows tall
XX...XX.
XX...XX.
XX..XXX.
XX.XXXX.
XXXX.XX.
XXX..XX.
XX...XX.
XX...XX.
.XXXXX..
........
........
........
.glyph files ──> parse ──> validate ──> optimize ──> vectorize ──> TTF ──> WOFF2
The optimizer merges adjacent filled pixels into larger rectangles before converting to vector paths, keeping the output compact and efficient.
Contributions are welcome — whether refining an existing glyph, adding a new character, or improving the build pipeline. See CONTRIBUTING.md for everything you need: file format, style guidelines, testing workflow, and PR process.
Font files and glyph sources — SIL Open Font License 1.1 Build scripts and site code — MIT License