Essenfont ships in multiple formats. The right one depends on your use case. This page walks through six common scenarios.

Quick reference

Scenario Pick Why
OS install (no tofu ever) Essenfont-Regular.otc System-wide, all apps
Web embed (any visitor) Per-block WOFF2 + unicode-range Browser downloads only what’s needed
App bundle (ship with app) Per-plane TTFs Works everywhere, pick the planes you need
PDF / document Per-plane TTF Must embed; reader can’t fetch at view time
Fleet / CI (auto-managed) Fontist Package manager handles install + updates
npm build pipeline npm install essenfont TypeScript types + font path for bundlers

Plate I — Operating-system user

Goal: My OS should never show tofu in any app.

Pick: Essenfont-Regular.otc (the canonical collection).

Install:

# macOS: double-click the .otc → Font Book → "Install All"
# Windows: right-click → "Install for all users"
# Linux:
cp Essenfont-Regular.otc ~/.local/share/fonts/ && fc-cache -fv

After install, set Essenfont as the last item in every app’s font list — it activates only when no earlier font covers the codepoint.

Plate II — Web developer

Goal: Any character a visitor types or pastes should render.

Pick: Per-block WOFF2 with unicode-range.

The simplest path — one <link> pulls the catalog CSS from this site:

<link rel="stylesheet" href="https://essenfont.github.io/fonts.css">
<style>
  body { font-family: "Essenfont", "Noto Sans", system-ui, sans-serif; }
</style>

The browser downloads only the WOFF2 subsets for codepoints the page actually renders. A Cyrillic-only page downloads ~30 KB, not the full 105 MB catalog.

Considerations:

  • Add font-display: swap so the fallback renders first.
  • Pair with "Noto Sans", system-ui, sans-serif as fallback.
  • Self-hosted WOFF2s may need CORS headers if loaded cross-origin.

Plate III — Desktop application developer

Goal: Bundle a font with my app for full Unicode coverage without a system install.

Pick: Per-plane TTFs.

Five single-face fonts your installer drops into the platform font directory. The OTC is unreachable to apps that enumerate fonts via direct file reads; TTFs work everywhere.

# macOS app bundle
MyApp.app/Contents/Resources/Fonts/Essenfont-BMP.ttf

# Windows installer
%LOCALAPPAPPDATA%\MyApp\Fonts\Essenfont-BMP.ttf

# Linux Flatpak/Snap: bundle in the sandbox's font directory

BMP alone is ~24 MB. Pick the planes your users need — most apps never see Tangut (TIP) or CJK Ext J.

Plate IV — PDF or document author

Goal: Font embedded in a PDF that survives copy-archive and cross-reader rendering.

Pick: Per-plane TTF (PDF ≤ 1.7) or per-plane WOFF2 (PDF 2.0).

PDF readers must embed the actual font — they can’t pull a fallback at view time.

% LaTeX / XeLaTeX
\usepackage{fontspec}
\setmainfont{Essenfont}[Renderer=HarfBuzz]

Most PDF generators subset to only the glyphs the document uses. A Cyrillic-only PDF carries ~118 glyphs, not 62,000.

Plate V — Fleet / CI administrator

Goal: Manage font installs across many machines automatically.

Pick: Fontist.

gem install fontist
fontist install "Essenfont"
# Update when a new version ships:
fontist update

Fontist downloads the OTC, registers it with the system font cache, and tracks versions. Ideal for Docker images, CI runners, and corporate fleet management.

Plate VI — npm build pipeline

Goal: Use Essenfont in a Vite/Astro/Next.js build with TypeScript types.

Pick: npm install essenfont.

// path     → absolute path to the OTC on disk
// metadata → { version, donorCount, charCount, sha256 }

The package also exports per-plane WOFF2 files and CSS @font-face rules. See the npm API reference.


License and attribution

Essenfont is assembled from 38 OFL-licensed donor fonts. The combined work is distributed under the SIL Open Font License 1.1.

When redistributing Essenfont (bundling in an app, hosting on a CDN, embedding in a PDF), include the LICENSE.txt from the license pack and the font name-table attribution.


Next: Install →