GNU Unifont Glyphs

GNU Unifont
    Unifont Utilities
Unicode Tutorial
Hangul Fonts
Japanese Fonts
Retro Fonts
Fontforge Poll
Checking .sigs

Initially I just posted my additions to Roman Czyborra's original unifont.hex file. Then in mid-January 2008, his website went down. So I started posting font updates here. Roman has encouraged me to continue with my additions.

Roman's website is now back online, and you can read his Unifont description and motivation for its creation on his website, along with his archive of Unifont's changes: http://czyborra.com/unifont.

Earlier GNU Project Releases

Unifont 13.0

Unifont 12.1

Unifont 12.0

Note: initially a test version 12.0.01 created on 4 March 2019 was accidentally placed in the download directory. The version now in the download directory is the version built on 5 March 2019 and matches the version released on the GNU FTP site. The changes are minor, but please replace the earlier version with this one if you can.

Unifont 11.0

Unifont 10.0

Unifont 9.0

Unifont 8.0

Unifont 7.0

Unifont 6.3

Unifont 6.2

This was an interim release in preparation for the Unifont 6.3 release. Changes introduced included:

AnteGNUvian History

The remainder of this page contains version history before all glyphs were able to be licensed under the GNU General Public License. The big stumbling block was the Hangul Syllables section of 11,172 glyphs. Their license allowed free copying and use, but was non-GPL and they could not be licensed under the GPL.

Unifont 5.1 Release

This section is preserved for now for historical reasons. It may be removed in a future update. The current Unifont release includes changes that were made over a period of several years from the 5.1 release. During that time, I made significant changes to the utilities package that accompanies this font, and no longer build a version with combining circles by default. Thus everything released after the 5.1 release is organizationally different.

Here are the font files from the previous Unifont version 5.1 release.

unifont-5.1.20080907.ttf.gz (3 Mbytes)

Here's a Winzip archive for Mac and Windows (unzip the file and copy to your Fonts folder):

unifont-5.1.20080907.zip (3 Mbytes)

Here is a PCF version of the font for Unices:

unifont-5.1.20080820.pcf.gz (1 Mbyte)

Finally, here is a BDF version of the font for Unices:

unifont-5.1.20080820.bdf.gz (1 Mbyte)

There are four versions of the font. The first is the one you'll most likely want for a bitmap display as it has combining circle marks removed. The TrueType and BDF font files were created from this first version. The versions with "full" in the name contain combining circle marks, pictures for noncharacters, etc. The versions with "-jp" in the name preserve Roman Czyborra's original CJK glyphs, which he obtained from a public domain Japanese font. The .hex files are about 3 Mbytes each.

If you'd like to contribute any glyphs, please send them to unifoundry at this domain name (not spelled out because of spammers). You can download bitmaps for the ranges you'd like to edit (see the hyperlinks in the HTML table below). Then send me your modified .bmp file, or convert the .bmp file to a .hex file with my unibmp2hex conversion utility.

To see how a glyph should appear, consult the Unicode code pages at http://www.unicode.org/charts/.

Wen Quan Yi: Spring of Letters (文泉驛 / 文泉驿)

The biggest improvement to GNU Unifont was the addition of over 20,000 new CJK glyphs from version 1.1 of the Unibit font by Qianqian Fang (房骞骞). The Unibit font began as a combination of the original GNU Unifont and a basic CJK bitmap font placed in the public domain by the People's Republic of China. It adopted GNU Unifont's scheme of 8x16 and 16x16 glyphs. Qianqian Fang and many others then added about 10,000 more glyphs.

Qianqian states in the Unibit distribution: "The entire CJK Unified Ideographics (U4E00-U9FA5) and CJK Unified Ideographics Extension A(U3400-U4DB5) blocks were replaced by high-quality glyphs from China National Standard GB19966-2005 (public domain)." Qianqian also drew the new 22 CJK ideographs in the range U+9FA6..U+9FBB that appear in this version of the Unifont.

The Wen Quan Yi Unibit font is released under version 2.0 of the GNU General Public license, with the exception that embedding the Unibit font in a document does not in itself bind the document to the conditions of the GNU GPL. See his website for more details: http://wqy.sourceforge.net/cgi-bin/enindex.cgi. If that link is down, try the Chinese version at http://wenq.org/wqy2/index.cgi.

