After redesigning my website to use Atkinson Hyperlegible fonts, I switched my terminal and code editor to the monospace variant to properly test it. After a month of testing and positive experiences, I felt motivated to investigate further and write an article comparing Atkinson Hyperlegible Mono to JetBrains Mono and Fira Code.
The visual comparisons use examples from an accessibility paper on homoglyphs and mirror glyphs. I chose JetBrains Mono and Fira Code as a baseline, since many developers use these fonts and find them familiar.
While Atkinson Hyperlegible Mono excels at character distinction, nothing is perfect. I detail trade-offs in the "Caveats" section, below the installation instructions.
I'm curious to hear others' experiences and thoughts. I'm fascinated by what role font choice plays in legibility and accessibility, but the research is relatively sparse in this area.
I was hoping to see some comparisons of blocks of English text, and blocks of program code text, rather than just character by character. That would help me understand how it feels to read in arbitrary blocks, as well as appreciate specific design characteristics.
I agree. This is a very enlightening discussion of individual glyph features that affect readability. But the thing that hit me immediately is the difference in how expanded or condensed these fonts feel. Even though in the examples, the text width of JetBrains and Fira is identical, JetBrains "looks" condensed to the point of being harder to read. But I feel like Atkinson goes too far the other direction and is too expanded. When I read it, I feel like I'm tripping over the empty space between the characters, or I have to move my eyes too much to read one word.
This might be of interest for you: https://www.codingfont.com/ I made it to select the perfect coding font. i will update it to include the Atkinson Hyperlegible Mono soon!
Hey, I'm a fan of your work. My font before this was Victor Mono, and I actually found it through your website. Do you publish the source code anywhere? I'd be interested to take a closer look at it.
The code was private but I see no reason not to open source it, so I just did! https://github.com/Typogram/coding-font-sveltekit This way you can add your own font to it, just modify codingfonts.ts and include the font files in the css!
If you feel like it, you can add this page https://www.codingfont.com/AtkinsonHyperlegibleMono to your article, it is the dedicated page for Atkinson Hyperlegible Mono with the options to compare it to other fonts on the side by side view.
This particular font seems to have very inconsistent kerning. The "isMultipleOf" identifier pushes the s & M & u and e & O way too tightly together, and the remaining letters seem inconsistently spaced as well.
Ah, thanks for digging this out, this is the version 1, which I made using a no code tool. the current version is made using sveltekit, it is also just open sourced in the other comment.
This is good feedback, thank you. When I wrote the article, I erred on the side of too few comparison images rather than too many. What would you recommend for comparison blocks? "The five boxing wizards jump quickly" and maybe a fizzbuzz?
For what it's worth, I generated the comparison images with Harfbuzz and ImageMagick, so in theory I could publish the script and then anyone could make their own comparison images. Fair warning: it's a quick and dirty shell script, written only to get the job done.
I would link to the downloads in the opening paragraph.
My impression is that while legible it is too fat. You'll notice that Fira Code and JetBrains Mono are similarly wide -- and narrower than Atkinson Hyperlegible Mono.
I'd recommend getting it from there rather than the Braille Institute's website since they require an email and EULA, but here's the other download link anyway.
With Nerd Fonts, I'd recommend downloading both and setting up a fallback system through fontconfig though. Unfortunately, some versions (Nerd Fonts, official download) are still missing the backtick/grave glyph.
I'm pretty much there with you. I tend to use Fira Code for the improved visibility, but really would prefer Consolas/Inconsolata, but there are a few character variations that I don't like as much and it's slightly harder to read (for me). I also have come to rely on the Nerd Fonts enhancements with my terminal prompt (Starship).
Character distinction isn't that important when reading english mainly because context automatically repairs any s1m1l4r1t1es b3tw33n w0rd5. Even numbers can be used the replace letters and it only slows down reading slightly. Leetspeak is only a worst case example. For example for b0Ok 0 and O causes virtually no pause.
But that's the exact reason why it's problematic in contexts where the exact character is important in a way not clear from context. Atkinson Hyperlegible is my favourite for reading passwords or urls with codes in them etc.
But how often is this needed in daily life? Why not just pick something that’s aesthetically pleasing based on personal preference rather than legibility because reading passwords doesn’t happen often at all imo?
Additionally the legibility metric used by the site isn’t even quantitative. It’s qualitative and opinionated so it’s not like there was an objective measure that says Atkinson is in actuality more hyperlegible… the hyper legibility is an opinion.
The difficulty I have with many so-called legible fonts is that they’re often not very readable.
Legibility refers to how easily individual characters can be identified. But good readability depends on how easily your brain can recognize whole words—through pattern recognition of word shapes.
When characters are too similar in shape and size, it becomes harder to distinguish the unique shape of each word, which reduces readability (which often happens with these highly legible fonts) — even if each individual letter is technically more clear.
This legibility vs readability distinction is why variable-width programming fonts like Proportional or Input Sans can actually reduce cognitive load during extended coding sessions despite sacrificing character grid alignment.
I agree, and can imagine using a different font depending on the (programming) language or purpose, yet each font being quite objectively better at that purpose. Some languages are a lot more similar to natural language, and some are more mathematical, technical or really need fixed width blocks to be readable.
And then there are fonts that I don't like aesthetically and generally avoid, but come to the rescue in the wee hours of the morning when you really have to get something done and your eyes have gone blurry.
Interesting distinction there. I didn't know that was the difference between legibility and readability. I'd really like to hear more about this. Do you have experience with fonts that strike a better balance, or know of reading material that discusses this subject in more detail?
For example, if you grew up in an English-speaking country, your computer likely defaulted to Arial or Helvetica as its sans-serif font. Over time, your brain became familiar with how words looked in those typefaces—their proportions and shapes.
Because fonts like Inter and SF share similar proportions, your brain finds them easier to process, which makes them feel more readable.
I spent so many years reading the 6x13 "fixed" font in XTerm, starting with CRTs and moving over to LCDs.
I don't think anything is more readable to me. It hit the sweet spot of being condensed enough for easy reading but still with highly legible individual characters too.
I have always wished someone could have made a scalable version to bring it into the future of high resolution displays.
Not OP but I set Atkinson Hyperlegible on my e-ink reader and it served me well. I feel my reading speed has improved. It is pretty wide though so to put more text on the page I decreased font height a bit.
Good observation, legibilty is not the same as readability. Hyperlegible fonts are used in places where it is crucial that the readers can identify the correct characters and/or short words – even if the readability suffers slightly.
Readable fonts are for longer form texts where the flow of reading is more important than correctly identfying individual characters.
Both have valid use cases and there are fonts who mange to do both pretty well.
Why don't we embrace proportional (i.e. not monospace) fonts more for coding? IMHO, they are a big step up when it comes to legibility. I personally switched after I noticed reading stuff in the sidebar (which is usually in a proportional font) felt more comfortable than reading code.
You can't use it for a terminal of course, and occasionally I find comments relying on monospace alignment. Other than that I see no downside to proportional fonts.
I use Input, which gives more room to special characters and is pretty nice overall: https://input.djr.com/
I fully agree that proportional fonts are nicer to read, even for code. When I tried to use it, I got annoyed by Go, which autoformats code with spaces to align stuff and that looks very ugly with a proportional font. The solution would be elastic tabstops [1], but that seems just to be a concept without actual support in any editor.
If you use a true proportional font, you give up aligning code elements other than basic indentation. For most people, that's too much to give up.
I do like quasi-proportional fonts like Iosevka Aile, where very wide or very narrow characters are allowed something more like their natural widths. I think, though I'm not sure, that the widths are worked out so that "Wl" (wide + narrow) is the same length as "xx" (2 x normal), for example. My experience using Iosevka Aile in Emacs is that things usually-but-not-always align like they're supposed to, which is a better trade-off than fully proportional fonts.
> If you use a true proportional font, you give up aligning code elements other than basic indentation.
Have you ever gotten deep into how tab stops work in Word?
The deeper you go the more you realize fun things like Tables are as much "Tab Stops with Borders" as they are a separate concept to Word. The UI/UX of both reflect each other.
WYSIWYG word processors and design tools have lots of ways to align proportional fonts.
The big thing is that to do it well they need a ton of metadata: this "paragraph" has tab stops at 1", 2", 4", and 5.5", two of the stops are right-justified and one is centered. Word makes it surprisingly easy to edit all of that metadata easily and visually in the Ruler up top.
If you are sticking to plain text documents that are easy to source control, where and how do you store that metadata? How do you keep it from being a distraction from the code you want to write?
It's not an insurmountable problem, we could do some really cool things if we tried. One half-baked thought off the top of my head here is that I bet you could do something rather cool with easily embedded CSS Grid descriptions in nearby comments and Tab/Newline-delimited sequences auto-populating cells in the grid. Given how much of our code is HTML rendered anyway and how ubiquitous HTML renderers are in our digital lives, CSS Grid isn't the worst model to reuse for something like this, and might be something someone could build a prototype with relatively quickly.
Typos feel way harder to spot in proportional fonts. Maybe because proportional fonts are easier to read so your brain subconsciously ignores them. And typos, like a misplaced or forgotten comma, can cause some of the most annoying bugs. Also, most editors still mostly operate on individual characters. With a fixed width font I can immediately see how many cursor up and cursor left commands I need to send to move the cursor to a specific position in the text.
You know, I've heard this idea about proportional fonts before and have been intrigued by the idea. I use Neovim running inside Alacritty as my code editor, though, so unsure if it'll work for me or not.
Going to check that font out - thank you for the suggestion. :)
That is the problem, though. I edit with neovim inside of wezterm. The few times I've seen proportional used for code, I've thought that it looked interesting but realistically, I live in a vt100 universe and all things considered, it's really not that bad.
I'm interested in Atkinson Hyperlegible Mono as a programming font. I think monospaced is a defining characteristic of programming fonts. Basically, legibility is just different for programming and text (although I clearly read too much Verdana).
Which IDE or editor are you viewing this proportional font in?
A proportional font in Emacs doesn't look right to my eye. My guess is that there are subtleties in the spacing between letters when a browser or a book publisher renders the text that Emacs does not know about.
Some people use proportional fonts in their IDEs, and have been for decades. It's just not exactly a mainstream practice. (I seem to recall that Microsoft used proportional fonts in their IDEs in the 90's. Or maybe I'm thinking of Visual Basic? Not sure.)
The main reason I have felt no inclination to use proportional fonts when coding is that proportional fonts tend to be _very_ bad at distinguishing homoglyphs and that is the _last_ thing you want when trying to find the syntax error or undefined variable. Although I will admit that I haven't look very hard for a proportional font that's actually meant for programming.
The other reason is that sometimes I read code where someone has created an ASCII diagram in the comments, or have other structures or whitespace where vertical alignment matters. (This used to be highly popular in C, although it's viewed as a bad practice in "modern" times.)
I find monospace code very easy to read, so I guess at the end of the day, proportional fonts have a few disadvantages with no real upside. For me at least.
Isn't it the opposite; use proportional fonts in the terminal but not code, where alignment matters? I am giving it a try, and I like it on first impression.
Well, the alignment is a pretty significant downside.
There are now some excellent mono faces that have broken from a lot of the traditional monospace design elements and that look and feel very much like proportional fonts. Quadraat sans mono, cartograph cf, triplicate, I've seen a good homebrew alegreya sans mono variant too. I don't know of any free ones, though inconsolata-g is well in that direction. But I expect more of this trend over the next few years.
It's not free, but I love it. You can customize some variations too (like how zeroes look; I use the "invisible slash" look) and it has some support for terminal symbols and programming ligatures used by terminal tweaks like Powerline, etc.
Same here. No other font comes close to it in terms of readability.
I really don't care about what each font claims about in terms of achiveness. As long as it's not pleasing to me, its not worth for me.
yep! I just got it the other day. I upgraded to get the variants but I quickly settled on the Regular which is included with $75 Dev license. It's amazing even using it for non-code like in Obsidian.
I moved to "Atkinson Hyperlegible" for all of my Note-taking/Reading, Markdown Editing, etc. And recently upgraded to "Atkinson Hyperlegible Next" beating my choices of iA Writer’s Fonts. We are spoiled for choice and they are all beautiful and super readable and comfortable.
Unfortunately, I found "Atkinson Hyperlegible Mono" (IDE/Terminal) to be a tad stunted for my liking. I wear glasses but not that bad and I like to use my computer without glasses. I personally like "Monaco" with a tad larger font-size. The other reason I try to stick to more common fonts and pick one of the better of them is to be able to use any IDE (helping/discussing with team members) and not feeling uncomfortable without "my favorite font."
Again, very personal, but I tried "Atkinson Hyperlegible" for the website for about a month or so and I found it to be neither modern, nor professional nor vintage/classic but more like the website warming up to the reader/visiter, “Hey, are you OK? Finding it hard to read, I'm going to make some scientific fixes to help you read!”
Good. That's a feature, not a bug. I want -> to render as a dash and a greater than sign. Not an arrow. I can't even articulate why, other than a deep seated distrust of magic.
Yep, modern fonts have features that can be enabled or disabled, depending on client support. IDEs typically allow to enable/disable ligatures and you also can control font features with CSS (see: https://developer.mozilla.org/en-US/docs/Web/CSS/font-featur...)
This is why I like 0xProto font. It has ligatures for a nice clean look, but preserves a little bit of spacing between characters so they're still legible as individual characters. It's also very readable and legible overall, with nice proportions.
And ligatures are a must for me because I find that symbols don't line up nicely in a ton of fonts and it annoys me a lot.
Adding to the list of 'this is what I am using', I have switched both terminal and code editor to Maple Mono[1]. Which, looking at TFA, seems to be somewhat similar in spirit as Atkinson Hyperlegible, although I haven't used that.
Maple has many ligatures, I personally like the hypervisible [TODO]. Overall I find it very legible, even on small sizes, and pleasing also for writing e.g. in Markdown.
Iosevka is the most terminaly of the modern vector programming fonts, outside of perhaps Terminus. I set my Emacs to use it, as I haven't been able to find a font that comes anywhere near as comfortable.
Over my embarrassingly long time of coding, I've gone through all of these fonts and more (VT100 anyone?) and eventually traded the sans-serif fixed-width fonts for ones with serifs, as it feels less tiring at the end of long days. For the last few years, I've used Monaspace [1] variants, especially Xenon, and enjoyed them immensely.
Fira Code uses the empty set character (∅) for zero. This mistake cost me a correct answer on a math test in 12th grade because I made the wrong slash.
Either that, or I made the correct slash and my teacher interpreted it incorrectly!
it's also inconvenient for Norwegians and Danes, since Ø is part of our alphabet. Slightly jealous of Sweden since they write it like Ö instead... Either way, big fan of dotted zeros for that reason.
Looks like a great, functional font. I'm also a fan of Adobe Source Code Mono, but the look and feel of Berkeley Mono just wiped the floor of all these professional and well designed fonts.
IBM's Plex Mono also a great contender for a "professional" programming font.
I switched to it after more than 12 years with Consolas, expecting to quickly get bored of it, like every other time I had a brief affair with a different font. But One Mono stuck!
My favorite of these programmer fonts is PragmataPro, which I bought around 5 years ago. I like how it’s denser while still being easy to read.
Only problem is that it doesn’t have all the nerd font glyphs so it can’t handle the nice oh-my-zsh themes well, like the powerline-10k theme. I still use it despite that though.
Same here, PragmataPro stopped me from switching fonts. Maybe because it was so expensive ;)
It just has a lot of attention to detail and polish.
I was using IBM Plex Mono and Iosevka before.
"Mirror image glyphs occur when flipping one character creates another"
About a half of the article is about these "mirror image glyphs". Why would they be a problem for the proclaimed purpose of character distinction? Has anyone ever mixed up "b" and "q"?
This is a fair question/critique. As I understand it, this is a particular consideration for coders and readers with dyslexia, as they flip the letters. The thought process is that by making the characters distinct, it reduces this problem.
I learned about mirror glyphs through a document linked in the Accessible Perceptual Contrast Algorithm (APCA) website. For context, APCA is the system that aims to supplant current color calculation methods in the Web Content Accessibility Guidelines (WCAG).
I had a nice little chuckle when reading the intro paragraph:
> As software developers, we always strive for better tools but rarely consider a font as such.
We must travel in different circles, it feels to me like half the developers on HN, blogs, and social media are WAY more concerned with the aesthetic of their development environment than actually getting any real work done with it!
I think it's because traditionally computer screens have pretty low DPI, and serifs can be really tricky to render well at low DPI. In print, that's not an issue, and serif fonts really shine.
On high-DPI screens, like the one I'm currently using, serif monospace fonts can also look really good. For example, I'm typing in Latin Modern Mono (based on TeX's default typewriter font) in this text box.
Luxi Mono is great. Do you have an opinion on Go Mono [1]? It's by the same creators as the Luxi fonts (Bigelow & Holmes) and very similar to Luxi Mono but fixes some legibility issues. Moreover, it's freely licensed.
Coming from Commit Mono, Atkinson looks a bit unusual. But I think I can get used to it. I think the comparison to Fira Code is valid, because in the terminal Atkinson looks almost like Fira Mono, but better. Since I usually sit a meter away from the screen, I can appreciate the extra legibility of this font.
Also, it's great that it's available as a Nerd variant. It makes it super easy to install on Linux with Embellish.
What I have found with these fonts (and I have tried them all) is that one isn't really much better than an another, but instead I have to switch between them (and others) because eventually I get sick of every single one of them.
I don't know. I like all the fonts, they're good. But looking at them for long periods of time makes me tired of looking at them and I just need to switch. You might as well ask me why I get tired of a certain food if I eat it too often.
Oh, OK. I asked, because sometimes people doesn't like a certain aspect of a font and can't stand it, and need to switch. Also, I'm also the exact opposite of you. I can use a font I like for a decade without getting tired of it. Same for a good color scheme for my terminals / IDE.
So it was a genuine curiosity of me. Sorry if it sounded rude or accusatory or similar.
> It's quite interesting to find someone who can use the same one over and over.
I like to solve some problems once, and once I solve them sufficiently, I don't prefer to touch them, so I can focus on other things. It's not that I don't look for better solutions, but I don't actively seek them.
Same is true for tools. I prefer to master a single tool over the years to jump from tool to tool.
I checked it out, it looks pretty great! That being said, I actually quit my full-time developer job so no longer can justify that sort of expense, haha!
IBM Plex has CJK variants. As do Adobe's Source and Google's Noto. As I need those variants from time to time I'm not interested in fonts that don't have them.
For some reason, the Atkinson 8 looks really horrible to me, the bottom half being a flat oval just looks wrong. Ive been using Jetbrains Mono in my IDEs for a while now and I love it =)
Since we're sharing our monospace fonts of choice, I use mononoki. My vision isn't great, and this is the font I've found that allows me to pack the most on my screen while still remaining readable.
This font was just added to codingfont a few minutes ago! https://www.codingfont.com/AtkinsonHyperlegibleMono you can compare it side by side to your other favorite coding font to see which one is better looking in a code editor!
You may also play the blindfold game to see if it will TRULY wins against all others in a blind test on codingfont.com
Thing is Atkinson Hyperlegible is "what if we made a non-monospace font with monospace like, distinct characters?" so the Mono version doesn't have much of a point. For text or code, it looks worse to me than the alternatives.
This is of course subjective, but I still find JetBrains Mono to be much more pleasant to read (when it comes to code) than any other mono font out there.
I also found this and actually made it the default for an application I author with a few thousand users. Well it turned out jetbrains mono didn't support chinese characters so I broke my app for a proportion of my user base. I had to revert it. Also it can add seconds to load time. Just a warning as I think a few people on hn will make tools for others. I still set it as my own font.
You can always subset different fonts for different languages. This does two things: reduces the file size and allows some agents, such as your browser, load specific font depending on unicode range.
I use Atkinson Hyperlegible for my blog[1]. Really happy to see the new version adds variable weight. That was the main thing I didn't like about the original version.
Fira fonts, another Mozilla contribution to the world. We had these designed for Firefox OS (in concert with Telefónica.) Nice to see some of that effort endures, even if only in type.
I read your post, but I'm like, who cares?! The differences are negligible and I'm convinced the article creates a problem out of thin air, proposes a subjective solution with arguments originating in a personal preference.
In Safari only (noticed on iOS but reproducible in desktop Safari with responsive design mode) the images appear to be keeping their height constant when they scale down their width. Changing "height: fit-content" to "height: auto" seems to fix it.
Ah, that does indeed appear squished! I'm glad someone said something. Thank you for following up with the additional information. It should be fixed now.
> Fira Code uses uniform length for +, =, and -. - and _ share similar length. The /\ characters join together and render smaller compared to the other fonts.
This "joining" is a ligatures thing, I'm almost certain, at least for `<>`. I can't for the life of me get anything on macOS to render `/\` as joined, though. Stumped. I've no preference either way, it's just weird to see a familiar font rendered so strangely. Maybe it's a Windows font rendering thing ?
A very fair comparison, though I'd argue legibility isn't always worthwhile; the MICR (?) fonts on checks are quite legible (perhaps machine-legible) but too weird to use.
also, TIL IntelliJ bundles Fira Code for quite some time now
Interesting to see the font rendering differences crop up, I haven't tested on anything except Linux. For context, I wrote a hacky shell script that uses Harfbuzz and ImageMagick to generate the comparison images in a Fedora 41 virtual machine. It's possible that something in that software stack causes the characters to render differently.
It seems I'm the only person who likes fonts that deliberately exaggerate their edges to better align with a pixel grid. All of these font comparisons always compare pretty smooth and round fonts to each other. Apart from minor details, the comparisons look the same. But I actually like this design most: https://hajo.me/images/HajoCode16px_hr.png On a 9x16 pixel grid, that'll have really sharp contrasts, just like good old Windows 98 before subpixel antialiasing.
It just occurred to me that if HN supported, say, 4-bit mono PNG images with transparency in comments, that would help here without impacting bandwidth too much and might add a classy element
The visual comparisons use examples from an accessibility paper on homoglyphs and mirror glyphs. I chose JetBrains Mono and Fira Code as a baseline, since many developers use these fonts and find them familiar.
While Atkinson Hyperlegible Mono excels at character distinction, nothing is perfect. I detail trade-offs in the "Caveats" section, below the installation instructions.
I'm curious to hear others' experiences and thoughts. I'm fascinated by what role font choice plays in legibility and accessibility, but the research is relatively sparse in this area.
This particular font seems to have very inconsistent kerning. The "isMultipleOf" identifier pushes the s & M & u and e & O way too tightly together, and the remaining letters seem inconsistently spaced as well.
For what it's worth, I generated the comparison images with Harfbuzz and ImageMagick, so in theory I could publish the script and then anyone could make their own comparison images. Fair warning: it's a quick and dirty shell script, written only to get the job done.
My impression is that while legible it is too fat. You'll notice that Fira Code and JetBrains Mono are similarly wide -- and narrower than Atkinson Hyperlegible Mono.
https://github.com/googlefonts/atkinson-hyperlegible-next-mo...
I'd recommend getting it from there rather than the Braille Institute's website since they require an email and EULA, but here's the other download link anyway.
https://www.brailleinstitute.org/freefont/
Also, Nerd Fonts added Atkinson Hyperlegible Mono in their v3.4.0 release.
https://github.com/ryanoasis/nerd-fonts/releases/tag/v3.4.0
With Nerd Fonts, I'd recommend downloading both and setting up a fallback system through fontconfig though. Unfortunately, some versions (Nerd Fonts, official download) are still missing the backtick/grave glyph.
https://github.com/googlefonts/atkinson-hyperlegible-next-mo...
Additionally the legibility metric used by the site isn’t even quantitative. It’s qualitative and opinionated so it’s not like there was an objective measure that says Atkinson is in actuality more hyperlegible… the hyper legibility is an opinion.
Legibility refers to how easily individual characters can be identified. But good readability depends on how easily your brain can recognize whole words—through pattern recognition of word shapes.
When characters are too similar in shape and size, it becomes harder to distinguish the unique shape of each word, which reduces readability (which often happens with these highly legible fonts) — even if each individual letter is technically more clear.
And then there are fonts that I don't like aesthetically and generally avoid, but come to the rescue in the wee hours of the morning when you really have to get something done and your eyes have gone blurry.
For example, if you grew up in an English-speaking country, your computer likely defaulted to Arial or Helvetica as its sans-serif font. Over time, your brain became familiar with how words looked in those typefaces—their proportions and shapes.
Because fonts like Inter and SF share similar proportions, your brain finds them easier to process, which makes them feel more readable.
I don't think anything is more readable to me. It hit the sweet spot of being condensed enough for easy reading but still with highly legible individual characters too.
I have always wished someone could have made a scalable version to bring it into the future of high resolution displays.
On HN: https://news.ycombinator.com/item?id=40590910
https://terminus-font.sourceforge.net/
https://files.ax86.net/terminus-ttf/
I am thinking about the regular one on text, not mono on code.
Readable fonts are for longer form texts where the flow of reading is more important than correctly identfying individual characters.
Both have valid use cases and there are fonts who mange to do both pretty well.
You can't use it for a terminal of course, and occasionally I find comments relying on monospace alignment. Other than that I see no downside to proportional fonts.
I use Input, which gives more room to special characters and is pretty nice overall: https://input.djr.com/
[1] https://nick-gravgaard.com/elastic-tabstops/
I do like quasi-proportional fonts like Iosevka Aile, where very wide or very narrow characters are allowed something more like their natural widths. I think, though I'm not sure, that the widths are worked out so that "Wl" (wide + narrow) is the same length as "xx" (2 x normal), for example. My experience using Iosevka Aile in Emacs is that things usually-but-not-always align like they're supposed to, which is a better trade-off than fully proportional fonts.
Have you ever gotten deep into how tab stops work in Word?
The deeper you go the more you realize fun things like Tables are as much "Tab Stops with Borders" as they are a separate concept to Word. The UI/UX of both reflect each other.
WYSIWYG word processors and design tools have lots of ways to align proportional fonts.
The big thing is that to do it well they need a ton of metadata: this "paragraph" has tab stops at 1", 2", 4", and 5.5", two of the stops are right-justified and one is centered. Word makes it surprisingly easy to edit all of that metadata easily and visually in the Ruler up top.
If you are sticking to plain text documents that are easy to source control, where and how do you store that metadata? How do you keep it from being a distraction from the code you want to write?
It's not an insurmountable problem, we could do some really cool things if we tried. One half-baked thought off the top of my head here is that I bet you could do something rather cool with easily embedded CSS Grid descriptions in nearby comments and Tab/Newline-delimited sequences auto-populating cells in the grid. Given how much of our code is HTML rendered anyway and how ubiquitous HTML renderers are in our digital lives, CSS Grid isn't the worst model to reuse for something like this, and might be something someone could build a prototype with relatively quickly.
Going to check that font out - thank you for the suggestion. :)
That is the problem, though. I edit with neovim inside of wezterm. The few times I've seen proportional used for code, I've thought that it looked interesting but realistically, I live in a vt100 universe and all things considered, it's really not that bad.
I'm interested in Atkinson Hyperlegible Mono as a programming font. I think monospaced is a defining characteristic of programming fonts. Basically, legibility is just different for programming and text (although I clearly read too much Verdana).
For example, it could switch to a monospace font when a "fullscreen" program like vim switches to the other buffer.
Or maybe it could even render different fonts per line.
A proportional font in Emacs doesn't look right to my eye. My guess is that there are subtleties in the spacing between letters when a browser or a book publisher renders the text that Emacs does not know about.
The main reason I have felt no inclination to use proportional fonts when coding is that proportional fonts tend to be _very_ bad at distinguishing homoglyphs and that is the _last_ thing you want when trying to find the syntax error or undefined variable. Although I will admit that I haven't look very hard for a proportional font that's actually meant for programming.
The other reason is that sometimes I read code where someone has created an ASCII diagram in the comments, or have other structures or whitespace where vertical alignment matters. (This used to be highly popular in C, although it's viewed as a bad practice in "modern" times.)
I find monospace code very easy to read, so I guess at the end of the day, proportional fonts have a few disadvantages with no real upside. For me at least.
In code, you can always choose a style that discourages spatial alignment.
How do you vertically align by =
Your suggestion is not only much worse by joining the columns, wasting more space, but it's also invalid in many syntaxes
There are now some excellent mono faces that have broken from a lot of the traditional monospace design elements and that look and feel very much like proportional fonts. Quadraat sans mono, cartograph cf, triplicate, I've seen a good homebrew alegreya sans mono variant too. I don't know of any free ones, though inconsolata-g is well in that direction. But I expect more of this trend over the next few years.
It's not free, but I love it. You can customize some variations too (like how zeroes look; I use the "invisible slash" look) and it has some support for terminal symbols and programming ligatures used by terminal tweaks like Powerline, etc.
Unfortunately, I found "Atkinson Hyperlegible Mono" (IDE/Terminal) to be a tad stunted for my liking. I wear glasses but not that bad and I like to use my computer without glasses. I personally like "Monaco" with a tad larger font-size. The other reason I try to stick to more common fonts and pick one of the better of them is to be able to use any IDE (helping/discussing with team members) and not feeling uncomfortable without "my favorite font."
Again, very personal, but I tried "Atkinson Hyperlegible" for the website for about a month or so and I found it to be neither modern, nor professional nor vintage/classic but more like the website warming up to the reader/visiter, “Hey, are you OK? Finding it hard to read, I'm going to make some scientific fixes to help you read!”
Good. That's a feature, not a bug. I want -> to render as a dash and a greater than sign. Not an arrow. I can't even articulate why, other than a deep seated distrust of magic.
Which editors on which OS's provide a toggle for that?
Sublime Text: Set "font_options" to "dlig". There are other settings to choose which character tables are allowed to use ligatures or not.
Visual Studio Code: Set "editor.fontLigatures" to "true". You can also put CSS font features to choose which ligatures you want to enable.
And then you run Vim or Emacs in said terminal...
And ligatures are a must for me because I find that symbols don't line up nicely in a ton of fonts and it annoys me a lot.
It's ideal for 'wordy' languages such as C++ where a typical line length can often go over 150 characters, and then you don't have to scroll sideways.
Maple has many ligatures, I personally like the hypervisible [TODO]. Overall I find it very legible, even on small sizes, and pleasing also for writing e.g. in Markdown.
[1] https://font.subf.dev/en/ / https://github.com/subframe7536/maple-font
The ligatures for keywords is clever. I appreciate those niceties. Like rendering small gaps in large numbers, eg '1000000' looks like '1 000 000'.
IIRC Berkeley or Monospaced have a few neat tricks like that.
1. https://monaspace.githubnext.com/
Either that, or I made the correct slash and my teacher interpreted it incorrectly!
designed for low-vision developers.
IBM's Plex Mono also a great contender for a "professional" programming font.
Here's an interesting take on the two: https://neil.computer/notes/berkeley-mono-december-update/
See if you can figure why I linked this one.
---
More about Andalé: https://en.wikipedia.org/wiki/Andalé_Mono
This conversation may still be going on 20 years from now: https://nedbatchelder.com/blog/200602/monospace_fonts_compar...
Nice we have more choice since this capture in 2006: https://www.donationcoder.com/forum/?topic=2499.0
Only problem is that it doesn’t have all the nerd font glyphs so it can’t handle the nice oh-my-zsh themes well, like the powerline-10k theme. I still use it despite that though.
About a half of the article is about these "mirror image glyphs". Why would they be a problem for the proclaimed purpose of character distinction? Has anyone ever mixed up "b" and "q"?
I learned about mirror glyphs through a document linked in the Accessible Perceptual Contrast Algorithm (APCA) website. For context, APCA is the system that aims to supplant current color calculation methods in the Web Content Accessibility Guidelines (WCAG).
https://apcacontrast.com/
https://www.researchgate.net/publication/338149302_Evaluatin...
The real reason it’s important is that for some the glyphs are too much alike and can be confused. The brain may rotate of flips things sometimes.
https://www.monolisa.dev/
> As software developers, we always strive for better tools but rarely consider a font as such.
We must travel in different circles, it feels to me like half the developers on HN, blogs, and social media are WAY more concerned with the aesthetic of their development environment than actually getting any real work done with it!
Why not use a monospaced serif font in the first place? I get that they don't seem to be common, but maybe they should be.
On high-DPI screens, like the one I'm currently using, serif monospace fonts can also look really good. For example, I'm typing in Latin Modern Mono (based on TeX's default typewriter font) in this text box.
[1] https://go.dev/blog/go-fonts
Also, it's great that it's available as a Nerd variant. It makes it super easy to install on Linux with Embellish.
Can I ask why?
So it was a genuine curiosity of me. Sorry if it sounded rude or accusatory or similar.
Yeah, certainly.
> It's quite interesting to find someone who can use the same one over and over.
I like to solve some problems once, and once I solve them sufficiently, I don't prefer to touch them, so I can focus on other things. It's not that I don't look for better solutions, but I don't actively seek them.
Same is true for tools. I prefer to master a single tool over the years to jump from tool to tool.
I'm not that young, so using it makes my computer a little cozier and friendlier, without sacrificing any readability or font quality. =D
If you wanna take a look, it's at https://usgraphics.com/products/berkeley-mono
https://github.com/madmalik/mononoki
That said, the differences between 0 and 8, while better than my previous favorites, still aren't as stark as I'd like them to be.
I wrote a post about subsetting, in context of my personal site, here: https://www.naiyerasif.com/post/2024/06/27/how-i-subset-font...
[1] https://adamhl.dev
Available on Homebrew: https://formulae.brew.sh/cask/font-atkinson-hyperlegible#def...
May be worded differently, like: it doesn't support ligatures, but it doesn't affect me because I don't use them.
- What do you mean by squished?
- What device and browser are you using?
- Are all images affected or just certain ones?
A screenshot would help a lot if possible.
https://imgur.com/a/TENOrZh
> Fira Code uses uniform length for +, =, and -. - and _ share similar length. The /\ characters join together and render smaller compared to the other fonts.
This "joining" is a ligatures thing, I'm almost certain, at least for `<>`. I can't for the life of me get anything on macOS to render `/\` as joined, though. Stumped. I've no preference either way, it's just weird to see a familiar font rendered so strangely. Maybe it's a Windows font rendering thing ?
A very fair comparison, though I'd argue legibility isn't always worthwhile; the MICR (?) fonts on checks are quite legible (perhaps machine-legible) but too weird to use.
also, TIL IntelliJ bundles Fira Code for quite some time now
But in any case, the correct font for coding is Cascadia Code. I don’t know why more Linux people don’t use it. Just because it’s from Microsoft?
https://github.com/microsoft/cascadia-code