Use Essenfont.
One font. Every Unicode 17 script. Pick your format, wire it in, ship.
Quick start
npm install essenfontgem install fontist && fontist install "Essenfont"curl -LO github.com/essenfont/essenfont/releases/latest/download/Essenfont-Regular.otcGetting started
Four pages. Start with the decision matrix.
Which format do I need?
Decision matrix for 6 scenarios: OS install, web embed, app bundle, PDF, fleet, npm package.
start here →02Install
CLI commands for Fontist, npm, and direct download — per platform.
read →03CSS integration
@font-face, unicode-range, fallback chains, self-hosting, CORS.
read →04npm API reference
TypeScript types for every export in the essenfont package.
read →Under the hood
How Essenfont is built. For contributors and the curious.
Build pipeline
How 160k glyphs from 38 donors become one OTC. Plane partitioning, UFO normalization, MetricsPass.
read →06Donor strategy
OFL-compatible sourcing. Tier 1/2/3 model, code-chart SVG extraction, why Full-Sung is the CJK donor.
read →07Output formats
Why OTC not TTF. Why both WOFF and WOFF2. The release pipeline and SRI hashes.
read →08Font specification
Internal structure of the OTC — faces, UPM strategy, vertical metrics, donor attribution per block.
read →09Coverage & gaps
What works today, what is blocked on upstream fontisan fixes, Chrome OTS requirements, roadmap.
read →