Wen Quan Yi (WQY) means "spring of letters," as in a spring of water. This is an interesting choice of words, as the British spelling of "font" is "fount" (but still pronounced "font").

The following code points in the latest unifont.hex file are taken from the WQY Unibit font (with my additions to complete the U+3000..U+33FF range, particularly the missing Hiragana, Katakana, and Kanji):

Qianqian has given his okay to add these CJK glyphs into GNU Unifont. Likewise, I've told him to incorporate any glyphs he wants from my contributions to GNU Unifont into his Unibit font.

Additions for 2008-09-07: TrueType Combining Diacritical Marks

The .hex, .bdf, and .pcf files are unchanged from the 2008-08-20 version. The .ttf (TrueType) font was modified to superimpose Unicode combining diacritical marks on the glyph that they follow, with no advance in cursor position.

Additions for 2008-08-20: Hangul Syllables

This release replaces the Hangul Syllables block with a light-stroke set of Hangul glyphs created by Changwoo Ryu from the free Baekmuk fonts.

Additions for 2008-08-08: CJK Imrpovements

This release improves the vertical positioning of Unified Han ideographs, and includes an overhaul of the Halfwidth and Fullwidth Forms for CJK use.

Additions for 2008-07-06: Braille Block Corrected

In 1998, Roman Czyborra wrote a Perl script to generate the Braille glyphs. He used it to create the U+2800..U+28FF range of GNU Unifont. This script did not enumerate the Braille dot sequences correctly. He posted a corrected version of the script on his website in 2003, but the original unifont.hex file kept the incorrect Braille glyphs. I just learned of this while going through all of his Perl scripts. This latest version corrects that error.

Additions for 2008-06-20: Unicode 5.1 Complete BMP

A journey of a thousand glyphs begins with the first pixel, to paraphrase Lao Tzu. In this case, the journey began with some missing Latin glyphs and in the end added approximately 18,500 glyphs to the existing GNU Unifont for complete coverage of the Unicode 5.1 Basic Multilingual Plane.

This is the culmination of a 10 year effort, originally begun by Roman Czyborra in 1998 (with earlier work dating to 1994). David Starner was propagating Roman's Perl scripts and adding users' glyph contributions for a while, but left the effort several years ago. Rich Felker created a new set of Tibetan glyphs during a point when GNU Unifont was not being maintained by anyone; I've now incorporated his improvements. Qianqian Fang began his Wen Quan Yi effort in 2004 with a focus on providing top-notch CJK ideographs in both bitmap and vector forms.

I am currently maintaining this font, and am glad to add any improvements that anyone wants to send (within as well as beyond the Basic Multilingual Plane). I'm going to experiment with breaking the 16-bit barrier in the future. Before doing that, I'd like to experiment more to see how some software (such as TeX) deals with more than 65,536 code points in a font.

Complex scripts (such as Arabic and the Brahmi-derived Indic scripts) exceed the limitations of the BDF font format. Yet Roman's philosophy was that it would be better to show something versus a dreaded empty box on the screen for any character in Unicode's Basic Multilingual Plane. Pursuing that philosophy, I've drawn over 8,000 glyphs even for complex scripts so every printable glyph would have some rendering.

Qianqian Fang and his Wen Quan Yi volunteers added the Unicode 5.1 Bopomofo (U+3100..U+312F), CJK Strokes (U+31C0..U+31EF), and CJK ideographs (U+9FBC..U+9FC3) for complete Unicode 5.1 coverage. Qianqian also drew examples of the clock and moon ideographs as a model for me to complete the U+3200..U+33FF range. I added the missing Hiragana, Katakana, Kanji, and Hangul. I also improved some existing Hiragana and Katakana in that range with expert oversight from Yuko (ゆうこ / 由子) — thanks Yuko!

