JetBrains Mono – the free and open-source typeface for developers
github.com
github.com
Playing that game though ended up with liking Roboto Mono the most, Fira being a close second.
Whenever I try the winning font (b612, fira mono), I always go back to Liberation Mono.
I have been using Fira Code extensively and also writing texts. Both in English & in Greek, both spotting my mistakes and reading what I'd written improved within minutes of first trying it out. I may give JetBrains Mono a try as well, though I really am taken with Fira Code.
Unfortunately I have yet to find the perfect general purpose font to use in general. Ubuntu fonts do come really close to being perfect.
1) Looking at the font names I eventually picked my favorite/workhorse: IBM Plex.
2) With hidden names, I picked Courier Prime, which I disliked at first sight.
3) Again with hidden name, I picked Cousine, which looked alright in the simulator but had lines that were too strong and even on my more contrasted color scheme. I prefer fonts with varying line widths, which the game didn't really detect -- it was mostly unreadable versus readable.
But Deja Vu Mono is notably absent and I still prefer that.
I ended up going with a slashed zero variant of JetBrains Mono. Now it's perfect.
My history is: Monoid -> Iosevka SS05 -> Essential PragmataPro
I just compared the latter two to JetBrains Mono, and at least on my settings, doing a blink comparison, they both look more clear to me.
* Cousine
* JetBrains Mono
* Roboto Mono
* Source Code Pro
However, when actually testing, they all have a something that doesn't click as good as the Ubuntu Mono in terms of horizontal spacing.
All these fonts are too wide, and the step from 10pt to 11pt causes a huge increment on horizontal space usage. Whereas Ubuntu Mono stays in a perfect sweet spot when set at 13pt.
Anyone finding the same?
EDIT: I made a quick visual comparison (mind that all of the fonts listed above have practically the same width):
It is my all-time favorite font.
All in all, a very nice font, although if I'm allowed to complain, it now seems to me that it takes too much vertical space :-) (not just a nitpick, same test lines take considerably more pixels)
SF Mono works great in any system (not just Fruit) but you'll need to use a few tools to dig down to get the OTF's out of the DMG.
See here (left off most of the agreement as the comment was deemed too long. See https://gist.github.com/bertjwregeer/faedb3d9dbf4b6e6d6ec0fa... for full license)
APPLE INC. LICENSE AGREEMENT FOR THE APPLE SF MONO FONT For iOS, iPadOS, macOS, tvOS and watchOS application uses only
PLEASE READ THIS SOFTWARE LICENSE AGREEMENT (“LICENSE”) CAREFULLY BEFORE USING THE APPLE SF MONO FONT (DEFINED BELOW). BY USING THE APPLE FONT, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE. IF YOU ARE ACCESSING THE APPLE FONT ELECTRONICALLY, SIGNIFY YOUR AGREEMENT TO BE BOUND BY THE TERMS OF THIS LICENSE BY CLICKING THE “AGREE” BUTTON. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, DO NOT USE THE APPLE FONT AND CLICK “DISAGREE”.
IMPORTANT NOTE: THE APPLE SF MONO FONT IS TO BE USED SOLELY FOR CREATING MOCK-UPS OF USER INTERFACES TO BE USED IN SOFTWARE PRODUCTS RUNNING ON APPLE’S iOS, iPadOS, macOS, tvOS OR watchOS OPERATING SYSTEMS, AS APPLICABLE.
1. General. A. The Apple font, interfaces, content, data, and other materials accompanying this License, whether on disk, print or electronic documentation, in read only memory, or any other media or in any other form, (collectively, the “Apple Font”) are licensed, not sold, to you by Apple Inc. (“Apple”) for use only under the terms of this License. Apple and/or Apple’s licensors retain ownership of the Apple Font itself and reserve all rights not expressly granted to you. The terms of this License will govern any software upgrades provided by Apple that replace and/or supplement the original Apple Font, unless such upgrade is accompanied by a separate license in which case the terms of that license will govern.
B. Title and intellectual property rights in and to any content displayed by or accessed through the Apple Font belongs to the respective content owner. Such content may be protected by copyright or other intellectual property laws and treaties, and may be subject to terms of use of the third party providing such content. This License does not grant you any rights to use such content nor does it guarantee that such content will continue to be available to you.
2. Permitted License Uses and Restrictions. A. Limited License. Subject to the terms of this License, you may use the Apple Font solely for creating mock-ups of user interfaces to be used in software products running on Apple’s iOS, iPadOS, macOS, tvOS or watchOS operating systems, as applicable. The foregoing right includes the right to show the Apple Font in screen shots, images, mock-ups or other depictions, digital and/or print, of such software products running solely on iOS, iPadOS, macOS, tvOS or watchOS. Your use of the Apple Font shall also be subject to any specific use restrictions with respect thereto as set forth in the Apple Font or Apple’s Human Interface Guidelines.
You may use this Apple Font only for the purposes described in this License and only if you are a registered Apple Developer, or as otherwise expressly permitted by Apple in writing.
B. Other Use Restrictions. The grants set forth in this License do not permit you to, and you agree not to, install, use or run the Apple Font for the purpose of creating mock-ups of user interfaces to be used in software products running on any non-Apple operating system or to enable others to do so. You may not embed the Apple Font in any software programs or other products. Except as expressly provided for herein, you may not use the Apple Font to, create, develop, display or otherwise distribute any documentation, artwork, website content or any other work product.
Except as otherwise expressly permitted by the terms of this License or as otherwise licensed by Apple: (i) only one user may use the Apple Font at a time, and (ii) you may not make the Apple Font available over a network where it could be run or used by multiple computers at the same time. You may not rent, lease, lend, trade, transfer, sell, sublicense or otherwise redistribute the Apple Font in any unauthorized way.
For example, I can use this as my terminal font on my Debian machine, and write code using it, but I can't post a screenshot of that terminal or code to Twitter.
I'll evaluate it over a couple of days. Thanks!
[1] https://neil.computer/notes/introducing-berkeley-mono/
[2] https://neil.computer/notes/berkeley-mono-december-update/
(someone should do a hn poll on programming fonts.)
That's terribly blurred on my screen.
1) It should give you a list of runner ups, not just the final winner.
2) It should include MORE fonts. Some popular ones aren't in there. Maybe it should be a local app that can use your installed fonts.
I like the old italics better.
> And not because I’m a purist or a grump. (Some days, but not today.) Programming code has special semantic considerations. Ligatures in programming fonts are likely to either misrepresent the meaning of the code, or cause miscues among readers. So in the end, even if they’re cute, the risk of error isn’t worth it.
- Matthew Butterick, Ligatures in Programming Fonts: Hell No, https://practicaltypography.com/ligatures-in-programming-fon...
[0]: https://github.com/madmalik/mononoki/issues/29#issuecomment-...
- Me
I honestly really didn't like them at first, but I came to love Fira Code after a couple false starts.
My IDE catches the errors this guy mentions.
I also think it would be interesting if a programming language used the Unicode characters that ligatures simulate rather than combinations of general purpose characters, but that seems unlikely given that it’d require a new programmer-oriented keyboard layout.
Dyalog still has special APL keyboards.
The worst offenders tend to be anything involving '!' and '=' and the many varying stylistic interpretations of it. It appears that font designers are in a race to outdo each other, or introduce it for the 'coolness' factor and eschewing the practicalities involved.
But I don't want to be a grump and I do keep trying out ligature fonts every now and again, always with negative results.
Perhaps if some radical homoglyph defenses get established they could also take this sting out of ligatures? (how about highlighting everything that cannot be typed with your current keyboard layout, or with the layouts in whatever quick access scheme you might have?)
Yeah, no thank you.
Also, I notice that Jetbrains Mono doesn't ligature ~= as !=, but that is what it means in Matlab. So it really seems like assumptions about language semantics is baked in to the font.
Jetbrains Mono does offer the no-ligature version.
Having a ligature for != but not for the others betrays its language-independent semantics.
!= in Matlab is not legal logic operator.
Also, != might be part of regular expression.
Using Haskell is one such situation. Haskell's inequality operator is /= which someone could expect when they see ≠. Some people redefine != as a custom operator (see link), which can bring even more confusion with this ligatures.
While this is true, it doesn't seem to come up that often in practice. I'd say this appears when I'm viewing log files or something that isn't a programming language.
Also, if something doesn't turn red when you swap an = for a == then it's time to re-evaluate code coverage.
Edit: I should note that I mainly write C and C++. Other languages may make ligatures less pleasant
Bottom line is it's just there, enable or disable depending on your preference.
Let's say "→" misrepresents the meaning of "->" even as much as 0.1% of the time. Would you rather your risk of error be 99.9%, or 0.1%?
I'm sick of anti-ligature people telling everyone else not to enjoy their fonts, on every single post about a font. Ligatures have caught on for a reason.
Most other ways of code sharing you just copy and paste into a non-ligature font if you need to.
Aside: "ASCII" symbols are neither universally shaped or styled either. The easiest and obvious example to mind is the plain 0, dotted 0, slashed 0 choice and confusion with nearby symbols such as O and o and θ (Theta, not far away in "Extended ASCII"). Similarly all the variations of lower-case L (versus 1 and i). Those choices vary considerably between fonts and are another huge reason some people prefer certain monospace fonts over others and the debate over "best" will likely be an ever ongoing one. You may not think these issues compare to ligature use, but it's exactly the same sort of style debates.
Who is doing that? Certainly not the author. It sounds to me like you're taking the author's opinions as a personal affront, which seems... weird.
It's certainly not the most neutral phrasing.
The point is that programming isn't just an exercise in semantics. But it is deterministic symbolically.
I've used ligatures now for several years (with JetBrains Mono in particular for some time). I've done lots of pair programming and a common immediate reaction is "How can I get those too?! It makes it so nice to read and understand".
Instead of throwing them out because of some edge cases, why not improve the software for the edge cases?
But I still use them ;).
That leads into my personal issue with ligatures: they change what should be a binary operation into a more complex one. Instead of "I see equals signs, one space or two?" it becomes "I need to stop, change to a vertical reading direction, and see if that's 2 or 3 lines" or "I need to estimate if that is 2 or 3 characters worth of width, or get off track comparing it to characters on the line above." Comparison operators should simply be "greater space equals" but become "wait, was there a second line there? I have to go back and double check that."
I'm sure someone will come along and say "how is reading the number of spaces different than reading the number of lines?" It might be that the spacing is normalized without ligatures, it might just be the vertical spacing in ligatures is too small, I don't really know. It's incredibly difficult to convey this to someone who doesn't experience it, all I can say is it is a night and day difference to me.
I've given Fira Code a shot 2 or 3 times but have found the ligatures to hinder my productivity every time. I also tried them just in the "reader mode" with Jetbrains Mono when that feature was first released, but had to turn it off after a few days.
That all being said, I won't fault anyone for using them if it helps them in the same way that not using them helps me. I'm just glad they can be disabled in Jetbrains Mono as it is otherwise an incredible font.
I'm sure it's a highly personal thing, but Matthew Butterick proclaims it's more universally bad than it actually is.
That is why there's a checkbox for enabling ligatures.
Like why is this a thing? It's like proclaiming certain font sizes aren't worth it. My dev machine is my interface. I should be able to do what I like with it.
Edit: I guess he addresses this in a footnote, but hardly:
> “What do you mean, it’s not a matter of taste? I like using ligatures when I code.” Great! In so many ways, I don’t care what you do in private. Although I predict you will eventually burn yourself on this hot mess, my main concern is typography that faces other human beings.
A) I've never burned myself b) other than screen shares (again, nary a complaint, but several "cool! How do I get that?") I'm never rendering code for others to consume. I agree that a ligatured font would be bad e.g. for publishing code in a whitepaper.
So I can imagine when there are tools to prettify code for blogs this can become an issue for some languages.
While not entirely related to ligatures, my own biggest offender has been strange whitespace being treated as an identifier in LuaJIT. Mostly caused by my Norwegian keyboard layout producing strange whitespace when you want to write the not operator "~=" if you're not careful enough.
You can blame many parts here, LuaJIT for allowing this in the first place, editors lacking tools to deal with it or normalize pasted code, me for not using a us layout, me copy pasting code, or me not being careful enough.
Thankfully vscode will now highlight non standard whitespace with a yellow box. And best of all I've learned to be aware of these things when copy pasting code from the browser.
> I don’t care what you do in private. Although I predict you will eventually burn yourself on this hot mess, my main concern is typography that faces other human beings. So if you’re preparing your code for others to read—whether on screen or on paper—skip the ligatures.
Surely the readers are reading the code in the font of their choosing. If they get miscued by ligatures, that's squarely on them, because they're the ones that chose to read it in a ligature font. That's the beauty of fonts - they can be very personal.
So languages that want to express more with different symbols find it difficult to do so with our limited set. You end up with combinations of symbols that look familiar to existing combination of symbols, and for those who find this problematic to read we have ligatures.
I also hate dark mode and small fonts, and I let my code run way past 120 chars per line when it's right to do so.
I couldn't possibly care how other developers read code. I want them to be able to read my code and so I try to code for clarity, but I can't imagine a font choice or many other IDE preferences affecting their ability to read the code I write.
I was using this font in Rider when JetBrains made it the default, but gave up after several months. The ligatures were giving me a pause still. The effect was opposite to ease of reading the code.
Hilarious enough, many of the people who claim ligatures are objectively harmful are also those using archaic tools like vim/emacs. The number of errors that could've been prevented by highly sophisticated IDEs instead of toy text editors from the 80s is surely orders of magnitude higher than the purely theoretical ligature confusion.
Found it via this website in a thread very much like this one, so just paying it forward:
screenshot: https://raw.githubusercontent.com/masonmark/masons-vscode-th...
Been using JetBrains Mono for months now, and I quite like it. But I found out the the font a YouTuber I watch uses is Iosevka, which I've been hearing about, so I'm going to go custom compile it with JetBrains Mono styling added in
And then I'll have to give this a go. Thanks.
https://www.jetbrains.com/lp/mono/
Previous discussion: https://news.ycombinator.com/item?id=22053998
As a Windows programmer my #1 font for ~15 years was Consolas. I recently made the change to Cascadia Mono. It took a couple of days to get used but it’s better.
#1 Cascadia Mono #2 Consolas #3 Death
People may not know that Inconsolata is now a 2-axis variable font with a particularly wide width range: 0.5 to 2.0 of the nominal width.
JetBrains Mono: A free and open-source typeface for developers - https://news.ycombinator.com/item?id=22053998 - Jan 2020 (201 comments)
JetBrains Mono: A free and open source typeface for developers - https://news.ycombinator.com/item?id=22062675 - Jan 2020 (29 comments)
You can download it from https://developer.apple.com/fonts
Interestingly enough, JetBrains Mono seems very similar to Menlo. Biggest difference I see is the 0.
Always switched back to Ubuntu Mono.
It may not be the coolest looking font, but the most legible to me.
Sometimes I wonder if I'm missing out on something better or if just the Meslo people came out with something great and haven't felt the need to promote it on the web in a few years since they are all gainfully employed.
https://github.com/romkatv/powerlevel10k
https://github.com/ryanoasis/nerd-fonts/tree/master/patched-...
If you hesitate between a few fonts, edit some text in your terminal and reduce the size of the font/terminal until it's almost unreadable. Pay special attention to the i, l, o, 0 etc...
[M]: https://larsenwork.com/monoid/
[V]: https://rubjo.github.io/victor-mono/
Edit: formattingrant: Fixed width fonts are an abomination invented b/c they were easier to program for display in early terminals and computers have long since been fast enough to eschew them forever.
My current favorite is Trebuchet MS, or more specifically a version of it that I tweaked in FontForge and call Trebuchet++.
Trebuchet MS ticks a lot of the boxes for me "as is". It doesn't have ligatures, but does have easily distinguished 0/O, I/l, etc. And it renders beautifully on the high-DPI monitors I use with the largish font sizes I prefer. I do most of my coding on a 24" 4K monitor, so it's just shy of 200 DPI, and I run it with 200% scaling on Windows and Linux.
One thing I don't like in Trebuchet MS is the tilde. It is a scrawny little thing that is hard to distinguish from a hyphen. So I used FontForge to swap in a much better tilde.
Then I had some fun with underscores.
I don't like snake_case_names at all, but some coding standards mandate them. One problem with proportional fonts is that the underscore is much wider than the period, so you get this effect:
snake_case.snake_case.snake_case
If you look at the spacing between words here, "case.snake" is more tightly grouped than "snake_case" - the opposite of how it should be.
I fixed this by adding a bit of space on each side of the period, and narrowing the space occupied by the underscore.
At first I tried just making the underline itself shorter, but it was hard to tell from a period. So instead I kept most of the underline width and narrowed the character box instead. The underline tucks under the adjacent characters a bit, but it looks OK.
The net effect is subtle, but for my eyes it makes snake_case.snake_case a little easier to read and understand.
I have been meaning to find out if and how I could open source Trebuchet++ (since it's based on a Microsoft font), but in the meantime drop me a note if you would like a copy to try out - email is in my profile.
Just joking. Ubuntu Mono for me.