JetBrains Mono, Fira Code and Cascadia Code are all about 0.6 em wide per character. Iosevka is 0.5 em. For me that one number settles most of the "best coding font in 2026" argument: at the same font size, Iosevka gives you 20% more columns. At 14px in a 1000px pane that's about 142 columns instead of 119, which is the difference between a side-by-side diff that fits and one that wraps.
Iosevka made the HN front page again this week (723 points), and the thread went the usual way: half the people calling it the best font they've used, the other half calling it unreadable. I pulled the real numbers from each font's source files, so below you get the specs side by side, copy-paste VS Code and terminal settings, and a custom Iosevka build that fixes the parts people complain about.
Iosevka vs JetBrains Mono vs Fira Code vs Cascadia Code: the specs
I went to each font's source files instead of trusting review sites, because the review sites disagree with each other. The advance width is the glyph width divided by units per em:
- Iosevka:
[widths.Normal] shape = 500in build-plans.toml, measured in 1/1000 em - JetBrains Mono:
unitsPerEm = 1000andwidth = 600on almost every glyph in JetBrainsMono.glyphs - Fira Code:
unitsPerEm = 2000,width = 1200in FiraCode.glyphs - Cascadia Code:
unitsPerEm2048,zeroadvance 1200 in the Regular UFO
| Iosevka | JetBrains Mono | Fira Code | Cascadia Code | |
|---|---|---|---|---|
| Advance width | 0.50 em | 0.60 em | 0.60 em | ~0.586 em |
| Columns in a 1000px pane at 14px | ~142 | ~119 | ~119 | ~121 |
| Latest release | v34.9.0 (2026-09-26) | v2.304 (2023-01-14) | 6.2 (2021-12-06) | v2407.24 (2024-11-27) |
| Ligature-free build | Iosevka Fixed | JetBrains Mono NL | none, turn off calt
|
Cascadia Mono |
| Glyph customization | 146 configurable characters, 19 stylistic sets | ligatures and OpenType features can be toggled |
cv01, cv02…, ss01, ss02…, zero
|
a few stylistic sets, ss01 = cursive italic |
| License | OFL-1.1 | OFL-1.1 (build source Apache 2.0) | OFL-1.1 | SIL OFL |
I got the column counts by dividing 1000px by width × 14px, so they're plain arithmetic. Terminals snap cells to whole pixels, so your exact count will move by a few columns, but the ratio stays the same.
The release column is worth a second look. Fira Code's last release is from 2021, and JetBrains Mono hasn't shipped since early 2023. Both are essentially finished, which is fine if you like them as they are, because they aren't going to change. Iosevka shipped v34.9.0 on September 26.
Width: why Iosevka fits 20% more code per line
0.6 / 0.5 = 1.2. Same point size, 20% more characters per line. Put it the other way: to fit as many columns with JetBrains Mono, you'd have to drop it to about 83% of the size.
Iosevka's glyphs are narrower, but they aren't smaller. x-height is 520 and cap height 735 out of 1000 (parameters.toml), so letters stay as tall as anyone else's while the cell gets thinner.
The narrowness is also the main complaint. In the HN thread one commenter said it was "just way too narrow for my taste". Another said "it was so painful throughout the first day", then admitted they stopped noticing. Someone else replied: "Give it a week". I agree. On day one it looks like someone squeezed your editor horizontally, and the commenter who stuck with it says that wore off after the first day.
If you try it and still hate the width, Iosevka ships an Extended width with shape = 600. That's exactly JetBrains Mono's 0.6 em, so you can keep Iosevka's glyph options and still get the width you're used to.
Telling 0 from O and 1 from l and I
JetBrains' own page says its 1, l and I are "easily distinguishable" and that the zero has a dot inside. That's a solid default. Turn on the zero feature and you get a slashed one instead, and that's where the choice ends.
Iosevka treats every one of those characters as a setting. From the custom build docs:
-
zerohas 54 variants undercv10:slashed,dotted,reverse-slashed,oval-dotted,broken-vertical-barand so on -
onehas 9 (cv01),lhasserifed,tailed,zshapedand more (cv47),capital-ihasserifless,serifedandshort-serifed(cv19)
And if you just want a look you already know, the stylistic sets copy other fonts: ss03 is Consolas style, ss05 is Fira Mono style, ss08 is Pragmata Pro style, ss14 is JetBrains Mono style.
So you can have JetBrains Mono's letterforms at 0.5 em. The "too narrow" crowd usually misses this: Iosevka is generated from code, and the build plan you write decides what every ambiguous glyph looks like.
Ligatures: every font here lets you turn them off
All four have ligatures. Iosevka puts its default set on calt, has discretionary ones on dlig, and has language-specific sets you turn on by switching calt off and enabling the matching feature (README). Its Fixed spacing removes ligatures entirely.
If you hate ligatures, and one HN commenter summed up that camp well with "The job of a font is to show me the text as it actually is", every font here has an escape hatch: Iosevka Fixed, JetBrains Mono NL, Cascadia Mono, or calt off. So don't pick between these four based on ligatures.
Iosevka settings for VS Code, Ghostty and kitty
Install the stock build first. Don't compile anything yet:
brew install --cask font-iosevka # macOS
# Arch: ttc-iosevka packages, Fedora: peterwu/iosevka COPR, FreeBSD: pkg install iosevka
The prebuilt fonts include the ss## and cv## features, so you can try a style in VS Code's settings.json before committing:
{
"editor.fontFamily": "'Iosevka', monospace",
"editor.fontSize": 14,
"editor.fontLigatures": "'calt', 'ss14', 'cv10' 6",
"terminal.integrated.fontFamily": "'Iosevka Term'"
}
That's JetBrains Mono style with a dotted zero. Use Iosevka Term in terminals: the term spacing makes symbol widths suitable for terminal emulators. Ghostty and kitty both take one line:
# ghostty config
font-family = "Iosevka Term"
# kitty.conf
font_family Iosevka Term
One caveat from the README: some software caps how many OpenType features it applies, so if a cv setting does nothing, that's the reason, and a custom build gets around it.
Build your own Iosevka variant
Easiest route: the web customizer generates the TOML for you. To build it yourself you need Node.js ≥ 18.0.0 and ttfautohint on your PATH:
git clone --depth 1 https://github.com/be5invis/Iosevka.git
cd Iosevka
npm install
# create private-build-plans.toml next to build-plans.toml, then:
npm run build -- ttf::IosevkaCustom --jCmd=4
A plan that gives you JetBrains Mono shapes, a slashed zero and terminal spacing:
[buildPlans.IosevkaCustom]
family = "Iosevka Custom"
spacing = "term"
serifs = "sans"
[buildPlans.IosevkaCustom.variants]
inherits = "ss14"
[buildPlans.IosevkaCustom.variants.design]
zero = 'slashed'
capital-i = 'serifed'
[buildPlans.IosevkaCustom.widths.Normal]
shape = 500
menu = 5
css = "normal"
Two warnings from the docs. Each build job can use more than 1 GB of RAM at peak, which is why --jCmd is there. And if you list weights or widths, only what you list gets built. If you use kitty and want ligatures, add exportGlyphNames = true.
If you want a little more room per glyph, shape is just a number in 1/1000 em, so try something like 540 instead of 500. None of the other three fonts give you that middle ground.
So which is the best coding font in 2026?
If you code full screen on a single big monitor, JetBrains Mono is still a great default and I won't try to talk you out of it. Fira Code is fine, but it's frozen. Cascadia Code ships with Windows Terminal, which is how most people end up using it.
Once you split your editor, run tmux, or keep a terminal docked next to your code, Iosevka wins on the numbers: 20% more columns, 54 zeros to choose from, OFL-licensed, and still under active development. Give it a week before you judge it.
What font are you coding in right now, and what would it take to make you switch? If you tried Iosevka and went back, tell me what broke for you.
Sources
- Iosevka site: https://typeof.net/Iosevka/
- Iosevka repo, README, build docs: https://github.com/be5invis/Iosevka
- HN discussion: https://news.ycombinator.com/item?id=50084240
- JetBrains Mono: https://www.jetbrains.com/lp/mono/ and https://github.com/JetBrains/JetBrainsMono
- Fira Code: https://github.com/tonsky/FiraCode
- Cascadia Code: https://github.com/microsoft/cascadia-code
Top comments (0)