I changed the entire Hangul Syllables block of 11,172 glyphs (U+AC00..U+D7A3) to thin stroke glyphs. Roman had mentioned on his website wanting to do this someday. Jungshik Shin (신정식) had written a Perl script in 1998 to convert a Hanterm font to the Unicode Hangul Syllables in .hex format. I made a couple of bug fixes to this script and used it to create BDF files covering the Hangul Syllables range for all four Hanterm Hangul fonts. See /hangul/index.html for more details.

I adjusted the horizontal centering of all Yi Syllables and Yi Radicals. The Yi glyphs were for the most part moved left by one pixel so that they center on the eighth pixel across rather than the ninth pixel across.

Yi was traditionally written vertically from top to bottom or horizontally from right to left, according to the Unicode 5.0 Standard, p. 440. Therefore I made the center line of the glyphs the ninth pixel column, counting from the left rather than the eighth pixel. Today Yi is also written horizontally from left to right.

I attempted to create a set of Yi glyphs that would look good if written either horizontally (in either direction) or vertically. Some horizontal strokes are a little exaggerated as a result, to avoid excessive white space to the left and right of a glyph with horizontal writing. Some circles are also flattened a little for the same reason.

All Yi glyphs are 16 pixels wide. Most Yi glyphs are two pixels above the baseline. Some reach below this as a matter of necessity, to have the entire glyph fit within a 16x16 grid.

If a Yi font were only to be written horizontally, a combination of 12 and 16 pixels wide would probably allow ideal rendering of Yi. Currently the Unifont only supports 8 and 16 pixel glyph widths.

Additions for 2008-03-09

U+1100..U+11FF (Hangul Jamo): I replaced all existing glyphs in this range (there were just a fraction of the total needed) with thin stroke glyphs. Roman had expressed a desire to do this someday on his website. A 16x16 grid wasn't quite enough to draw one set of glyphs that could combine initial consonant + vowel + final consonant for all combinations. A cell height of 24 pixels would probably be okay.

GNU Unifont Unicode 5.1 Basic Multilingual Plane Coverage

