UnifontEX

An extended fork of GNU Unifont with a focus on high compatibility (and accessibility too, among other things), made from the last TrueType version of GNU Unifont (15.0.06-JP, which is the most comprehensive), merged with the last version of Upper that will successfully merge after removing the placeholders (11.0.01 Upper). I then did several compatibility steps to make it work under more environments, such as taking SEVERAL measures to make the font work in environments that only want monospace fonts (which Unifont is closer to than something like Times New Roman), as well as fixing the TeX table (among other structures, including stuff like the Panose and OS/2 stuff, among other things), activating Vertical Metrics to make Inkscape not reject it when dealing with Vertical CJKV text (the VDMX table and the BASE table’s vertical section also help), and making the output TTF work best on ALL OS choices. I also used TTF2PNG by Data Beaver’s Domain (plus GIMP to make it true 1bpp) to make an unabridged 1 megabyte PNG of the font, for use in situations where TrueType wouldn’t make sense, as well as a BDF version also made by FontForge, and a PC-98 font BMP port of UnifontEX made by Neko Project 2 (the Wii port) from the TrueType. (This is for PC-98 emulators that expect ANEX86.BMP), as well as an Apple iOS Safari SVG webfont format version, plus WOFF and WOFF2 versions which are MUCH smaller, as well as the FontForge SFD version (the actual project file). I also added an EOT and a Proof-of-Concept SVGZ version, as well as a Mac DFONT and an X11 otb version for those using relatively-ancient Unix-like OSes. I’ve also made a special version derived from the TTF ran through BWTC32Key, renamed to have a .woff3 extension. Apparently, BWTC32Key’s compression significantly beats DEFLATE and Brotli here, as well as in quite a few other cases. BWTC32Key being web-based (in JavaScript at least until someone ports it) allows it to be decoded in browsers, so technically WOFF3 COULD be decoded by a browser. But yes, WOFF3 is literally a TTF/OTF inside a .B3K file with a .WOFF3 extension. I’d even allow TTCs and OTCs to be inside that. For the WOFF-exclusive stuff like XML metadata and arbitrary data, I’d allow use of a TAR file rather than the font directly. I would likely need some form of convention regarding the contents (for a whole host of reasons), so for the moment I’m going simple. Oh and the 3 in .woff3 is an intentional reference to the 3 in .B3K, and it being a third WOFF version (and no, WOFF3 is not the only planned format I’ve derived from retrofitting BWTC32Key into various things). It just needs decoding code written.

Now, what DOES adding Upper into Unifont offer?

Firstly: You gain the fancy letters intended for math but used online to make social media posts have fancier fonts. This includes Fraktur, which has its own ANSI escape code that is defined but rarely used. Those characters, and their bold versions via the bold flag, now work.

Secondly: You gain emoji from 2018 and before (nothing newer due to being forced to stick to Unifont 11.0.01 Upper as the Upper version), as well as the rest of the characters in blocks that emoji only uses part of. So yes, you get the whole Playing Cards block, the whole Domino Tiles block, and the whole block allocated to Mahjong tiles. You also get all the symbol characters that didn’t get emoji status. Stuff such as U+26FF, which is in the Miscellaneous Symbols block, and just so happens to be equivalent to the Rumpus Parable Agender Pride Flag from 2014. Yes, Unicode has THREE pride flags, not two. Samsung temporarily made the character an Emoji on some Android firmwares of theirs. You get the Alchemical Symbols block, including the Sublimate of Antimony symbol, which has been co-opted by nonbinary people as their gender symbol rather than the traditional male or female symbols (which DO have emoji status). So yes, this build of Unifont features the nonbinary symbol on top of the Plane 0 stuff like the transgender symbol, the symbols for various orientations, the Rumpus Parable flag, and etc. Oh, and unlike MANY Plane 0 fonts, Unifont DOES have U+2B89, something that accidentally resembles a gender symbol in the online LGBTQ+ furry community, one that is rarely used.

Third: You get many OS symbols not in Plane 0, as well as a full set of Wingdings, Wingdings 2, Wingdings 3, and Webdings, many of which ARE emoji, and many of which are NOT.

Fourth: You get more geometric symbols and historic scripts.

Fifth: You get both modern and ancient musical notation.

Sixth: You get “Transport and Map Symbols” as part of your emoji set.

Seventh: Having emoji makes you comply with the Shift_JIS extensions made by Japanese telephone carriers.

Eighth: You can handle more obscure dingbats, as well as the Japanese ARIB captioning character set standard.

