Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
JetBrains Mono – the free and open-source typeface for developers (github.com/jetbrains)
341 points by onnnon on Jan 20, 2022 | hide | past | favorite | 187 comments


I used to use Fira Code. Then I played this font game and I switched to JetBrains Mono.

https://www.codingfont.com/


I don't much like that differences in sizing are not taken into consideration (not all fonts are equally large at a given pixel size).

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.


I do not know why but this game makes the winning font look much better than it is when I use my code.

Whenever I try the winning font (b612, fira mono), I always go back to Liberation Mono.


I think it has to do with rendering. Have a spin with iosevka-term-ss05.


I really like the idea, although I'd really prefer if I could pick an example for a language I actually use. Even just my own snippet


Just played the game with names off and ended up with Fira Code. But since I have the names off, I don't know what second place was, but I think it was Jetbrains Mono based on the look of it.


Also just played, and ended up with ennui.


Long time Fira Code user, also ended up with JetBrains Mono. Runner up was IBM Plex Mono.


I use Fira too, currently, but IBM just won for me, with JetBrains as the runner up. I'm actually surprised by that, and learned a lot from this game(?).


I don't see a runner up, only the winner. Did they change the game? Playing on mobile, Android Firefox.


I hid the font names until I reached the final two. Decided which I liked better and then disabled the toggle to see the names.


Note that the second best font may not be the one in the final two, due to the single elimination format.


Same.


This site is pretty neat! It's a bit weird it doesn't have Menlo, Monaco, etc. to compare to some widespread fonts. I'm not sure what I'd pick if those were mixed in.


I've been using JetBrains Mono on JetBrains Rider at home/work, has been pretty good.

Playing that game though ended up with liking Roboto Mono the most, Fira being a close second.


I played the font game three times.

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.


I use fira code. I just played this with the names hidden and still ended up with fira code, lol. Both are extremely good, though.


My favorite based on the game is Inconsolatas. However after installing it I realized that the game doesn't show different variations of the font (bold, italic etc..). This can easily give a wrong impression of the font when one is using combinations of different variations in an editor.


Unfortunately the game doesn't offer my favorite font: Latin Modern Mono Prop Light (https://www.fontsquirrel.com/fonts/latin-modern-mono)


I feel this would be more interesting if you could hide the font names until you were done.


You can, it has a toggle.


I somehow missed that, thanks


Didn't see Terminus either[0]

[0] http://terminus-font.sourceforge.net/


Of the options available I actually liked Fira Code ... never heard of it before.

But Deja Vu Mono is notably absent and I still prefer that.


I also ended up with Jetbrains Mono but Ive been too lazy to switch from Fira Code which is also really good. But soon!


I ended up with Xanh Mono— I wonder if that says anything about my reading style.


i've been using anonymous pro for years, did it, and landed on anonymous pro lol. too bad it does not have a good bitmap 4k version..


I think I switched to this font a couple of years ago and I've been unable to find anything that even comes close! At this point I would consider JetBrains Mono to be my forever font.


I do like JetBrains Mono, but I personally prefer Fira Code. Plain old Consolas (a standard Windows font) actually comes pretty close too.


Agreed. Fira Code is still the most aesthetically pleasing font that has all the modern features. Can't stand how robotic JetBrains Mono looks.


Consolas is still one of the best


Consolas is so good! I can’t use anything else.


I would argue, that a more narrow font gives you more bang for the buck in terms of information per area of foveal vision. Even if something looks aesthetically more pleasing, if it serves is purpose better, you'll get used to everything else.

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.


It unseated Ubuntu Mono as my "forever". I was stunned that happened!

I ended up going with a slashed zero variant of JetBrains Mono. Now it's perfect.


I keep trying to switch away from Ubuntu Mono, but I always end up switching back after a few days. I just played "the font game" and Source Code Pro won for me, today (But my top contenders were pretty much what I expected: Fira, Ubuntu, Source Code Pro). So, maybe I'll give SCP another few days and see what happens.


Exactly in the same boat. Whenever I setup a new workstation, I install this font right away and set it as default in my IDE, terminal etc.


I've been using it for about a year, definitely won't be changing any time soon.


Same here.


After playing the CodingFont that others commented (https://www.codingfont.com/), I ended up with this list of winners:

* 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):

https://pasteboard.co/qZ8rvfV4aEHf.png


