Commit Mono, a very nice coding font, customized
I read a lot of code, and on some days it is indeed most of my day. And it is not only code: the best coding harnesses like Pi and OpenCode work in the terminal, so all the conversations with AI agents are in a monospaced font as well. So this font is something I look at more than anything else. Recently one of my colleagues recommended me Commit Mono, and compared to other monospaced fonts I tried it is very nice to read. It looks calm and neutral, and words look more like normal words and not like a row of letters in boxes.
The font website has a lot of customization settings out of the box, so I picked the ones I liked and downloaded a customized build. Then I wanted letters a bit taller, which is not possible on the website, so on top of that I added one vertical stretch with a small Python script. All the real work of designing the font was done by its author, my part is only some settings and this one tweak. In this article I want to describe what makes Commit Mono so good and how I customized it.
My customized build is called CommitMonoOlekV4, and it can be downloaded at the end of this post. It is also used now for all code on this website, so all code snippets here are in fact a demo.
Neutral programming typeface
Commit Mono is made by Eigil Nikolajsen. On the website it is described as "an anonymous and neutral coding font focused on creating a better reading experience". The idea is that a coding font should not attract attention to itself. The website quotes the Super Normal Manifesto by Jasper Morrison:
There are better ways to design than putting a big effort into making something look special. Special is generally less useful than normal, and less rewarding in the long term.
Since most code is written using ASCII characters, these characters got the most attention. Also characters which are easy to confuse (like 0 and O, 1, l and I) are clearly different, and there is even a small game "Guess the Character" on the website to check it.
Smart kerning
The feature I like the most is smart kerning. In a normal monospaced font every letter is centered in a box of the same width. This is fine for m or w, but narrow letters like i, l or r get a lot of empty space around them, and words look uneven, with holes inside.
Commit Mono still keeps every letter in a box of the same width, so columns are aligned and nothing breaks in the editor. But it looks at each letter between its two neighbours. If the neighbours are of different width classes, the middle letter slides a little bit closer to the narrow one. The website shows this with the word "moi": the o is moved 44 units to the right (of 1000 units in the font size), so the space between m, o and i becomes even. The same is applied to all letters, and the author says it "improves overall word spacing and makes sublexical units easier to tell apart, therefore improving reading speed and accuracy".
Here you can try it yourself. Switch the toggle and look at the double m in "programming", this is where the difference is the most noticeable:
Programming with
Commit Mono font
summary, commit, minimum, illusion
With kerning off, the two m letters are squeezed into their boxes and look glued together, while narrow letters like i and l are surrounded by holes. With kerning on, the spacing is much more even.
Technically all of this is done with the standard OpenType feature calt (contextual alternates), so it is not real kerning: each letter has several shifted copies, and the font picks the right one depending on neighbours. In code editors it is switched on together with ligatures. For example in VS Code these two settings are needed:
"editor.fontFamily": "CommitMonoOlekV4",
"editor.fontLigatures": true,
Browsers enable calt by default, so on web pages it just works.
Customizing on the website
Another nice thing is that commitmono.com generates the font right in the browser with your own settings. It is possible to choose:
- Weight. The recommendation is 400 for dark mode and 450 for light mode.
- Letter spacing. It does not change the letters, only the space between them.
- Line height.
- Features and alternate characters. Chosen alternates are baked into the font, so they work without any special settings.
- A custom name, so the font becomes
CommitMono-YourName. This is useful to have several versions installed at the same time.
So I just chose the settings and named the result CommitMonoOlekV2: weight 450, a bit tighter letter spacing (580 units per letter instead of 600) and taller line height. Everything else is the original Commit Mono. It is licensed under the SIL Open Font License, so it is fine to modify it and share modified versions.
Making letters taller
After a couple of days of using it I wanted letters to be a bit taller, while keeping the same width. This is not something that the website can do: line height only adds space between lines, and the letters stay the same.
So I asked an AI agent to help. I used Pi, a coding agent, with GPT-5.6 Sol model (in September 2026). It installed fontTools, a Python library for reading and writing font files, and wrote a script that stretches all glyphs vertically.
Commit Mono files are OpenType fonts with CFF outlines. The script draws every glyph through a transform pen, which multiplies all Y coordinates and keeps X coordinates and widths as they were. Here is the main part:
SCALE_Y = 1.05
font = TTFont(source, recalcBBoxes=True, recalcTimestamp=False)
glyph_set = font.getGlyphSet()
cff = font["CFF "].cff
top = cff.topDictIndex[0]
transform = Transform(1, 0, 0, SCALE_Y, 0, 0)
for glyph_name in font.getGlyphOrder():
width = font["hmtx"][glyph_name][0]
pen = T2CharStringPen(width, glyph_set)
glyph_set[glyph_name].draw(TransformPen(pen, transform))
top.CharStrings[glyph_name] = pen.getCharString(
private=top.Private, globalSubrs=cff.GlobalSubrs
)
Stretching only the glyphs is not enough, because then tall letters would be cut and lines would overlap. So all vertical metrics are multiplied by the same factor: ascender and descender in hhea and OS/2 tables, Windows clipping values, sub- and superscript positions, strikeout and underline. Then the family name is replaced in the name and CFF tables, so the new version can be installed next to the old one.
The first try was 10% taller, and it was called V3. After testing it in the editor it turned out to be too much, so V4 is 5% taller than V2. The text still takes the same width on the screen, only lines are a bit higher.
Is it still the same font?
The new files were noticeably smaller than V2, about 213 KB instead of 275 KB. That was suspicious, so I asked to compare everything. The agent checked that both versions have the same 1932 glyphs in the same order, the same 1175 Unicode characters, the same widths, and a byte-identical GSUB table, which contains smart kerning and all other features.
The smaller size comes from a more compact encoding. fontTools writes the outlines with shorter drawing commands. And the old file stored the same advance width separately for each of the 1932 glyphs, while in a monospaced font it can be stored only once.
Download
Here are the files of CommitMonoOlekV4, ready to install:
- CommitMonoOlekV4-450-Regular.otf
- CommitMonoOlekV4-450-Italic.otf
- CommitMonoOlekV4-700-Regular.otf
- CommitMonoOlekV4-700-Italic.otf
- or all of them in one archive: CommitMonoOlekV4.zip
The font is licensed under the SIL Open Font License, same as the original. On a Mac the files can be installed with Font Book, on Windows with right click and "Install". After that restart the editor and select CommitMonoOlekV4 as the font.
If you want to make your own version, start at commitmono.com, it is really worth a try.