Ninth: You have more characters to work with for the purposes of Unicode art, especially when doing animated Unicode art, especially when you are dealing with more than just BW. There’s more characters to derive brightness values from.

Tenth: You can view even the most esoteric Kaomoji (Japanese emoticons that aren’t emoji, such as the famous table flip one), including the ones that DO use emoji in them.

Eleventh: You gain more types of enclosed letters.

Twelfth: You can pass the current version of the BLNS test (a test file for string handling).

And that’s only the beginning.

As part of the compatibility focus, the x in the filename “UnifontExMono” is lowercase just in case programs looking for “Mono” to determine monospaced status want a clear distinction. Also, I chose to use no symbols or spaces in the font name to make it work better on picky systems. If your system wants variable fonts, rename the font file to have “-VF” at the end before the extension, which can be .ttf or .otf (yes, TrueType fonts can be made to comply with OpenType too. In FontForge’s TTF export, I turned on the “Apple”, “OpenType”, “Dummy ‘DSIG’”, “Windows-compatible ‘kern’”, “TeX Table”, “FFTM Table” and ALL the PfaEdit Table checkboxes, so that the font would work on as many systems as possible. Also, the MATH, BASE, and JSTF tables are all fancy OpenType tables, so they further seal the deal, and tables they depend on like GDEF are present too. VDMX is listed in Microsoft’s OpenType spec too. UnifontEX is basically what those in the industry call an OpenType TT font, referring to the outline format being TrueType’s. Also, regarding all the checkboxes in FontForge, I left those checked when generating the other SFNT formats. Yes, the DFONT had Windows-compatible 'kern' checked, and yes, the EOT had “Apple” checked. And OTB also had the combo too. Basically, these cross-vendor checkboxes all come into play if you use FreeType to read DFONTs on Windows/Linux/BSDs/Hurd, or use Internet Explorer in Wine, or are using the EOT as the webfont URL in a browser other than Internet Explorer on a different platform. Most people won’t do this, but they exist just in case. The OTB stuff may come into play if you’re using WSLg on Windows 10/11).

Note that dashes on Linux are what are often used for command-line arguments, so that could confuse Linux machines, and heck, even old Kindles may have issues with their font enabling if “-VF” were added. Also, I chose to make the name of this version of Unifont distinct from the official version, because this is a specialized fork that diverged from non-current versions of Unifont (though not horrifically so by any means). That being said, I did take quite a few measures to keep things faithful to the original. Compatibility is key. That’s why I’m keeping the OS/2 table version identical, not touching the GASP table, and etc. The goal of this project is to build on Unifont to make it even greater than it already is, and to do it one better in many ways. That’s why I’m so dedicated to it.

Oh, and by the way: This is a passion project that I have worked on for the last 9 years (because of the February 2nd, 2024 update being in 2024, that makes it a 9-year project. As for why I now say 9 years, I found Unifont CSUR 7.0.06 on a hard drive I last used in 2015, and the file was dated March 9th, 2015. Said computer also had FontForge installed, and some of what I was toying with back then were bitmap fonts, including Earthbound’s Mr. Saturn and Lumine Hall fonts, both of which I felt needed more compatibility. I was also investigating the old Klingon characters in Minecraft back then, which I found out were from Unifont CSUR. The original versions of UnifontEX back in its early days used CSUR glyphs, and later Fairfax UCSUR glyphs. Later on, the PUA stuff stopped fitting. But ultimately, the program used to make UnifontEX as well as source was found on this old drive from before I thought the project started. March 9th, 2015 would have been around the end of my 7th grade year, namely the 2014-2015 school year. UnifontEX’s first public version, based on Unifont, Unifont Upper, and Unifont CSUR 9.0.06 as well as Fairfax was published to Fontspace on June 20th, 2017, shortly after the end of my first year of high school, and I originally considered this the start of the project. Evidently I was wrong, and the project took 9 years, making it my longest one.), in part because I was waiting for new Unicode and Unifont versions to drop so I could see what was in them. This is the longest project I have done (the runners-up go to two of which I have spent 8 years on. One of which is a 3D model of Big Ben, the Eiffel Tower, and the London Monument To The Great Fire, made in 2014 via merging MakeALot’s models of said structures by importing them all into MeshLab at once. The result needed a stray triangle removed, and printability fixes, which took the longest, namely 2022, but I haven’t pleased every checker yet, but it’s printable. Also it’s CC-BY. A statue of mine that I did the same way, also in 2014, was made, and it’s CC-BY-SA4. In 2019, I put an extruded version of a vector work I did in 2014 on the round disc back of the statue’s head, for similar reasons to the creation of LEGO double-face characters. So that took less. Now for the other 8 year project, BWTC32Key. As far back as 2015, upon learning of Base64 and its inefficiency, I’d started searching for ways to do better. I had learned of Base64 when making the 30,000 byte version of my now-3081-byte JavaScript demo, which uses data URLs, though nowadays it uses special ones that only encode truly unsafe characters, done via URL encoding only them. Base64, as useful as it was to me, was quite bloated, and I was like, “surely there’s a better option”. Later on, after quite a few searches, I stumbled on Base16384, which uses Hanzi, around my second year of HS, and in 2018 I ran into a usable Base32768 implementation, and then threw in compression, then encryption into the mix too, and by 2019 I landed on BWTC32Key, and I improved it into 2023, without breaking compatibility, forwards and backwards. So that was an 8 year project from initial inception, making it the second runner-up), but it certainly was a long haul. I hope that my improvements help you in your endeavors.

