About

Tom Chen’s FontPixel.com open-source pixel font museum gathers every freely licensed bitmap (pixel) font that can be found scattered across the web into a single museum: the fonts are taken apart and every glyph inspected, measured again and again against one ruler, with the coverage of each character set worked out in detail; then you get a preview you can type into, to see how a font's various scripts look inside an old arcade game or a syntax-highlighting editor; and finally there are downloads as BDF, PCF, bitmap TTF, and even vectorised TTF, in which every pixel becomes a square or a circle.

Inclusion criteria

Only freely licensed fonts make it in, and the bar is strict: the license must clearly allow anyone to use, copy, modify and redistribute the font, commercial use included, and it must verifiably cover the exact file catalogued here. “Free”, “free for commercial use”, “freeware”, copying-only terms, or a promise to “switch to an open-source license later” do not qualify. Everything on the site is therefore safe to use commercially.

Fonts under bespoke terms such as an “author’s statement” or a “personal use license” rarely make it in. What matters is not what the terms are called but whether they meet the accepted definitions of free software and libre fonts: anyone may use, study, modify and redistribute for any purpose; no restriction may turn on the use or the user; the grant cannot be revoked after the fact; and it must carry over to derivatives. Miss any one of those and the font goes into the import report, not the catalogue.

The collection is not limited to any one script; CJK and Latin faces are both welcome. Bitmap formats convert losslessly between one another - BDF, PCF, OTB, kbitx - so they are all treated alike. The line that matters is whether the font is a bitmap at all: where an author publishes only a vectorised pixel outline (TTF/OTF), it is rasterised back to a bitmap on its native grid and the page marks it as “converted”, with the derivation shown.

Each font's detail page records its provenance. If you spot something included in error, or you would like a font taken down, please open an issue in the repository.

Some fonts that are easily mistaken for open source but were excluded after review:

  • HZK / mplus_hzk_12: No verifiable libre license was found for the HZK glyphs used. Age does not establish public-domain status, and a derivative repository’s Unlicense does not resolve the original glyphs’ licensing.
  • Zpix (最像素): Free for personal and educational projects, but commercial use requires a paid license, and modification and conversion are prohibited. These terms do not meet our libre-font criteria.
  • Guanzhi 8px (FontChinese7x7): The Chinese glyph contributor is unknown. Issue #6 reports that Xiaxia (lietxia) said they had not added those glyphs. The repository’s MIT license covers the tool code only, not the font. Discussion #6
  • tewi: The author removed the font over unclear licensing of glyphs heavily derived from Monaco and asked distributors to consider removing it. GPL labels on older copies do not resolve that provenance issue.
  • Vonwaon Bitmap (凤凰点阵体): Released under CC0 1.0, but it uses HZK fonts of unknown copyright collected in https://github.com/aguegu/BitmapFont and is highly similar to the Windows 3.2 fonts, so the glyphs’ copyright provenance cannot be verified. BitmapFont

How metrics are measured

Nominal size comes from the font's own declaration (PIXEL_SIZE, SIZE, or FONTBOUNDINGBOX), which is the height of the design pixel grid.

The Han ink box is measured from the pixels that are actually lit. The build takes the Level 1 characters of the Table of General Standard Chinese Characters that the font covers (falling back to all unified ideographs when fewer than 100 are present), computes the bounding box of the lit pixels for each glyph, and reports the median width and the median height. A “16px” font usually draws its Han characters at 15×15 or 14×15, which tells you more about the visual size of the face than the nominal figure does. Fonts without Han glyphs report cap height and x-height instead.

Max ink extents is the largest lit area found across all glyphs. Combining marks and extra-wide Private Use Area glyphs may extend beyond the nominal box; that is normal.

How coverage is counted

Coverage is counted by code point: every code point in the font's encoding table counts once. Denominators come from versioned character set data files kept in the repository; each file carries its source and version in its header, which you can see by hovering over the set name.

Denominators for Unicode blocks use the code points assigned in Unicode 17.0, excluding surrogates and including the Private Use Areas. Figures may therefore differ slightly from tools that count against an older version of Unicode.

Compatibility ideographs are counted separately; twelve of those code points are, per Unicode’s own annotations, actually unified ideographs, and the overview footnotes them.

The three implementation levels of GB 18030-2022 are constructed from the Han character and radical definitions in Clause 9 of the standard, giving 27,584 / 27,780 / 88,115 characters. The reasoning and the quoted passages are in docs/research/ in the repository.

How the previews are rendered