If you like narrow, you want Iosevka: https://typeof.net/Iosevka/

It is my all-time favorite font.


Curiously enough, this is the only font that I've tested which matches the horizontal proportions of Ubuntu Mono; well, to be precise, iosevka is actually a couple pixels wider than the former :-)

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 (https://developer.apple.com/fonts/) is also an amazing font, but generally left out of most online comparison tools due to licensing issues. But, it's freely available for personal use, and is certainly worth a look, and has been my preferred fixed width font for quite some time.

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.


I’m unsure if the license has changed recently but I know that as of a year or two ago you basically had no license to use the font for anything but the system apps that it shipped with. Not that I particularly care much for it, but it’s not really very usable for general use if you want to “stay legit”.


Nope, that is still in the license.

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.


Once a (freely available) file is downloaded onto a computer that I own & control, they don't have any legal right to restrict what I do with those file(s), as long as I don't generate any derivative works. Using the font in a terminal or editor does not constitute a derivative work.

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 tested it (very easy to extract the Matryoshka of files with "7z x") and it looks very nice, actually very similar in size (not shape) to Ubuntu Mono. Gives me a feeling of being a tad more "packed", and letters look more "squareish", but nonetheless a very good looking font...

I'll evaluate it over a couple of days. Thanks!


It's shilled pretty heavily on sites like this, but IBM Plex[0] Mono has always felt "right" to me with how well it fills out it's space at pretty much every DPI I've tried it at. Maybe give it a try?

[0] https://www.ibm.com/plex/


Thanks for that link! I ended up getting Inconsolata, which I quite like, but it probably won't be replacing Fira Code for me any time soon. The ligatures are just too damn pretty!


I'm probably using too much JetBrains products, at the end I was presented with the JetBrains Mono winner :D


Yeah, you can add features to your font all you want, but in the end it comes down to “does it feel good to read?”


I've been working on a new typeface[1][2] for code - Berkeley Mono. I've taken some inspiration from Jet Brains Mono, SF Mono, Bit Stream Vera, Andale Mono, OCR-B, Univers, Eurostile and Monogramma from the 50's, and weird things like the German License Plate slashed 0. Anyone interested in beta testing? neil@berkeleygraphics.com.

[1] https://neil.computer/notes/introducing-berkeley-mono/

[2] https://neil.computer/notes/berkeley-mono-december-update/


Matter of taste, but I like and recommend single-storey a in the regular not just the italic type face as variant. Or preferably even as default/only variant as I don't find switching double-storey to single-storey, or other drastical change of basic shapes for that matter convincing for a coding font.


Thanks for the feedback. Double-storey ‘a’ does make things busy. I’ll see what I can do with optional single storey ‘a’ as a stylistic set. The problem with stylistic sets is no one uses them and they’re not well supported in programming tools. I’ve got automated font file generation script in Glyphs app that generates all variants as separate fonts, so users can download whatever they want. I’ll try to create a single storey ‘a’ as an option, definitely for italics which are still under development.


Personally I love it and your aesthetics, kudos. Is it going to be for sale or openly licensed?


I am thinking for sale, after one year make it open source? Another option is to make it free for personal use, and paid for commercial use. Font licensing is too complicated and I want to simplify it just as if I were to purchase the font for myself - unlimited use for anything and everything. No one should have to worry about using fonts for obvious use cases such as embedding in avionics, etching on nuclear power plant control panels and designing submarine bailout signs.


Looks neat so far! Do you plan on supporting ligatures?


Unlikely. Explicitness and the binding between the code you see with the eyes and the keys on the keyboard shouldn’t be violated IMHO. Ligatures add ambiguity (“what’s this symbol? Which keys were pressed to create it?”), great for manuscripts and literature but not so great for code I personally think.


Neil, congrats your site! It looks great, very cool design and content. The Berkeley font also looks very nice. I'll beta test.


Great work, looking forward to trying it out when it's ready


Very cool! I want to try this with cool-retro-term and vim. :)


looks great


Meh, I like Cascadia Code[1], especially after the designer fixed the awful "fun" italics.

[1] https://github.com/microsoft/cascadia-code


I like the old Consolas font. Basically the same but not quite as thick.


another vote for cascadia code :)

(someone should do a hn poll on programming fonts.)