In case you wonder why this repo was created a month early, that is so I could write the description to a heightened standard prior to release date, and decide on a name. Expect a better Github Pages site for this, among other things. Oh and the first link is the TTF.

Download

TTF2PNG Build Download

BDF Download

UnifontEX PC-98 font BMP Download

Apple iOS SVG Webfont version Download

WOFF Download

WOFF2 Download

FontForge SFD Download

EOT Download

macOS DFONT Download

OTB Download

Proof-of-Concept SVGZ Download

Proof-of-Concept WOFF3 Download

Oh I am legally obligated to say that GNU Unifont is under GPL2 with font embedding exception and OFLv1.1, and can be found here and is by Roman Czyborra and Paul Hardy, et. al.

Also, my real-life name is NOT something I give out online willy-nilly, just in case you find yourself needing to know it to follow the crediting part of GPL2, in which case you should credit me as “stgiga”. Online, I basically only use aliases, because I’m VERY paranoid about online safety, especially given the fact that I quite literally am certified in cybersecurity. And yes, you would be right in assuming that I use this Unifont build in my IDEs and terminals. As well as my Ubuntu window titles. As well as other stuff.

With that out of the way, I hope you enjoy this project as much as I enjoyed making it! Have fun, and do honor the original devs of Unifont. They do great work. Enjoy!

