The Essenfont OTC is a multi-face OpenType Collection. Each face covers one Unicode plane and carries its own head, hhea, OS/2, maxp, cmap, and outline tables.

Faces

Face Plane Glyphs cmap entries
BMP 0 (U+0000–U+FFFF) ~30,000 ~28,000
SMP 1 (U+10000–U+1FFFF) ~24,000 ~21,000
SIP 2 (U+20000–U+2FFFF) ~4,600 ~2,100
TIP 3 (U+30000–U+3FFFF) ~17,000 ~14,000
SSP 14 (U+E0000–U+EFFFF) ~4,000 ~1,400

Glyph counts include .notdef, composites, and format-control codepoints. The cmap covers every assigned codepoint in the plane’s range.

Units per em (UPM)

All faces use 1000 UPM (units per em), regardless of the donor’s native UPM. This is enforced by Essenfont::Ufo::Normalization, which scales each donor’s outlines to 1000-upm before stitching:

Donor Native UPM Scale factor
Noto Sans 1000 1.0× (identity)
FSung 1024 ×0.9766
Noto Sans Math 1000 1.0×
UniHieroglyphica 1000 1.0×
Lentariso 2400 ×0.4167
Noto Serif Tangut 1000 1.0×
Egyptian Text (COLR) 2048 ×0.4883

Scaling is per-donor, not per-glyph — every glyph from the same donor scales by the same factor. This preserves each donor’s internal design proportions.

Vertical metrics

After stitching, Essenfont::Otc::MetricsPass recomputes each face’s metrics from the actual glyph extents:

Metric Source How it’s set
head.xMin/yMin/xMax/yMax Glyph bounding boxes Union of all glyph extents
hhea.ascent/descent Typo metrics OS/2.sTypoAscender / sTypoDescender
OS/2.usWinAscent/usWinDescent Clipping bounds Max glyph y / min glyph y

MetricsPass skips CFF2 faces — the CFF2 compiler sets correct metrics during compilation.

Donor attribution

Every codepoint in the OTC maps to exactly one donor. The provenance.json file in each release records:

{
  "codepoints": {
    "65":         { "donor": "noto-sans" },
    "94208":      { "donor": "noto-serif-tangut" },
    "19968":      { "donor": "fsung-2" },
    "128512":     { "donor": "noto-emoji" }
  }
}

This is the authoritative record of which donor contributed which glyph. The provenance manifest on this site provides a browsable view.

Table inventory

Each face contains these SFNT tables:

Table Purpose
head Font header (UPM, bbox, timestamps)
hhea Horizontal header (ascent, descent, line gap)
OS/2 OS/2 and Windows metrics
maxp Maximum profile (glyph count)
cmap Character to glyph mapping
name Name table (family, subfamily, PostScript)
post PostScript name mapping
CFF2 or glyf + loca Outlines
hmtx Horizontal metrics (advance widths)
CBDT + CBLC Color bitmap data (BMP face only, for emoji)

Next: Coverage & gaps →