Not a poll, but try this tool (be sure to hide font names using the switch at the top of the page). https://www.codingfont.com/


> https://www.codingfont.com/

That's terribly blurred on my screen.


Yep, blurred on one of my devices.


Strange, it worked great for me.


Actually only in the tournament part, the browser part is fine with the same font size (16) and fonts


It needs fixing:

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.


> especially after the designer fixed the awful "fun" italics.

I like the old italics better.


I preferred the cursive.


> Ligatures in programming fonts are a terrible idea.

> 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...


If you think "→" misrepresents the meaning of "->", then certainly "->" also misrepresents the meaning of a semantic arrow "→". The set of symbols in 7-bit ASCII is somewhat arbitrary after all.

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.


> I'm sick of anti-ligature people telling everyone else not to enjoy their fonts

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.


If you say it is a "terrible idea" that kind of implies that anyone who has the idea to add them to their font or use a font that supports it has made a terrible choice. At least, that's how I interpret it.

It's certainly not the most neutral phrasing.


The only thing that is annoying with -> as two characters is the misalignment of the horizontal center. If the ligature had always centered the - to the middle of the >, I’m not sure so many people would be pushing towards having a single arrow.


Ligatures caught on because users like 'clean' designs where 'clean' means 'the removal of affordances which are not needed by frequent users but are useful to new users'. Your example doesn't make any sense because while the dash arrow attempts to mimic an actual arrow it's not ambiguous that it's two characters and will be understood by a compiler as such. A reading of source code either on a blog or shoulder surfing with this font does have that ambiguity, which is the problem.


I don't think "→" necessarily misrepresents the meaning of "->" (though see the objections throughout the thread re: differing ways that languages notate "not equal to.")

The point is that programming isn't just an exercise in semantics. But it is deterministic symbolically.


The issue is that people also share screenshots, and ligatures are not universally shaped or styled, unlike ASCII.


Screenshots are a suboptimal way to share code in general, and should be avoided. If you are trying to copy code from a screenshot something has gone horribly wrong in your process. If you are having trouble reading ligatures, that may be a learning curve issue you can adapt to with more use. (Arguably, most ligatures should be obvious with enough familiarity with the programming language without needing to look them up or learn them.)

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.


Works great until some jerk uses `→` as a variable name...


I make less errors and find errors more readily with ligatures on. The instant I saw them on my coworker's machine, I had installed Fira and enabled ligatures in Jetbrains. I have ADHD and I'm a highly visual person. I love ligatures, emojis, and any CLI tool that "makes my terminal look like a disco" (to quote a different coworker).

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.


I find ligatures increase the difficulty of communicating/collaborating with other developers. When working through a problem together in a screenshare, or at their machine, having to visually parse what they're displaying creates a speedbump in my head as I have to pause and translate. Some ligatures are not too bad, easily discernible, but some are particularly egregious.

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.


"Is this a ligature or is it a homoglyph attack" is certainly a waste of cycles that nobody should have to endure. (why am I thinking of Scala all of a sudden, Scala has done nothing wrong!)

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?)


Hmm. Yeah, I really don't think I like != ligature. I don't want to mistake it for some non-ascii unicode symbol, and I generally like what I type to stay the way I typed it (including curly quotes!).

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.


This gives me the same vibe as "Why get rid of the DVD drive?".

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?


> They grow on you.

- 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'm the most whiny opinionated person on the planet and even I find this stupid. Why would you care about what code looks like on other people's screens? If it works for them, it works for them. Christ. I hate this industry sometimes. There are serious problems and then there's people writing argument bait about ligatures.


He explicitly doesn't care what code looks like on other people's screens, as long as it stays there:

> 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.


Thank you. This guy is the equivalent of Richard in Silicon Valley when he tries to take the stairs three steps at a time to demonstrate how tabs are superior to spaces.


Wait until they find out that I ligature'd 4 consecutive spaces to display as a tab!


It's a strange claim - to say it's a terrible idea. I've been programming for over 20 years and I've been using a font with ligatures for nearly a year now. For me, personally, it increases legibility and clarity. I feel slightly stunted when I don't have them. I read other people's code with ligatures on just fine as well.

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.


Matthias Tellen also has an interesting take on this subject in in issue #29 for his font mononoki [0]. I love mononoki.

[0]: https://github.com/madmalik/mononoki/issues/29#issuecomment-...