Here's a summary of the percent completion of each range in the Basic Multilingual Plane:

     Covered      Range       Script
     -------      -----       ------
      100.0%  U+0000..U+007F  C0 Controls and Basic Latin
      100.0%  U+0080..U+00FF  C1 Controls and Latin-1 Supplement
      100.0%  U+0100..U+017F  Latin Extended-A
      100.0%  U+0180..U+024F  Latin Extended-B
      100.0%  U+0250..U+02AF  IPA Extensions
      100.0%  U+02B0..U+02FF  Spacing Modifier Letters
      100.0%  U+0300..U+036F  Combining Diacritical Marks
      100.0%  U+0370..U+03FF  Greek and Coptic
      100.0%  U+0400..U+04FF  Cyrillic
      100.0%  U+0500..U+052F  Cyrillic Supplement
      100.0%  U+0530..U+058F  Armenian
      100.0%  U+0590..U+05FF  Hebrew
      100.0%  U+0600..U+06FF  Arabic
      100.0%  U+0700..U+074F  Syriac
      100.0%  U+0750..U+077F  Arabic Supplement
      100.0%  U+0780..U+07BF  Thaana
      100.0%  U+07C0..U+07FF  N'Ko
      100.0%  U+0800..U+08FF  Unassigned
      100.0%  U+0900..U+097F  Devanagari
      100.0%  U+0980..U+09FF  Bengali
      100.0%  U+0A00..U+0A7F  Gurmukhi
      100.0%  U+0A80..U+0AFF  Gujarati
      100.0%  U+0B00..U+0B7F  Oriya
      100.0%  U+0B80..U+0BFF  Tamil
      100.0%  U+0C00..U+0C7F  Telugu
      100.0%  U+0C80..U+0CFF  Kannada
      100.0%  U+0D00..U+0D7F  Malayalam
      100.0%  U+0D80..U+0DFF  Sinhala
      100.0%  U+0E00..U+0E7F  Thai
      100.0%  U+0E80..U+0EFF  Lao
      100.0%  U+0F00..U+0FFF  Tibetan
      100.0%  U+1000..U+109F  Myanmar
      100.0%  U+10A0..U+10FF  Georgian
      100.0%  U+1100..U+11FF  Hangul Jamo
      100.0%  U+1200..U+137F  Ethiopic
      100.0%  U+1380..U+139F  Ethiopic Supplement
      100.0%  U+13A0..U+13FF  Cherokee
      100.0%  U+1400..U+167F  Unified Canadian Aboriginal Syllabics
      100.0%  U+1680..U+169F  Ogham
      100.0%  U+16A0..U+16FF  Runic
      100.0%  U+1700..U+171F  Tagalog
      100.0%  U+1720..U+173F  Hanunoo
      100.0%  U+1740..U+175F  Buhid
      100.0%  U+1760..U+177F  Tagbanwa
      100.0%  U+1780..U+17FF  Khmer
      100.0%  U+1800..U+18AF  Mongolian
      100.0%  U+18B0..U+18FF  Unassigned
      100.0%  U+1900..U+194F  Limbu
      100.0%  U+1950..U+197F  Tai Le
      100.0%  U+1980..U+19DF  New Tai Lue
      100.0%  U+19E0..U+19FF  Khmer Symbols
      100.0%  U+1A00..U+1A1F  Buginese
      100.0%  U+1A20..U+1AFF  Unassigned
      100.0%  U+1B00..U+1B7F  Balinese
      100.0%  U+1B80..U+1BBF  Sundanese
      100.0%  U+1BC0..U+1BFF  Unassigned
      100.0%  U+1C00..U+1C4F  Lepcha
      100.0%  U+1C50..U+1C7F  Ol Chiki
      100.0%  U+1C80..U+1CFF  Unassigned
      100.0%  U+1D00..U+1D7F  Phonetic Extensions
      100.0%  U+1D80..U+1DBF  Phonetic Extensions Supplement
      100.0%  U+1DC0..U+1DFF  Combining Diacritical Marks Supplement
      100.0%  U+1E00..U+1EFF  Latin Extended Additional
      100.0%  U+1F00..U+1FFF  Greek Extended
      100.0%  U+2000..U+206F  General Punctuation
      100.0%  U+2070..U+209F  Superscripts and Subscripts
      100.0%  U+20A0..U+20CF  Currency Symbols
      100.0%  U+20D0..U+20FF  Combining Diacritical Marks for Symbols
      100.0%  U+2100..U+214F  Letterlike Symbols
      100.0%  U+2150..U+218F  Number Forms
      100.0%  U+2190..U+21FF  Arrows
      100.0%  U+2200..U+22FF  Mathematical Operators
      100.0%  U+2300..U+23FF  Miscellaneous Technical
      100.0%  U+2400..U+243F  Control Pictures
      100.0%  U+2440..U+245F  Optical Character Recognition
      100.0%  U+2460..U+24FF  Enclosed Alphanumerics
      100.0%  U+2500..U+257F  Box Drawing
      100.0%  U+2580..U+259F  Block Elements
      100.0%  U+25A0..U+25FF  Geometric Shapes
      100.0%  U+2600..U+26FF  Miscellaneous Symbols
      100.0%  U+2700..U+27BF  Dingbats
      100.0%  U+27C0..U+27EF  Miscellaneous Mathematical Symbols - A
      100.0%  U+27F0..U+27FF  Supplemental Arrows - A
      100.0%  U+2800..U+28FF  Braille Patterns
      100.0%  U+2900..U+297F  Supplemental Arrows - B
      100.0%  U+2980..U+29FF  Miscellaneous Mathematical Symbols - B
      100.0%  U+2A00..U+2AFF  Supplemental Mathematical Operators
      100.0%  U+2B00..U+2BFF  Miscellaneous Symbols and Arrows
      100.0%  U+2C00..U+2C5F  Glagolitic
      100.0%  U+2C60..U+2C7F  Latin Extended - C
      100.0%  U+2C80..U+2CFF  Coptic
      100.0%  U+2D00..U+2D2F  Georgian Supplement
      100.0%  U+2D30..U+2D7F  Tifinagh
      100.0%  U+2D80..U+2DDF  Ethiopic Extended
      100.0%  U+2DE0..U+2DFF  Cyrillic Extended - A
      100.0%  U+2E00..U+2E7F  Supplemental Punctuation
      100.0%  U+2E80..U+2EFF  CJK Radicals Supplement
      100.0%  U+2F00..U+2FDF  Kangxi Radicals
      100.0%  U+2FE0..U+2FEF  Unassigned
      100.0%  U+2FF0..U+2FFF  Ideographic Description Characters
      100.0%  U+3000..U+303F  CJK Symbols and Punctuation
      100.0%  U+3040..U+309F  Hiragana
      100.0%  U+30A0..U+30FF  Katakana
      100.0%  U+3100..U+312F  Bopomofo
      100.0%  U+3130..U+318F  Hangul Compatibility Jamo
      100.0%  U+3190..U+319F  Kanbun
      100.0%  U+31A0..U+31BF  Bopomofo Extended
      100.0%  U+31C0..U+31EF  CJK Strokes
      100.0%  U+31F0..U+31FF  Katakana Phonetic Extensions
      100.0%  U+3200..U+32FF  Enclosed CJK Letters and Months
      100.0%  U+3300..U+33FF  CJK Compatibility
      100.0%  U+3400..U+4DBF  CJK Unified Ideographs Extension A
      100.0%  U+4DC0..U+4DFF  Yijing Hexagram Symbols
      100.0%  U+4E00..U+9FCF  CJK Unified Ideographs
      100.0%  U+9FD0..U+9FFF  Unassigned
      100.0%  U+A000..U+A48F  Yi Syllables
      100.0%  U+A490..U+A4CF  Yi Radicals
      100.0%  U+A4D0..U+A4FF  Unassigned
      100.0%  U+A500..U+A63F  Vai
      100.0%  U+A640..U+A69F  Cyrillic Extended - B
      100.0%  U+A6A0..U+A6FF  Unassigned
      100.0%  U+A700..U+A71F  Modifier Tone Letters
      100.0%  U+A720..U+A7FF  Latin Extended - D
      100.0%  U+A800..U+A82F  Syloti Nagri
      100.0%  U+A830..U+A83F  Unassigned
      100.0%  U+A840..U+A87F  Phags-pa
      100.0%  U+A880..U+A8DF  Saurashtra
      100.0%  U+A8E0..U+A8FF  Unassigned
      100.0%  U+A900..U+A92F  Kayah Li
      100.0%  U+A930..U+A95F  Rajang
      100.0%  U+A960..U+A9FF  Unassigned
      100.0%  U+AA00..U+AA5F  Cham
      100.0%  U+AA60..U+ABFF  Unassigned
      100.0%  U+AC00..U+D7AF  Hangul Syllables
      100.0%  U+D7B0..U+D7FF  Unassigned
        0.0%  U+D800..U+DFFF  Surrogate Pairs - Not Used
      100.0%  U+E000..U+F8FF  Private Use Area
      100.0%  U+F900..U+FAFF  CJK Compatibility Ideographs
      100.0%  U+FB00..U+FB4F  Alphabetic Presentation Forms
      100.0%  U+FB50..U+FDFF  Arabic Presentation Forms - A
      100.0%  U+FE00..U+FE0F  Variation Selectors
      100.0%  U+FE10..U+FE1F  Vertical Forms
      100.0%  U+FE20..U+FE2F  Combining Half Marks
      100.0%  U+FE30..U+FE4F  CJK Compatibility Forms
      100.0%  U+FE50..U+FE6F  Small Form Variants
      100.0%  U+FE70..U+FEFF  Arabic Presentation Forms - B
      100.0%  U+FF00..U+FFEF  Halfwidth and Fullwidth Forms
      100.0%  U+FFF0..U+FFFF  Specials