Every preview is drawn pixel by pixel on a browser canvas. Each dot is always a crisp square, and nothing goes through the operating system's font rasterizer, so what you see is the same on every platform: the font as it truly is.

Layout is a plain left-to-right run of glyphs, with no shaping, no kerning, and no vertical writing. Missing characters are marked with red-tinted dotted placeholder boxes.

Adding a font

Put the BDF or PCF files (.gz-compressed is fine) into a new directory under fonts/ and run the build. A family.toml in that directory adds the hand-entered details; it is optional, and a family without one still builds, marked “Uncurated” on the site:

fonts/my-font/
  my-font-16.bdf
  OFL.txt
  family.toml    # optional, for example:

name = "My Font"
name_zh = "我的字体"
authors = ["Author name"]
homepage = "https://example.com"
description = "One-line description"
forms = ["gothic", "sans"]          # category: gothic|song|rounded|kai|fangsong|…
vibes = ["retro-game"]   # vibe tags, free-form
aliases = ["Former Name"] # optional former names / aliases, used for search only

Disclaimer

License information is either detected automatically by the builder or entered by hand, and is offered for reference only. What actually governs a font is the license text its author publishes upstream. Check it yourself before any commercial use.

Inclusion here is judged on copyright licensing alone. Some font names contain third-party registered trademarks (IBM VGA or Adobe Helvetica, say) — nominative use that identifies where the glyphs come from. They are catalogued under their real names, implying no endorsement by or affiliation with any trademark owner.

Third-party sources and licensing for the character set data are listed in THIRD_PARTY_NOTICES.md in the repository.

Character set data sources

The character sets below drive the coverage figures, each with its data source noted. Full citations and licensing are in the repository.