Looks fantastic, I'll definitely try this one out


Mononoki, Input Mono are in my Top 3.


I always felt it's slightly sad that we're stuck with only being able to type the ASCII symbols !"#$%&'()*+,.-./\:;<=>?@~|{} efficiently.

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 might be imagining this but I think that I have seen ligatures on/off being used as a deliberate hint to convey the difference between read-only and editable code. That's a very nice tweak. InteliJ at least can be configured that way, might be a case where its Android Studio incarnation has different defaults.


I thought it was weird at first, but I grew to really enjoy the way they look. It isn't too difficult to figure out, because even if you don't use ligatures when you look at one you know right away it is an unusual symbol and you need to look at it a little closer to figure out what it is.

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


This font ships with a ligature-less version.


Functional considerations aside, there's definitely some personal issues with ligatures. Spacing in code is incredibly important for a lot of people. I'm dyslexic, so distinguishing between something like someValue=someOtherValue() and someValue->someOtherValue() adds additional unnecessary complexity compared to simply writing assignments with spacing (ie, someValue = someOtherValue()). This makes it significantly easier for me to interpret it at a glance.

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.


Interesting. A friend of mine is dyslexic and has expressed a strong preference for ligatured fonts for programming for the opposite reason. I guess the lesson is to leave people alone with their preferences...


> There are a lot of ways for a given sequence of characters, like !=, to end up in a source file. Depending on context, it doesn’t always mean the same thing.

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.


You can disable the ligatures in your editor or use Jetbrains Mono NL which is the no-ligature version.

Bottom line is it's just there, enable or disable depending on your preference.


> cause miscues among readers

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.


For me it depends on what’s being written. For the stuff I work with day to day (all very “boring”/mainstream languages) there’s no possibility of ligatures causing confusion, and I find them to be an enhancement in both aesthetics and readability.

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.


You should check out APL.

Dyalog still has special APL keyboards.


The "risk of error" is miniscule and trivial to figure when it does occur. The other 99.999% of the time the ease of reading and writing with them more than makes up for those 30 seconds of confusion every couple of weeks.

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.


I think ligatures are amazing, makes code easier to read for me.


The ligature ≠ for != is very C/C++/Java-specific, which is kind of annoying. Is there a way to selectively disable ligatures like this one?


It's a very common logic operator across a multitude of languages. In what situation do you have that sequence of characters that isn't a logic operator?


~= and <> are common-enough, e.g. in Matlab, SQL

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.


https://hoogle.haskell.org/?hoogle=%28%21%3D%29&scope=set%3A...

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.


I agree. The symbol combinations may have different meaning depending on where they appear. Replacing raw symbols with ligatures will create confusion.

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.


I tend to agree not because I think they often get the semantics wrong, but because it's an unnecessary translation operation my brain has to do. Why does my brain need to process two different ways of representing the same thing (one when typing, one when reading)?


Yes, there are some problems, like a double arrow to the left `<=` which is not the same as a 'less than or equal' or, to a lesser extend, 'less than -1', which can be written as `a<-1`, which is no arrow `a <- 1`.

But I still use them ;).


Since R uses back arrows to assign values to variables, you could potentially have to write x <- -1, which could get messy.


Why would you write x < -1 without a space?


And yet, somehow, no such thing has actually happened.


I've witnessed curly quotes finding its way into html due to copy paste causing at least an hour of debugging.

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.


They're fine in moderation, like for logical signs. I wouldn't want UNICODE symbol soup like Agda code seems to be.


Yet another facet of the infantization of this trade


Ah, yes, my preference for how a couple of bytes of data in my text file end up getting mapped to a few dozen more bytes of data on my screen. That. That was the moment things went to far.


Also you can think out of the box and realize that you may not need a monospaced font for development, but a font that has the advantages of monospaced fonts. I've been using Input Sans for years now. See at: https://input.djr.com/info/


I would give it a try if it supported ligatures. I just use Verdana or Google Sans right now for code (just a good proportional sans serif font works for me, but none support coding ligatures).


My favorite is still Go Mono (and not only for Go) - mostly because I prefer the good old "typewriter-style" fonts with serifs. "Sans-serif" monospace fonts look odd to me because most letters are sans-serif, but then they have to add serifs to I, i, l, 1 etc. to avoid having them look "skinny".