Brahmi-derived (Indic) Scripts

Available Unicode glyph assignments do not suffice for proper rendering of these syllabic scripts in a BDF font. Nevertheless I've added these under the premise that a rendering of something is better than nothing. They may be of use as a starting point for someone who wants to experiment with Microsoft's Volt, or with the SIL's Graphite, or something new.

A big challenge with Indic scripts is that they are abugidas, where a consonant sign is pronounced with an inherent following vowel (usually short "a"). When two consonants are joined, sometimes the first consonant is written in a half-form to denote that the inherent vowel is dropped. Many consonant conjunctions have unique glyphs, yet they do not have unique code points in Unicode. The most common example in modern Hindi is "k" + "ssa." The way this conjunction is written as a single glyph bears little resemblance to the original letters, yet Unicode has no code points for such combinations.

Fonts for these scripts have resorted to placing such essential glyphs in a Private Use Area. In fact, the Unicode 5.1 Standard even proposes that a font store Tamil syllables in a Private Use area. That defeats the whole purpose of Unicode as a standard encoding of the world's scripts, but is necessary for rendering under Unicode's current limitations. It is an artifact of the Unicode consortium adopting the Indian Government's ISCII-1988 standard. In the 1980s, the Indian government was concerned with simple sorting algorithms that did not require much memory.