Character set Code points Source
International Ideographs Core (IICore) 9,810 CJK-character-count project data, migrated 2026-08-21
Unihan Core 2020 20,720 https://www.unicode.org/Public/17.0.0/ucd/Unihan.zip kUnihanCore2020; generated 2026-08-21
Windows Glyph List 4 650 Adobe WGL4 table; retrieved 2026-08-21
Basic Latin 95 Unicode block ranges; generated 2026-08-21
Latin-1 Supplement 96 Unicode block ranges; generated 2026-08-21
Latin Extended-A 128 Unicode block ranges; generated 2026-08-21
Latin Extended-B 208 Unicode block ranges; generated 2026-08-21
Cyrillic Everyday Characters 97 ISO/IEC 8859-5 Cyrillic repertoire minus U+2116, plus Ghe-with-upturn (U+0490/0491, restored in Ukrainian orthography in 1990); generated 2026-08-21
Greek Everyday Characters 72 Modern monotonic Greek orthography; matches the ISO/IEC 8859-7 repertoire minus generic punctuation and currency signs; generated 2026-08-21
Arabic Everyday Characters 92 Unicode 17.0 core Arabic/Persian/Urdu letters, marks, digits and punctuation (deliberately not Windows-1256, which omits both digit sets); selection generated 2026-08-31
Thai Everyday Characters 87 TIS-620 (Thai national standard; ISO/IEC 8859-11 is the same table plus NBSP at 0xA0). Derived from Python's tis_620 codec over 0xA1-0xFB and cross-checked against the Unicode 17.0 Thai block's assigned characters; generated 2026-09-03
Vietnamese Latin 186 按 Unicode 越南语用字构成定义;generated 2026-08-21
IBM Code Page 437 255 Python cp437 codec + IBM graphic set; generated 2026-08-21
Box Drawing 128 Unicode block ranges; generated 2026-08-21
Block Elements 32 Unicode block ranges; generated 2026-08-21
Powerline Symbols 41 powerline/fontpatcher 约定;generated 2026-08-21
Braille Patterns 256 Unicode block ranges; generated 2026-08-21
GB/T 2312 Hanzi 6,763 Python codecs; generated 2026-08-21
GB/T 2312 Level 1 Hanzi 3,755 Python codecs; generated 2026-08-21
GB/T 2312 Level 2 Hanzi 3,008 Python codecs; generated 2026-08-21
GBK Hanzi 20,923 Python codecs; generated 2026-08-21
GB/T 12345 Traditional Hanzi 6,866 CJK-character-count project data, migrated 2026-08-21
GB 18030-2022 Implementation Level 1 27,584 GB 18030-2022 第9章实现级别;构造依据 docs/research/gb18030-2022-levels.md; generated 2026-08-21
GB 18030-2022 Implementation Level 2 27,780 GB 18030-2022 第9章实现级别;构造依据 docs/research/gb18030-2022-levels.md; generated 2026-08-21
GB 18030-2022 Implementation Level 3 88,115 GB 18030-2022 第9章实现级别;构造依据 docs/research/gb18030-2022-levels.md; generated 2026-08-21
Table of General Standard Chinese Characters 8,105 CJK-character-count project data, migrated 2026-08-21
General Standard Chinese Characters Level 1 3,500 公开数据集快照(两独立来源交叉核对,并集与 CJK-character-count 8105 整表完全一致); generated 2026-08-21
General Standard Chinese Characters Level 2 3,000 公开数据集快照(两独立来源交叉核对,并集与 CJK-character-count 8105 整表完全一致); generated 2026-08-21
General Standard Chinese Characters Level 3 1,605 公开数据集快照(两独立来源交叉核对,并集与 CJK-character-count 8105 整表完全一致); generated 2026-08-21
List of Frequently Used Characters in Modern Chinese 3,500 CJK-character-count project data, migrated 2026-08-21
Frequently Used Characters in Modern Chinese (2500) 2,500 公开数据集快照(计数与官方口径一致); generated 2026-08-21
Less Frequently Used Characters in Modern Chinese (1000) 1,000 公开数据集快照(计数与官方口径一致); generated 2026-08-21
List of Commonly Used Characters in Modern Chinese 7,000 CJK-character-count project data, migrated 2026-08-21
Compulsory Education Chinese Character List 3,500 CJK-character-count project data, migrated 2026-08-21
Standard Glyph Forms for Ancient Book Printing 14,250 CJK-character-count project data, migrated 2026-08-21
Kangxi Radicals 214 Unicode block ranges; generated 2026-08-21
CJK Radicals Supplement 115 Unicode block ranges; generated 2026-08-21
Hanyi Simplified & Traditional Set 9,169 CJK-character-count project data, migrated 2026-08-21
FounderType Simplified & Traditional Set 9,664 CJK-character-count project data, migrated 2026-08-21
Standard Forms of Common National Characters 4,808 CJK-character-count project data, migrated 2026-08-21
Standard Forms of Less-Common National Characters 6,343 CJK-character-count project data, migrated 2026-08-21
Big5 Frequently Used Hanzi 5,401 Python codecs; generated 2026-08-21
Big5 Less Frequently Used Hanzi 7,652 Python codecs; generated 2026-08-21
Big5 All Hanzi 13,053 Python codecs; generated 2026-08-21
Bopomofo 75 Unicode block ranges; generated 2026-08-21
List of Graphemes of Commonly-Used Chinese Characters 4,762 CJK-character-count project data, migrated 2026-08-21
Hong Kong Supplementary Character Set Hanzi 4,603 CJK-character-count project data, migrated 2026-08-21
Hong Kong Supplementary Characters in Common Use 1,102 CJK-character-count project data, migrated 2026-08-21
JIS X 0208 Non-Kanji 524 Python codecs; generated 2026-08-21
JIS X 0208 Level 1 Kanji 2,965 Python codecs; generated 2026-08-21
JIS X 0208 Level 2 Kanji 3,390 Python codecs; generated 2026-08-21
JIS X 0213 Level 3 Kanji 1,260 Python codecs; generated 2026-08-21
JIS X 0213 Level 4 Kanji 2,397 Python codecs; generated 2026-08-21
Joyo Kanji 2,136 https://raw.githubusercontent.com/vaiorabbit/everyday_use_kanji/master/regular_use_utf8.csv; retrieved 2026-08-21
Kyoiku Kanji 1,026 https://raw.githubusercontent.com/fnshr/kyo-kan/master/kyoiku-kanji-2017.csv; retrieved 2026-08-21
Jinmeiyo Kanji 864 https://ja.wikipedia.org/wiki/人名用漢字一覧;retrieved 2026-08-21
Hiragana 86 Unicode block ranges; generated 2026-08-21
Katakana 90 Unicode block ranges; generated 2026-08-21
Halfwidth Katakana 63 Unicode block ranges; generated 2026-08-21
JIS X 0201 158 Unicode block ranges; generated 2026-08-21
KS X 1001 Hangul Syllables 2,350 Python codecs; generated 2026-08-21
KS X 1001 Hanja 4,888 Python codecs; generated 2026-08-21
KS X 1001 Symbols 987 Python codecs; generated 2026-08-21
Hangul Syllables (All Modern) 11,172 Unicode block ranges; generated 2026-08-21
Hangul Compatibility Jamo 94 Unicode block ranges; generated 2026-08-21
Hangul Jamo 256 Unicode block ranges; generated 2026-08-21