Fixedsys Excelsior: an 8x16 bitmap font rebuilt with programming ligatures
Fixedsys Excelsior font with programming ligatures
At a glance
- What is it?
- Fixedsys Excelsior was an old Windows and DOS bitmap font, and this repository is a derivative that redraws it as TrueType outlines, adds programming ligatures and ships two variants, one default and one that swaps fat arrows for comparison operators. It suits someone who reads code in an 8x16 face, and it comes with a fixed size and an antialiasing caveat that a modern outline font does not have.
- Who is it for?
- Adopt Fixedsys Excelsior if you want a console and editor face that looks like the DOS era and you are willing to use it at exactly 16 pixels with antialiasing off, because the font is a simulation of a bitmap and the glyph outlines only line up at that size. Do not adopt it as a general code font unless you specifically want the 8x16 bitmap look.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A derivative, not an original
This repository is the Fixedsys Excelsior font with programming ligatures, and the distribution terms section is careful about where it came from.
The font was originally authored by Darien Valentine, known as @bathos, and provided through a site at fixedsysexcelsior.com that is now defunct. This derivative's source code repository and issue tracker live at github.com/kika/fixedsys, which is the repository you are reading, and the maintainer is Kirill Pertsev.
The licensing is handled in two layers, which is the correct way to do it for this situation. The creator released the content to the public domain, and for jurisdictions where that is not permitted, it is released under the Creative Commons Zero Dedication. So there is no licence friction for anyone, including commercial users, and there is an explicit statement rather than an implied one.
The reason a derivative exists at all is in the Rationale section, and it is a personal story rather than a design argument. The author was jealous of people using Fira Code, Hasklig or Monoid, but had a hard time reading, not even mentioning writing, a computer program in anything but an 8x16 font. He suspected he had spent too much time with older computers, and after losing uphill battles with Glyph2, Fontlab and Fontforge, he discovered TTX and was finally able to stop being jealous.
That is the origin of the whole project, and it sets the expectation. This is a font for a very specific person, and a very small set of people, who want their code editor to look the way their childhood machine did.
The bitmap origins, and why the size is fixed
The History section explains the constraint that defines the font, and it is worth reading carefully before you install it.
The font is a simulated 8x16 bitmap font from old Windows and DOS. It was truly monospaced and really bitmapped, and it initially contained only windows-1250, windows-1251, a subset of windows-1252, windows-1253 and windows-1254.
Darien simulated the bitmap with TrueType outlines by building the font from 10x10 squares, the pixels, and then joining the squares together. That construction has an immediate consequence, stated plainly: the font only works as intended in only one size and usually with antialiasing switched off. The size is 16 pixels, or 12pt at 96dpi.
So the outlines in the TTF file are not outlines in the usual sense. They are a set of squares that the rasteriser has to hit exactly. At 16 pixels with antialiasing off, the squares land on the pixel grid and the font looks like the bitmap it simulates. At any other size, or with smoothing on, the edges of the squares soften and the crispness that is the entire point disappears.
Darien also added a lot of foreign characters and made the font Unicode, which is why a derivative built on top of it can carry the symbol additions this project adds without inventing a new character set.
The Tech trivia section adds the technical detail. The font is distributed in binary TTF format, and the maintainer decompiled it with TTX, added a few symbols inspired by Fira Code, and created the necessary ligatures. The symbols were designed on quad lined paper with a pencil and a rubber eraser, as the README puts it, like in good old days.
The repository also carries a 2026 addition, a folder called fsexedit containing a simple Rust program, described in the README as vibecoded slop, that allows editing and creating individual glyphs and ligatures. That is the tool that makes the project maintainable, since editing a font by hand in a TTF editor is the reason the author lost the earlier battles.
Two variants, and the arrow versus operator trade
The compiled TTF binaries are on the Releases page, and there are two of them, and the difference between them is worth understanding before you pick one.
The default version has the sequences for less-or-equal and greater-or-equal ligated into those operators. The alt version instead enables the less-than-or-equal sequence and the greater-than-or-equal one, replacing the reverse fat arrow, and the README notes that it closes an issue.
The reason is that the fonts declare ligatures that replace certain groups of adjacent characters with a combined glyph, and the default mapping collides with the fat arrow. In a programming context the less-than-or-equal sequence is almost always meant to be a less-or-equal operator, and the same presumption is applied to left fat arrows, which the README says are seldom used even in scientific texts.
The table shows exactly what each variant does with each input.
| Input | Normal variant | ALT variant | |------- | ---------------- | ---------------- | | `<=` | left fat arrow | less-or-equal | | `<==` | left fat arrow | left fat arrow | | `=>` | right fat arrow | right fat arrow | | `=<` | less-or-equal | (no ligature) | | `>=` | greater-or-equal | greater-or-equal | | `>==` | (no ligature) | (no ligature) |
The last release listed is v3.09.10, from February 2026, with a note that some arrows used on the keyboards and a lock symbol were added, and the version before that, v3.02.9, is from November 2017, so the recent work has been on the symbol set rather than on the version number.
How the font is built
The build is unusual, and understanding it explains the file layout.
The font is distributed in binary TTF format, and the source of truth in the repository is FSEX.ttx, the XML form that fonttools uses. To create a TTF from it you run ttx with the overwrite flag, and there is an OS X Makefile that also copies the font to the user Fonts folder and updates the font cache.
The Makefile shows the pipeline in three steps, and the preprocessing is the part that is not obvious. Both variants are produced from the same FSEX.ttx by running it through the C preprocessor, and the alt variant is defined with a define, ALT_LESSEQUAL, that switches the ligature declarations. Comments are then stripped from the output.
FSEX-default.ttx: FSEX.ttx
$(CPP) $< |grep -v "^#" > $@
FSEX-alt.ttx: FSEX.ttx
$(CPP) -DALT_LESSEQUAL $< |grep -v "^#" > $@So the difference between the two builds is a preprocessor flag, not a second file, which is the cleanest way to do it. The compile step uses ttx with the recalculate timestamp option, and the default build also copies the result into the Fonts directory and removes the font cache before rebuilding it, which is why the make target only works comfortably on a Mac.
The list of supported programming ligatures lives in the ligatures.txt file at the repository root, which is the reference if you want to know what the font will rewrite in your source code.
Editor setup, and where the ligatures do not work
The supported software section is the most practically useful part of the README, and it is honest about the failures.
The author only tested in MacVim, which is the only editor he uses, and notes that MacVim should be quite recent for ligatures to work. There is a specific caveat, that versions of MacVim above 8.1-146 seem to have a regression where ligatures are not displayed correctly, with a tracking issue linked and a suggestion to pin the version with brew until it is fixed.
set guifont=Fixedsys\ Excelsior:h16
set noanti
set macligaturesThe noanti line is the antialiasing switch, and the height of 16 in the font specification is the fixed size.
On Windows with IDEA, the report is that the Oracle JDK renders the ligatures but has problems with the latin capital A, which occupies no space and gets composed with the next character, and the JetBrains JDK shows no problems. For VS Code the settings are given in two forms, one for the general case and one for newer versions with the font name including the version number, and for macOS the note is that the font was not designed to be used with antialiasing, so a workbench font aliasing setting of none makes the editor look right while the rest of the interface looks worse, with a linked script for patching the VS Code CSS to fix that.
Visual Studio 2015 works mostly okay but the arrow ligature does not work, which is a known problem with the WPF text renderer. ConEmu has no ligatures at all, though the powerline symbols work, and the recommendation is to set the cell width manually to 8 so line wrapping and the interface render properly.
The Emacs entry, contributed by someone else, is the most involved, and it requires moving the U+10001 private use area block to the first private use area block, with an example fontset line and a set of font-lock keywords that compose the ligatures.
The practical catch, and who this is for
The honest assessment of this project is that it is a very good implementation of a very specific idea, and the idea will only appeal to a small group.
The constraint is the 8x16 bitmap simulation. The glyphs are built from 10x10 squares joined into outlines, which means the font renders as intended at exactly 16 pixels with antialiasing off. Everywhere else it is a rough approximation of something that was designed to be pixel perfect. The author describes his envy of people using Fira Code, Hasklig and Monoid before he found TTX.
So the choice is between a font that looks like 1995 and one that looks like 2026, and the reason to pick this one is nostalgia and legibility for a specific reader, not technical merit.
What the project does add on top of the original is real work. The symbols inspired by Fira Code were drawn by hand on squared paper, the ligatures are original, the arrow and operator conflict was resolved with a second variant rather than by leaving it broken, and the Rust tool in the fsexedit directory makes it possible to add a glyph without a font editor.
And the README ends with the right note for a project like this. The author hopes he is not the only crazy guy on the internet using an 8x16 font for consoles and text editing, and if you are the kind of person who wants that, you now have a modern build of it with ligatures, a second variant and a maintained tool for extending it.
Editorial conclusion
Adopt Fixedsys Excelsior if you want a console and editor face that looks like the DOS era and you are willing to use it at exactly 16 pixels with antialiasing off, because the font is a simulation of a bitmap and the glyph outlines only line up at that size. Do not adopt it as a general code font unless you specifically want the 8x16 bitmap look. Before you install the alternate variant, read the ligature table, because the swap between fat arrows and comparison operators is a real behavioural difference in how the source text looks, not a cosmetic preference.
Frequently asked questions
What is Fixedsys Excelsior and who owns it?
It is an 8x16 bitmap font from old Windows and DOS, originally authored by Darien Valentine and provided through the now-defunct fixedsysexcelsior.com. This repository is a derivative by Kirill Pertsev that adds programming ligatures, released to the public domain, or under CC0 where public domain dedication is not permitted.
What is the difference between the two Fixedsys Excelsior variants?
The default variant ligates the less-or-equal and greater-or-equal sequences into operators, while the ALT variant instead enables the less-than-or-equal sequence and the greater-than-or-equal one, replacing the reverse fat arrow. The choice is between fat arrow shapes and comparison operator shapes for the same input.
What size should Fixedsys Excelsior be used at?
The font is a simulation of an 8x16 bitmap built from 10x10 squares joined into TrueType outlines, so it only works as intended in one size, 16 pixels or 12pt at 96dpi, and usually with antialiasing switched off. The repository examples set noanti alongside the font size.
How do I build the font from the repository sources?
The source of truth is FSEX.ttx, and you run ttx with the overwrite flag to produce the TTF, or use the OS X Makefile, which also copies the font into the user Fonts folder and updates the font cache. The Makefile builds both variants by running the TTX through the C preprocessor, with the ALT_LESSEQUAL define selecting the alternate ligature set.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/kika-fixedsys)Was this useful?