I used to use this font, and applaud JetBrains for creating it, but I eventually found Rec Mono Duotone, which I've now used for years.

Found it via this website in a thread very much like this one, so just paying it forward:

https://www.recursive.design

screenshot: https://raw.githubusercontent.com/masonmark/masons-vscode-th...


All the Rec Mono fonts are great. I've been using Rec Mono Casual myself, both on VS Code and the terminal.


There was a great Show HN a few months ago of a game to find your favorite programming font and JetBrains Mono is one of the contenders:

https://news.ycombinator.com/item?id=29010443


Julia Mono font is pretty great. https://juliamono.netlify.app/


In my case the font that made me stop switching fonts every month was Victor Mono: https://rubjo.github.io/victor-mono/


Damn you. Another font to add to my list to try out tomorrow.

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.


Update: Victor Mono is an excellent font. It's a bit too thin for my liking on the regular weight, but semi-bold is a perfect weight. The cursive is a nice touch. Thank you.


Last updated 274 days ago. What's new?

https://www.jetbrains.com/lp/mono/

Previous discussion: https://news.ycombinator.com/item?id=22053998


I've been using this typeface lately, and it's fantastic. Well done!

https://jetbrains.com/mono


Almost all programming fonts suck on Windows. They’re designed for retina DPI MacBooks with Apple rendering. It’s annoying.

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


JetBrains Mono won the coding font tournament [1] for me, but said tournament did't have "Hack", which still looks best in my IDE (geany).

[1] https://www.codingfont.com/


Source Code Pro is my personal go-to.


This is up there with Inconsolata as one of the best monospace fonts, IMO.


Why thank you :)

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.


What are the benefits of such a width range? Does it mean the user can adjust the thickness of the characters independently of font size, or something else?


That is already possible with just a weight axis. The benefit is a lot more flexibility in design and layout, plus just a preference. The Iosevka font also being discussed here today is on the narrow side, while Source Code Pro is slightly wider and Courier even more so. Inconsolata can cover all these and more.


Past related threads:

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)


Apple’s fonts are quite nice. I use sf mono.

You can download it from https://developer.apple.com/fonts


I find OS text rendering drastically affects which fonts I choose to use, and Mac OS makes these fonts in particular look really good on a 4k display.


Looks like SF Mono is what replaced Menlo.

Interestingly enough, JetBrains Mono seems very similar to Menlo. Biggest difference I see is the 0.


I've tried IBM plex, Fira, and even bought Operator Mono.

Always switched back to Ubuntu Mono.

It may not be the coolest looking font, but the most legible to me.



"Hasklug NF" represent!


At some point in grad school a few years ago, I was procrastinating furiously and did a deep dive into the font I would prefer for coding, terminal, etc. I ultimately landed on Meslo LGS with Nerd Font after also looking at different shells. I'm not a fan of ligature so don't care about those fonts

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-...


In terms of legibility, aesthetic balance, and not being over-engineered, I haven’t found anything better than M+ 1: https://macwright.com/2014/07/09/mplus.html


Absolutely love this font, been using the Nerd fonts patched version for a very long time for my terminal-based workflows. One really minor gripe that I have with it is the triple asterisk ligature which I have no use for. But it's so minor that I never bothered to patch this symbol out.


get the non ligatures version. ligatures are extra terrible in a terminal


I have been using kitty on Linux for quite a while now, and it handles ligatures extremely well. I like seeing nice arrows in my terminal.


Every once in a while when I get bored, I head over to Google Fonts page and download some fonts: https://fonts.google.com/?category=Monospace&subset=latin


I've started using JetBraims Mono after a friend suggested it to me.

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...