Unicode 5.0, like ISCII-1988, only contains two of the many accent marks used for reciting of the Sanskrit Vedas. There is a movement to add such accents to the Unicode standard. A good summary of proposed additions to Unicode (with example glyphs for missing accents in the Devanagari script) appears at http://www.omkarananda-ashram.org/Sanskrit/vedicaccents.htm. They are seeking others to review their list of glyphs, and to notify them of equivalent glyphs in scripts besides Devanagari.

Another effort to add Vedic marks to the Unicode Standard is being coordinated by the Sanskrit Library (http://sanskritlibrary.org/) and hosted by Brown University. See http://www.language.brown.edu/Sanskrit/VedicUnicode/ for the latest status. Thanks to Jaldhar Vyas for this update.

Arabic and Other Semitic Scripts

Arabic letters have up to four different shapes each that are a natural development of its cursive written form: one when a letter appears isolated from other letters; one when a letter appears at the beginning of a word; one with a letter appears in the middle of a word; and one when a letter appears at the end of a word.

Unicode only provides one code point for each letter. The font technology must therefore know how to draw each Arabic letter through extensive ligature tables. This is beyond the capability of an ordinary BDF font file, so GNU Unifont does not provide full support for Arabic or other Semitic scripts. The Unifont glyphs show Arabic letters in their isolated forms so that at least something will be rendered.

Now You See It...

Initially, I wanted to find out what glyphs remained to be drawn to complete GNU Unifont. One problem was that the unifont.hex file did not include filler glyphs for the unassigned code points and noncharacters.

So I created the following file, which mimics the striped lines from the Unicode code blocks for all fillers. Note that new releases of Unicode will assign glyphs to some of these previously unassigned code points. At that time, the corresponding blank entries in this file should be removed.

I am placing these filler glyphs in the public domain. Do what thou wilt.

This file contains filler glyphs for all Unicode BMP code points that do not have assigned glyph representations in the published Unicode 5.1 standard, not counting the surrogate code points (U+D800 through U+DFFF) or the BMP Private Use code points (U+E000 through U+F8FF). My reference was the CD-ROM included in the back of the Unicode 5.0 Standard book, plus updates for Unicode 5.1 from the unicode.org website.

This Unicode 5.1 version has 3658 filler glyphs for the Basic Mulitlingual Plane. The Unicode 5.0 version had 4667 filler glyphs. Unicode 5.1 added over 1000 glyphs to the Basic Multilingual Plane. Each filler glyph looks like this:

blank filler glyph

The Winzip version of this file is blanks-5.1.zip. The gzipped Unix/Linux version of this file is blanks-5.1.hex.gz.

Additional Glyphs — 31 December 2007

I've added over 100 glyphs that can be incorporated into GNU Unifont to complete the range U+0000 through U+05FF. Code points U+0360, U+0361, and U+0362 had a spurious pixel set in the original file; I made new glyphs with that pixel erased.

These glyphs are available under the GNU General Public License. Many of them were derived by copying and pasting a cell (generated by unihex2bmp) in a graphics editor.

Historical Note: This patch file applied to the original unifont.hex file was available for a brief period on Roman Czyborra's website before it went down. He asked me to continue my additions to GNU Unifont, so for now I'm making updates available as entire font files.

Valid HTML 4.01 Transitional Valid CSS! Best Viewed with Any Browser