UFO is the single source of truth.
Every Essenfont glyph lives in a committed UFO database on GitHub. Fontisan imports from donor fonts; the compiler turns UFOs into every output format. No black boxes, no hidden state.
What are all these acronyms?
If you're not a font engineer, here's what the pieces are. Skip this section if you already know.
Concept Glyph
A single visual character shape. A, ★, 𓀀, あ are all glyphs. Each has an outline (the shape drawn with lines and curves) plus metadata like width and spacing.
Source UFO
Unified Font Object. An open format that stores font source data as folders of XML and PNG files — not a binary blob. You can git diff individual glyph edits, review changes, and fix typos. Think of it as source code for a font.
Compiled TTF / OTF
The binary files your computer loads. TTF (TrueType) uses quadratic curves; OTF (OpenType with CFF) uses cubic curves. Both render identically on screen — they're just different internal storage.
Web WOFF2
Web Open Font Format 2. A TTF/OTF compressed with Brotli for fast download. Browsers load it via @font-face. ~35% smaller than the raw TTF. This website serves 214 per-block WOFF2 files so you only download what you see.
Bundle OTC
OpenType Collection. One file containing multiple font faces. Essenfont's OTC holds 5 faces — one per Unicode plane (BMP, SMP, SIP, TIP, SSP). More efficient than shipping 5 separate files.
Outline CFF2
Compact Font Format 2. A modern outline format ~35% smaller than the older CFF. Used inside the canonical OTC. Renders identically to TrueType outlines — the difference is file size.
Input Donor font
A source font whose glyphs Essenfont extracts and reuses. Noto Sans covers Latin/Cyrillic/Greek. FSung covers CJK. UniHieroglyphica covers Egyptian. Essenfont assembles 186 donors into one font.
Tool fontisan
A Ruby library that reads, transforms, and writes font files. It's the compiler in this pipeline — it reads donor TTFs/OTFs, normalizes coordinates, and compiles UFOs into the final OTC/WOFF2 binaries.
Grid 1000-upm
Units Per Em. The coordinate grid a font uses. Different donor fonts use different grids (1000, 2048, 4096). Essenfont normalizes all to 1000-upm so glyphs from different donors align correctly on the same baseline.
Import: donor fonts → UFO
import-to-ufos.rb reads 186 donor fonts, normalizes each to 1000-upm, extracts glyph outlines via fontisan, and writes per-plane UFOs to ufo/{plane}.ufo/. The UFOs are committed to git — they survive across builds and are diffable.
Every donor is scaled to 1000-upm. Coordinates beyond 2x UPM are clamped (the v0.5.2 fix for synthetic SVG donors).
Glyphs are split into 5 planes: BMP, SMP, SIP, TIP, SSP. Each plane gets its own UFO with its own glyph set.
UFOs are committed to the repo. Manual edits survive re-imports in gaps-only mode. The UFO IS the source of truth.
Compile: UFO → output formats
build-from-ufos.rb reads the committed UFOs and compiles them into every output format. No donor loading, no CpMap, no normalization — just a fast UFO-to-binary compile. Build time: 5–10 minutes.
Essenfont-Regular.otc
OpenType Collection with CFF2 outlines. One file, 5 faces, every assigned codepoint.
105 MBEssenfont-{BMP,SMP,SIP,TIP,SSP}.ttf
Individual TTFs per Unicode plane. For systems that can't load OTC.
Essenfont-{plane}.woff2
WOFF2-compressed per-plane fonts for @font-face. ~35% smaller than TTF.
{block-slug}.woff2
214 subsets, one per Unicode block. This website serves them so visitors don't download the full font.
svg-exports.zip
Every glyph as a standalone SVG file. For design tools, documentation, archival.
npm: essenfont
Node package with all formats + provenance + license pack. npm install essenfont
Provenance & reproducibility
Every release ships with full provenance: which donor provided each codepoint, which license applies, and the exact build inputs. The build is deterministic — same UFOs produce byte-identical outputs.
Why this matters
One font covering 159,866 characters changes what's possible. Here's who benefits and how.
Developers
One npm install essenfont. No more tofu boxes, no font-stack juggling, no per-script @font-face rules. Every character your users type renders.
npm install essenfontDesigners
One typeface for every script. Design multilingual interfaces without switching fonts mid-sentence. CJK, Arabic, Devanagari, hieroglyphs — all from the same family.
Researchers
Every historical and extinct script in one download: Egyptian Hieroglyphs, Cuneiform, Linear B, Tangut, Phoenician, Ogham. Study ancient texts without hunting for specialist fonts.
Web & app teams
Ship a universal font subset per page. This site serves 214 per-block WOFF2 files — visitors only download the scripts they actually see. No 100 MB font payload.
Publishers
Print-ready multilingual documents without embedding 20 font files. Academic journals, government forms, international documentation — one font covers them all.
NLP & AI
Consistent glyph rendering for training data across 346 Unicode blocks. OCR models, translation pipelines, and text-to-speech systems get uniform character coverage.
Educators
Teach world writing systems with consistent rendering. Students see every script — from Cyrillic to Cherokee to Cuneiform — in the same typeface, at the same quality.
Digital preservation
Archive texts in any script knowing they'll render identically decades from now. The UFO source is committed, diffable, and license-attributed — a permanent record.