If we are throwing font recommendations here, I favour Monoid [M], I love its glyphs and look. But some years ago I installed Victor Mono [V] as a kind of practical joke on myself (it has italics, usually enabled for comments in the language you use in your editor, but of course that's up to where you want them) and I found it's actually extremely nice because of that. I now also use it on Obsidian (the other monospaced editor I use aside from VS Code/emacs)

    [M]: https://larsenwork.com/monoid/
    [V]: https://rubjo.github.io/victor-mono/
Edit: formatting


Bitstream Vera Sans Mono has been my monospaced font of choice for years, but having seen JetBrains Mono when I started playing with their IDEs last year… it’s really good, and has some features I prefer over BVSM.


My experience with JetBrains Mono is that it's too aesthetic/overdesigned for coding (coming from Fira Code), but it makes an excellent monospace typeface for image design.


Following æsthetic at the cost of function is a complaint I’d make of Fira Code, not JetBrains Mono (disregarding ligatures, which both overdo): Fira Code’s r glyph is lousy, its & poor for code where immediately followed sans whitespace by letters (common for reference syntax in C-family languages; it’s much too similar to a letter, especially given the high ex height), and its ff ligation (two columns → one) downright idiotic.


Fair. At the least, some of those examples have variants that can be manually enabled: https://github.com/tonsky/FiraCode/blob/master/extras/charac...


Actually, I must amend what I said: I was talking about Fira Mono rather than Fira Code. Fira Code fixes the r glyph (its default r glyph is excellent and its alternative perfectly respectable, still having narrowed the base line), and offers a better ampersand as an alternative. Dunno about the f ligations (ff, fi, &c.), hopefully they ditched that madness (even if they’re opt-in discretionary ligatures in Fira Mono—they just have absolutely no place in a monospaced font, dlig or no dlig).


It seems like I might have to make another amendment as I just came across something labelled Fira Mono that also seems to have the fixed r glyph. I’m throwing in the towel, there are too many things called Fira Mono and Fira Code and I can’t find any one sound canonical source; some seem to say there are a bunch of changes between the two, others seem to say it’s only a different line-height; did they perhaps start out more different but get mostly merged back? I give up. All I know is that places like bugzilla.mozilla.org and crates.io use bad versions of some Fira monospace font.


I use Fira Code. Mainly because it allows you to chose ligatures if for some reason there are default ones you don't like (I really enjoy ligatures when writing code). Sadly, that works only on application level, not OS, so not all IDEs support choosing stylistic sets: https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylis...


I try every programming font but always end up going back to Monaco.


Same for me, everytime. And I'm a Linux user.


Monaco is my go-to font


It's a bit taller than the usual PT Mono I regularly use. I find that "boxier" mono fonts are a bit more readable than elongated ones.


I’ll be giving JetBrains Mono a try, but for the past few years I’ve been enjoying Dank Mono[0] for writing Swift, Obj-C, Kotlin, and C#. In particular I like its handwriting-inspired italic style, which works well for adding contrast to things like keywords.

[0]: https://philpl.gumroad.com/l/dank-mono


I also use dank mono and really like it. Its similar to JetBrains Mono and Roboto Mono, but a bit crisper and slightly more space efficient. Looks equally good on my Mac retina display and my Windows 1080p display.


Since this has turned to “list your favorite monospaced font” I’ll happily mention I’ve never found anything better than Consolas.


Am I the only one rocking with agave? Especially agave NF, it looks a bit funky (casual-looking) but it's been really easy on my eyes on not-too-high res display(34' 1440p).

https://github.com/blobject/agave


Absolutely amazing font. Used it since the first day it was out and never looked back. Improved the code readability for me so much it’s among the first things I setup on a new Mac. I also use it for the terminal, as a font override in dark reader on a bunch of websites, …


This story links to the GitHub repo, which is useful, but I really enjoy the main webpage they've made for this font: https://www.jetbrains.com/lp/mono/


I just converted to this font and using it for a month almost. Seems good on my editor/


Love this font, has half-replaced Pragmata after a decade or so. Super-good in the terminal.


For me, not enough difference between 0 and O, zero and capital o


Fair points


Installing this font is the first thing I do when setting up a new editor. It has a great character and feels pretty much ideal to me.


Anyone have good examples of proportional width fonts that have coding focused changes, like well differentiated 0/O and I/l and or coding ligatures? I've been really happy just using Avenir for coding for the last 10 years or so, but I'd love something proportional that was a bit more coding aware.

rant: 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.


Nice to meet another fan of proportional fonts! I find them so much more readable than monospaced.

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.


I really, really like Anonymous Pro. In comparison JB Mono looks similar enough but a bit fatter, not a bad look :)


Too wide for me (makes side-by-side code windows less useful). Check out Iosevka SS14.


Beautiful! Thanks for sharing. This is my new font in VS Code.


I may be weird but I prefer Times New Roman.

Just joking. Ubuntu Mono for me.


Times New Roman is for normies. Comic Sans is best code font.


<Laughs in Monaco>




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: