[This fragment is available in an audio version.]
I’ve just finished setting up a new Mac (14" MBP, M2 Pro, 32G, 4T). It dawned on me that most of my really intense interactions with this thing involve looking at “monospace” (i.e. fixed-width) text; in Emacs where I write this blog, in my IDE, and in my terminal. The ones that came with the machine by default are, well, OK, but maybe we can do better. So I got on Mastodon and asked: “Dear LazyWeb: Setting up a new Mac, what are some groovy new monospace fonts for terminals and IDEs?”
[Update: This got a gazillion views and comments, the latter mostly along the lines of “you left out my favorite font!” So I wrote a follow-up with lots more fonts!]
Which was like throwing raw meat into the piranha pool. Obviously this is something that geeks care about deeply. I got a huge number of suggestions, of which I downloaded 16, basically all the ones that are free. In general I prefer to pay for things and am suspicious of anything that’s free on the Net, but when there are so many good free options I just don’t think there’s a business model.
Disclosure: In recent years I’ve been using Inconsolata, which has always pleased my eye, and also is the only font whose inventor I’ve met; I admire Raph Levien extremely. Can I replace it?
Method · I loaded up the man page for ls(1) in the MacOS Terminal program, with size set to 18pt. By doing so I’m bypassing one important criterion: Readability at small size. I suspect that an increasing proportion of geeks, like me, in this era of 27-inch-and-up 4K screens, don’t really squish the letters the way we did when we were twentysomethings on screens with only a million dots. But if you still do, this piece probably won’t help you that much.
So let’s run through those screenshots. I’ll switch Emacs into each font as I write about it. I’ll pick the ones that I think are generally the most pleasing and do another screenshot of a moderately complex chunk of Go code as presented by JetBrains’ excellent GoLand IDE.
Here they are, in alphabetical order.
B612 Mono · Start here.
It has a few lower-case serifs, reasonably done. It’s little more vertically dense than my eyes like. Could live with it. Doesn’t advance.
Droid Sans Mono · Start here.
I lived in this typeface when I was in the Android group 2010-12. It’s perfectly OK but just uses too much horizontal space for me. While it looks nice in my Emacs buffer, it fails at the information-density bar and doesn’t advance.
Fira Code and Fira Code Retina · Start here
This is an open-source thing by Nikita Prokopov, said to be optimized for code. Its big selling point is a set of ligatures, like “≠” for “!=”. Meh; all these years in, my eyes don’t care.
For a font that doesn’t market its typographic values much, it sure pleases my eye; light, clear, well balanced horizontally and vertically.
It comes with an ordinary selection of styles: Normal, Light, and so on. But then there’s also “Retina”. It’s difficult to find an explanation; one assumes some sort of optimization for high pixel density? Anyhow, it makes me happy; just the tiniest bit of extra weight that to my eye makes each character speak its nature a little louder.
The Retina style advances.
Go Mono · Start here.
Wow, so many serifs. That strikes me as inconsistent with Go’s design aesthetic, which eschews decoration and fancy features. Also, it is notably more vertically compact than the average, which makes my Emacs editing screen look cramped; in code, which typically has shorter lines, that’s probably not so much of an issue?
Advance to the next round? Honestly, probably not. But I’m going to advance it anyhow because after all, stage 2 involves Go code, which this is said to excel at.
Hack · Start here.
A little tighter vertically and looser horizontally. Which is arguably a good choice for code, with its shorter lines. Looks nice in my editor buffer too. Advances.
IBM Plex Mono · Start here, because IBM’s own page doesn’t seem to show off the mono weight.
Uh, no, it smells of mainframes. Look at some of those 90° serifs, right out of the 1950’s.
Inconsolata and Inconsolata Light · Start here.
Unfortunately I am failing to find the words to explain why this pleases my eyes so much; a screenful of it makes me happy. It suffers from several sins for which I fault other faces, but even so. More compact than this overview’s average but so graceful that I’ll take that and welcome the information density. Advances.
The Light variant also pleases my eyes — even more, a bit. But I don’t think it can quite carry the load of all-day every-day work.
Input Mono · Start here.
All other issues aside, there’s just not enough size differentiation between upper and lower case for me. Doesn’t advance.
Iosevka Term · Start here.
It probably needs to be evaluated in a CJK-heavy application. It definitely, to my eye, has the look of technical printing I saw in Japan way back in the day. But for those of us whose coding lives are mostly in Latin characters, no.
JetBrains Mono · Start here.
And JetBrains knows a lot about developers. This font is so overwhelmingly clear that I can hardly even see it. I can’t think of anything to say, which means it’s doing what it’s designed to do. Advances.
MesloLGS NF · Start here, I guess? Having trouble finding much commentary.
When I switch between this and JetBrains, the occupied space shrinks a little, but wow, other than that it looks really about the same. Density is good. Which do I prefer? Hmmmm… but it advances.
Overpass Mono · Start here.
Um, no, not really, the letterforms are just too stark, drawing attention to themselves. Doesn’t advance.
SF Mono · Start here (at Apple).
Yes, but not derived that well, I think. The lower-case letters are working too hard, mannered even; consider the “r”. I’m normally happy to take whatever Apple says is best for my general-purpose daily driver, but this one doesn’t meet my bar for a developer’s font.
Source Code Pro · Start here.
This is from Adobe, obviously a heavyweight in the world of design and typography; was authored in-house. Interestingly, when I switch back and forth between this and SF Pro, the shape of the text doesn’t change; the character metrics are identical. The glyphs do change in interesting ways. Source Code is simpler, less mannered, but neither does it really please my eyes nor get out of the way.
The finalists · That leaves Fira Code Retina, Go Mono, Hack, Inconsolata, JetBrains Mono, and MesloLGS NF. Let’s go look at some actual code, from this file.
Here they are, but they’re not alphabetical, because I want you to look at them; scroll back and forth a bit. See if you draw any impressions before you check which is which.
Notes · In no particular order:
I cheated and included Inconsolata Light.
They all kind of look like each other. Which I guess shouldn’t be surprising.
In fact, they’re all pretty great.
There are several opportunities for a “≠” ligature in the code fragment. I don’t think it makes a damn bit of difference.
If you care about how many lines of code you can see, Hack squeezes the most into your window, JetBrains Mono the least. Um, I care.
You can tell which is which by click-to-enlarge and look at the labels, or the filenames.
Conclusions? · I don’t think Go Mono really belongs in the top tier, even though it was designed for the language in the sample.
Nor does Inconsolata Light, actually, although I think it looks great.
I could be super-happy with any of Fira Code Retina, Hack, JetBrains Mono, or Inconsolata. Happy enough, I suspect, that the choice doesn’t matter.
Comment feed for ongoing:
From: Stuart Dootson (Feb 13 2023, at 03:11)
JetBrains Mono is my current favourite for editors, preceded by Fira Code (and before that, it was Consolas)…
But for terminals, I’ve always like Ubuntu Mono - for whatever reason, it pleases me in a terminal (which is Windows Terminal for me, generally running Windows Subsystem for Linux) where JetBrains and Fira Mono don’t.
From: James (Feb 13 2023, at 06:44)
If you do want a paid font, my favourite for years has been Fabrizo Schiavi's "PragmataPro" (https://fsd.it/shop/fonts/pragmatapro/). Great monospace font at all sizes, in my experience.
From: Jasper (Feb 13 2023, at 06:48)
I've been using the underrated https://tosche.net/fonts/comic-code as the monospace font for my emacs and terminal sessions for some time now and it really pleases my eyes!
From: Jon (Feb 13 2023, at 11:07)
I’m still enamored with Monaco and haven’t found a monospaced font that feels as fun and legible.
From: Jacob (Feb 13 2023, at 11:12)
I like https://rubjo.github.io/victor-mono/ the most next to Operator Mono.
From: Laurynas (Feb 13 2023, at 11:27)
Nice overview! Myself, I've been really enjoying the (paid) Berkeley Mono font (https://berkeleygraphics.com/typefaces/berkeley-mono/)
From: Flemming (Feb 13 2023, at 11:30)
I swear by "Monaco Nerd Mono".
It was a revelation finding "Monaco" when I fist got started on the Mac. So casual, yet stylish
From: Edward E. (Feb 13 2023, at 11:38)
Hi there, Tim, here's a drive-by comment apropos of typesetting. :)
Re: your aside about web math support in https://www.tbray.org/ongoing/When/202x/2022/07/18/Long-Dark-Matter-Links - as of version 109 released in January, Chrome finally supports MathML! See https://chromestatus.com/feature/5240822173794304 for all the deets.
From: Jan (Feb 13 2023, at 11:49)
I really like Brutalist Mono, a lesser known modification of DejaVu Sans Mono. I always come back to this code for the terminal as well as any editor.
You can find it here:
From: ef (Feb 13 2023, at 12:04)
I really like Dank Mono, found here: https://dank.sh
From: Marc Robinson (Feb 13 2023, at 12:22)
I lean more towards typography than writing code, but I'd like to recommend Courier Prime because I really like it. It's a rework of Courier New and for your purposes, it's got Sans Serif and Code variants. https://quoteunquoteapps.com/courierprime/index.php
From: Nathan Myers (Feb 13 2023, at 12:39)
I was gratified to correctly anticipate your go/no-go choice, for each. But Inconsolata still wins, by a substantial margin.
At my third-last employer, a decade back, my boss looked over my shoulder and saw my typeface, and instantly forgot all else and switched to it. That is what makes for a winning typeface.
Adobe's Source Code Pro is, aside from certain precious letterforms, just Inconsolata with one scan-line chopped out, and then labeled as one point-size off. I call it "Inconsolata Squat". (I e., SCP-10 derives from IC-11.)
The best way to compare coding typefaces is to get a bunch of terminal windows full of code, and set your system "mono" face to one, and the terminal settings face to the other, and then click the "use system font" box in the settings pane on and off.
From: Geoffrey Wiseman (Feb 13 2023, at 13:17)
I moved to JetBrains Mono from Fira Code a while back, but I'm happy with either and with most of your finalists as well, including Go Mono whose serifs stood out in a slightly odd but vaguely appealing sort of way.
A few don't define the "D" shape as sharply as I'd like making it a bit to "O-ish", but that's mostly when I'm looking for things
That said, I like JetBrains Mono and I don't see a compelling reason to switch things up.
From: Florian (Feb 13 2023, at 14:20)
I miss the open-source font Recursive (https://www.recursive.design/) in this great list. It is available in different variants. I use it in the variant 'Rec Mono Semicasual'.
From: Yulian Kuncheff (Feb 13 2023, at 14:37)
You should take a look at Cascadia Code (https://github.com/microsoft/cascadia-code) and Hasklig (https://github.com/i-tu/Hasklig)
Both have ligature support, and I had similar finalists to yours in the past, but these 2 are the ones I end up using the most, primarily Cascadia Code.
From: Chris Long (Feb 13 2023, at 15:10)
My personal go-to is Cascadia Code: https://github.com/microsoft/cascadia-code. I personally enjoy ligatures for code. My favorite feature of this font though is the cursive variant, especially for distinguishing comments in code.
Disclaimer: I work at Microsoft, but not in the Windows or Developer divisions.
From: Ricardo Bánffy (Feb 13 2023, at 15:31)
Can't believe nobody suggested my very own 3270 (inspired on the IBM 3278-2 terminal font)...
OK... It's not for everyone - it's blocky and very 1960's, and doesn't come with a beam spring keyboard and a ridiculously sharp long-persistence green phosphor CRT like the original.
From: Adam Sharp (Feb 13 2023, at 15:40)
I used Inconsolata for a number of years and it’s still very close to my heart. However, I did switch to iA Writer Mono some time ago, which was based on Nitti, a beautiful typewriter face from the original iA Writer for iPad (https://ia.net/topics/a-typographic-christmas, https://github.com/iaolo/iA-Fonts/tree/master/iA%20Writer%20Mono). It’s the first programming font I’ve ever found where I actually like the italic version, and that’s why I’ve stuck with it for the last few years.
From: Ant (Feb 13 2023, at 17:07)
I think Roboto Mono is worth a look. It's very evenly balanced (to my eye, at least) in terms of the relative weight of the individual characters, not serif-y at all, and doesn't suffer from the dreadful "handcuffs" typewriter lower-case g, although if you like Inconsolata...
From: Sean (Feb 13 2023, at 17:42)
Ubuntu Mono is a nice tweak on top of Deja Vu Mono. That's what I've used for a while now where needed.
From: foresmac (Feb 13 2023, at 17:53)
When comparing the finalists on my iPhone, JetBrains Mono stood out as the most readable in the screenshoots, for whatever that’s worth.
From: Lasse (Feb 13 2023, at 21:13)
Why is there no screenshot of Hack in the final set of screenshots?
From: Mikel Ward (Feb 13 2023, at 23:41)
Try Ubuntu Mono.
From: Yolle (Feb 14 2023, at 01:14)
I've been using Andale Mono for many years. It's perfect for me. I had to buy Andale Mono Bold because the bold version is not part of macOS version of Andale Mono.
I flirted with SF Mono but that "r" is horrible.
From: Oleksii Shytikov (Feb 14 2023, at 02:06)
If you enjoy PragmataPro, you may try free re-make I've tried to put together using free Iosevka: https://github.com/shytikov/pragmasevka
It feels very close. Did my best to re-create Pragmata's feel using open images of it.
Also I can recommend you to check some of fonts that you might enjoy too: https://github.com/belluzj/fantasque-sans very close to Inconsolata, but a bit more fancy. But not too much.
Sudo is also pretty awesome: https://github.com/jenskutilek/sudo-font
Anka/Coder is good, especially if you're looking for something more condensed: https://code.google.com/archive/p/anka-coder-fonts/
Also Julia Mono: https://juliamono.netlify.app/
From: Anonymous (Feb 14 2023, at 10:50)
Where is Sarasa Gothic (更紗ゴシック)?
From: Guy Stalnaker (Feb 14 2023, at 10:56)
Thanks for this post. Interesting how many of these fonts are based on Bitstream Vera Sans Mono (e.g., Hack). One of the comments mentioned Anka/Coder which I have downloaded and installed. It is now my preferred mono font (after using Cascadia Code for a few years). I like its more rounded letter forms rather than the more vertical shapes many of these fonts have.
From: Matthew Caldwell (Feb 16 2023, at 14:56)
I’m actually surprised by how much I hate the ligatures. If I’m typing (and deleting) this stuff, I want the actual character level granularity right there, not hidden behind some meretricious typographic veil. It’s an exclamation mark and and equals sign, not a notequals, dammit. Kern them nicely, sure, but don’t pretend they’re something they’re not.
From: Nik P (Feb 18 2023, at 15:08)
It's interesting, I independently decided in each blog post that I preferred Hack and Menlo the most. Then I looked at them side by side and was about to tell you you made a mistake in the screenshots because these are IDENTICAL, and I don't mean in an exaggerated way, but in a literal way.
Then I looked a bit closer and noticed Hack's SLIGHTLY elongated lowercase b's and p's, and the punctuation (periods, commas, stars) are all more rounded
Still, the two are uncannily close.
From: Jatin Sanghvi (Feb 23 2023, at 07:59)
Also check https://www.recursive.design. I did a similar comparison of fonts on Windows and 'Rec Mono Casual' turned out to be winner for my taste. I especially looks for an italic (not oblique) variant to give the code comments a nice touch for themes that italicize the commented text. Copying down the scoring board from my personal notes below:
## Google Monospaced Fonts Review
- Anonymous Pro `*` `-`
- Azeret Mono `*` `$`
- B612 Mono `*` `-`
- Courier Prime `***` `$$$`
- Cousine `*` `$$`
- DM Mono `***` `$$`
- Fira Code `-` `$$`
- Fira Mono `-` `$$$`
- IBM Plex Mono `***` `$$`
- JetBrains Mono `**` `$$$`
- Noto Sans Mono `-` `$$`
- Overpass Mono `-` `$$`
- Oxygen Mono `-` `$$`
- Red Hat Mono `*` `-`
- Roboto Mono `*` `$$`
- Share Tech Mono `-` `$`
- Source Code Pro `*` `$$`
- Space Mono `***` `$`
- Ubuntu Mono `**` `-`
- Italic variants: `***` - Great, `**` - Good, `*` - Average.
- Legibility: `$$$` - Great, `$$` - Good, `$` - Average.
- Winners: Courier Prime, DM Mono, IBM Plex Mono, JetBrains Mono
- Best fonts for Notepad++: Rec Mono Casual, JetBrains Mono, Cascadia Mono
- Best fonts for VS Code: Rec Mono Casual, JetBrains Mono, Cascadia Mono, IBM Plex Mono