Also, if you want more glyphs (such as emoji from 2019 and newer, including the ones related to assistive technology) than can fit in the 65535 glyph limit in a conventional TrueType/OpenType/WOFF/WOFF2, please tell the OS and browser vendors to bring back Apple’s iOS Safari pure-SVG webfont format (which, unlike SVG-in-OpenType, supports unlimited glyphs, so you could fit in ALL variation sequences if you wanted, define arbitrary tables like porting Apple’s Zapf table used by Zapfino, as well as porting the animation and color tables from SVG-in-OpenType, and also using even Microsoft’s diverse family ZWJ sequences. Also, you can embed PNGs for bitmap glyphs to help with rendering if you want, and implement the contextual shaping in scripts like Arabic, without worrying about glyph counts, especially when working with ALL scripts that have variations. Oh, and while uncompressed SVG fonts would be large (most likely why they got eschewed), I did try a merger of GNU Unifont 15.0.0x with 15.0.0x Upper with 15.0.0x CSUR (something VERY impossible in classic TTF/OTF), and then made it into an SVGZ (officially-standardized GZipped SVG, but has no MIME Type), and it gave a result that was the same size as a WOFF2 of my TrueType merger. So, have the OS vendors support SVGZ as part of the equation too. Also, please tell the W3C to give SVGZ its own MIME type so it can be better-supported by browsers again so that with the help of XHTML integration, we can have smaller webpages for people on slower connections, without having to fiddle around with Apache’s httpd.conf or IIS’s equivalent to it. Oh, and SVG(Z) webfonts would also allow the entire Unicode Code Charts font to be usable as a fallback font in OSes if needed, which could prevent missing character varieties of Mojibake entirely (assuming no Private Use Area characters are used.) It would be an even more successful fix than Noto or UnifontEX could ever be. All it takes is for the OS vendors, browser vendors, the W3C, and the Unicode Consortium to team up. But until that happens, we are stuck with what we currently have: 65535 glyphs maximum due to conventional TrueType/OpenType/WOFF/WOFF2 limits, and httpd.conf editing to allow loading of any SVGZ content, to the point where you need to set up a server even if you are running it offline.

Also, regarding the above, I am NOT in favor of anyone engaging in harassment when asking. Harassment is one of the MANY bad things I personally have endured from a young age, so please don’t engage in it. I figured I should say this to avoid any possible drama. I’m someone who absolutely hates drama of any kind. With that out of the way, I hope that there will be better support coming soon.

I recently learned that HarfBuzz has been extending the TrueType/OpenType format to support over 65535 glyphs as well as make TrueType do BOTH cubic and quadratic outlines. It does require renderer updates though.

More facts, use cases, and information:

Oh fun fact: The 16px size of UnifontEX’s emoji (namely the fullwidth ones) is actually slightly bigger than the 1999 DoCoMo emoji (which were 12x12), but the 1997 SkyWalker phone by SoftBank (which was the first mobile emoji set, because some earlier Sharp and Canon typewriters had what we would now call emoji on them in 1991, according to emoji.digital which has a whole section on them) used 32x32 emoji in Emojipedia’s examples of them, but looking at the image directly implies they were doubled from 16x16 by Emojipedia.

The fun thing about UnifontEX being 16px though is that 16px on Windows is actually 12-point. Now, the MLA style guide that educators often use does not force Times New Roman, only “a readable 12-point font” (some educators will force Times New Roman, and APA DOES force Times New Roman in SOME versions, so don’t do your papers in UnifontEX unless you have permission AND are using MLA or any other style guide that does not force Times New Roman), so, depending on the educator, you COULD write your papers in UnifontEX if you are using MLA or another permissive style guide. I mean, Unifont is exactly 12-point on Microsoft systems, it just has no subpixels at all. Also, I’m VERY sure that using emoji in your papers would be a very bad idea. Now, IF you work as, for example, a technical writer (which is the career path I am on), there is no better font than UnifontEX. It’s 12-point, and it has MANY technical symbols and pictographs in it, even compared to stock Unifont. Oh, I should mention that large-print medicine bottles in the United States (or at least California) are printed at 12-point. So, 12-point is not considered an unreadable font size.

Now, I should also mention that ANOTHER thing that UnifontEX is useful for is stuff like creative writing, particularly if you are exporting to PDF. Quite a few sites with literature sections do stuff in PDF. I also use Firefox to force ALL page fonts on ALL websites to UnifontEX. Also, on Windows 11, any emoji involved that are newer than 2018 will be rendered by Segoe UI Emoji, so modern emoji DO show up.

Also, I feel like web literature would be something UnifontEX would be handy to use in, so writers could have access to technical symbols in something like sci-fi stories. I certainly know that anything I write from now on WILL feature this font, because it has quite a few special symbols handy for some of the things I intend to write. Now, when I’m actually working as a technical writer, I will be using a UnifontEX build in which I turn on the “No Subsetting” box in FontForge, meaning that apps like Word will never subset the font. At that point, I could afford the storage overhead, and it would allow collaborators who do not have the font to work with the document. However, I DO know that quite a few existing sites DO cap PDF size, so to avoid possible bugs on your end, the UnifontEX released here does not have that box checked, so have no fear of oversized files.

Now, I’m stating the obvious here, but if you integrate this into whatever you do, avoid doing something with it that would truly enrage the FSF. When in doubt, ask.

Additionally: Another use I’ve found for this font is for boosting Unicode support on legacy systems (including devices like the Kindle Touch). You even get emoji (up to 2018, but then you get Plane0 characters up to 2023-24, so stuff such as the Reiwa Era symbol, the Symbol For Type A Electronics, and quite a few of the extensions of certain scripts that were slotted into Plane0 are all present.) Throw this into ReactOS, and you have better Unicode support. Or you can give older-than-dirt machines better Unicode support, which can help if using InterWebPPC on a Tiger or better PowerPC Mac with a G3 or better (even a Power Mac 7500 can be coaxed into running a Mac OS X version that will work, but it will be slow), or Basilisk XPMod IA-32 (Firefox fork) on Windows XP with a Pentium 1-derived CPU with CMOV instructions, or Firefox 52 + KernelEx on Windows 98, and allow the modern web to be more browsable on older machines, especially if emoji is involved. It’s even useful for updating the emoji support of machines just old enough to be stuck on older emoji versions with no upgrade paths, but not ones from the 1990s or prior to the 2010s. For instance, I have a 2013 MacBook Air running Mac OS X 10.9 Mavericks (also 2013), and it has such a small drive that it was always upgrade-challenged with regards to macOS versions. Adding UnifontEX allowed it to go from 2013 emoji (the year before Wingdings, Wingdings 2, Wingdings 3, Webdings, and the other dingbats and characters added into Unicode then were added) to 2018 emoji plus many more symbols, including Unicode 15 Plane 0. So, if you are using a secondhand computer, you can attain fairly-reasonable levels of Unicode support, even without installing something such as Linux, BSD-family OSes, or Hurd (yes, I know what that is.) Many people are stuck with older machines or devices for one reason or another, and UnifontEX can assist with how they handle Unicode, especially given how often people on various websites use Unicode to make fancy text. Being able to at least see something other than mojibake or boxes is a good thing. Personally, I just tell Firefox (or any other browser capable of overriding page fonts) to set ALL page fonts to UnifontEX, but that isn’t strictly necessary.

Also, now your terminal and IDE can support Unicode better, which can definitely help when localizing stuff.

Additionally, all the circled and boxed letters, the checkboxes, radio buttons, check marks, X marks, the number+dot/comma, etc. al. and the consistent font pixel size make using UnifontEX for creating school assignments, surveys, or polls very attractive (especially anything in Scantron style.) Oh and yes, I’ve physically printed UnifontEX documents and they look fine. It is after all, the size recommended for essay text, and the font size for California large-print medicine bottle labels.

With regards to accessibility, while this font DOES enable one to engage in Unicode overuse, it DOES at least rid them of mojibake on older devices, and it does at least allow one to not have to represent certain symbols as images. Also, there were several accessibility decisions made: firstly, according to FontForge documentation, it is said that hinted fonts can flicker when animated/moved. This can create an epilepsy risk, so hinting is being forsaken. Even the Kindle Touch does not need it. Secondly, this makes CacheTT only produce a VDMX table (and even then you have to tell it to). Apparently, LTSH and hdmx tables being present indicate a font is non-linear (this doesn’t concern VDMX). Android 14 made accessibility font scaling non-linear, and what this does is impose a maximum size for magnified text, which could be a problem for users with low vision. So, UnifontEX by having an orphan VDMX table due to not being hinted (hinting sets certain bits in the head table, which CacheTT looks for when determining what to do, and if it doesn’t find them, it won’t generate hdmx or LTSH tables. Microsoft says this happens because the font is already linear. LTSH = linear threshold, the threshold at which a font becomes linear. hdmx is married to this. VDMX however is not reliant on either of those two tables or two bits being present. It’s like a cousin to those two tables. Microsoft apparently uses VDMX in UI fonts but not hdmx or LTSH. I guess UnifontEX is a UI font…) improves vertical text handling as well as general spacing and accessibility, getting the best of both worlds. Basically, by not going for hinting, UnifontEX in two ways becomes more accessible. Oh and it’s handy for typing physics-level math symbols into a document for people with dysgraphia (this was pretty much my first use for it early in development) so that they can do math. Don’t get me wrong, inserting special characters isn’t exactly quick, even in LibreOffice. But the fact that it has plenty of math characters not in most math fonts, PLUS the MATH and TeX tables is what makes it quite useful for doing math work when you can’t hand-write it. Obviously tell your instructors.

Also, I see plenty of accessibility device applications for it beyond the TrueType version, like for TDDs and AlphaSmart clones using the 1MiB PNG version. The idea is that you could express a LOT more than just ASCII on one. It’s got all sorts of glyphs from all over the world, and it has symbols found in all sorts of different disciplines, so if you’re having an international and/or specialized conversation over a TDD you can better get the point across. The sheer amount of pictographs is helpful when literacy is limited, and it could also be useful in character LCDs/VFDs/OLEDs in a kiosk. Or for making larger bubbles on a form intended to be read by a machine. There are just SO many ways you could use it in an accessibility context. Signage for those who have limited literacy, and that’s not even all…

Also, it works wonderfully on even a Kindle Touch (it does require some tech skills to install), so now you can see fancy text (and a LOT of Unicode in general) on an e-ink device from 2012. It works on newer Kindles too. Kindle Touches are cheap and they have no backlight so they last nearly forever before you need to charge them. They’re perfect for those who travel often or who have power outages often. Now these can do Unicode better. And these aren’t the only devices UnifontEX supports!

TL;DR: UnifontEX’s use cases could fill a book (literally). This README is lagging my Firefox, so I’m not going to start listing more (not to mention I’m falling asleep at my keyboard so don’t expect a SourceForge readme update today). Go enjoy UnifontEX!

UnifontEX

In memory of Albrecht Biedl, the Berlin professor that the original creator of Unifont, Roman Cyzborra, according to his website, had as a thesis advisor, who passed away on December 16th, 2023. I’m glad he lived to see UnifontEX.