Essenfont ships in multiple formats for different use cases. Each is generated by the same build pipeline from the same donor set.
Canonical: OTC (OpenType Collection, CFF2)
Essenfont-Regular.otc is the canonical output — a single file containing all five plane faces with CFF2 outlines.
| Property | Value |
|---|---|
| Format | OpenType Collection (.otc) |
| Outlines | CFF2 (cubic Béziers, subroutinized) |
| Faces | 5 (BMP, SMP, SIP, TIP, SSP) |
| Color | CBDT/CBLC for emoji blocks |
| Size | ~105 MB |
CFF2 is chosen over glyf (TrueType) for the canonical output because it is ~35% smaller for the same coverage via subroutinization. All major font renderers (HarfBuzz, CoreText, DirectWrite, FreeType) support CFF2.
Per-plane TTFs
The build also emits five standalone TTFs — one per Unicode plane — with glyf (TrueType) outlines for maximum compatibility:
| File | Plane | Use case |
|---|---|---|
Essenfont-BMP.ttf |
U+0000–U+FFFF | Most world scripts |
Essenfont-SMP.ttf |
U+10000–U+1FFFF | Historical scripts, emoji |
Essenfont-SIP.ttf |
U+20000–U+2FFFF | CJK Extensions B–F |
Essenfont-TIP.ttf |
U+30000–U+3FFFF | CJK Extensions G–J, Tangut |
Essenfont-SSP.ttf |
U+E0000–U+EFFFF | Language tags |
Per-plane WOFF2
Each TTF is also encoded as WOFF2 and WOFF for web embedding. The npm package bundles the WOFF2 versions with CSS @font-face declarations and unicode-range rules:
@font-face {
font-family: 'Essenfont';
src: url('essenfont/fonts/Essenfont-BMP.woff2') format('woff2');
unicode-range: U+0000-FFFF;
font-display: swap;
}
The browser only downloads the plane(s) needed for the rendered text.
Per-block WOFF2 subsets (this website)
This website serves 200+ per-block WOFF2 subsets — one Unicode block per file. Each subset is small (typically 10–500 KB) so a page that only shows Tangut glyphs downloads just the Tangut WOFF2, not the 105 MB OTC.
The subset pipeline reads the OTC, groups codepoints by block, and runs fontisan subset to produce a per-block WOFF2. The fonts.css file declares one @font-face per subset with the correct unicode-range.
SRI hashes
Each release ships an sri.txt file with Subresource Integrity hashes for every WOFF2 and WOFF:
Essenfont-BMP.woff2=sha384-abc123...
Essenfont-SMP.woff2=sha384-def456...
Use these in <link> tags for integrity verification:
<link rel="stylesheet" href="essenfont/css/all.css"
integrity="sha384-abc123..." crossorigin="anonymous">
Release artifacts
Each GitHub Release includes:
Essenfont-Regular.otc— canonical OTCEssenfont-{BMP,SMP,SIP,TIP,SSP}.ttf+.woff+.woff2— per-plane formatscoverage.json— per-block coverage statisticscp_map.json— codepoint → donor label mappingprovenance.json— full donor attribution per codepointlicense-pack.zip— all donor licenses + attributionsvg-exports.zip— per-codepoint SVG exportsrelease-manifest.json— artifact list + checksums
Next: Font specification →