Guide · 9 steps · ~30 min
Kerning.
Kerning is the per-pair adjustment to the space between two specific glyphs. Distinct from sidebearings (the default space on each side of a glyph) and from tracking (uniform spacing across a run). This guide covers Patens's class-based kerning system, what makes a good pair vs a bad pair, and the audit codes that catch common mistakes.
Patens supports class-based kerning, family-wide kerning, and the full OpenType kern feature on export. The editor's Spacing tab is where you'll spend most of this work; the Preview tab is where you'll check that it reads right.
- 1
What kerning is, and what it isn't
Kerning is the per-pair adjustment to the space between two specific glyphs. It's distinct from sidebearings (the default space on each side of a glyph) and from tracking (uniform spacing applied across a run of text). Sidebearings give you the right space most of the time; kerning handles the pairs where the sidebearings of two letters happen to look wrong next to each other — most famously AV, To, We, Yo. A negative kern pulls the pair closer; a positive kern pushes them apart.
The mental model: sidebearings are the bulk of your spacing work. Kerning is the local repair shop.
- 2
Why class-based kerning matters
A 100-glyph Latin font has ~10,000 possible pairs. Authoring every pair by hand is hours of work and produces a brittle table. Class-based kerning groups glyphs that behave the same way into named classes (e.g. "A-group" contains A À Á Â Ã Ä Å Ā Ă Ą), defines kerns at the class level, and lets the editor expand them to per-pair values on export. Edit the class kern once, every member inherits.
Patens audit code kerning-no-classes fires when a project has pairs but no classes — it's rarely the right shape for a real shipping font.
- 3
Setting up your first classes
Open the Spacing tab → Kerning panel. Create a class with a descriptive name (uppercase A-group, lowercase o-group, period-group). Add the glyphs that share the same kerning behavior — for uppercase, that's usually the base letter plus all its accented variants. The class is "left-side" if it sits to the left of a kern pair (Ax) and "right-side" if it sits to the right (xA). Many letters belong to both kinds of classes; that's expected.
A class with only one member (kerning-class-singleton) usually means you meant to add more glyphs but stopped. Either delete it or fill it in.
- 4
Writing the pairs
A pair is two sides — a left glyph or class, a right glyph or class — and a kerning value in font units. Patens supports four combinations: glyph + glyph (literal pair), glyph + class (left-letter against right-class), class + glyph, and class + class. The editor resolves the most specific match first, so a literal-pair kern always wins over a class-class fallback.
Use class-class for the bulk of your kerning. Reach for literal-pair kerns only when one specific combination needs a different value than its class would imply.
- 5
How much to kern
Kerning is measured in font units, where 1000 fu = 1 em. Modest kerns are 10-50 fu. Aggressive kerns are 80-150 fu. Anything past 200 fu is almost certainly a sign your sidebearings need work, not a kern. Patens flags this with the kerning-extreme audit code — when a kern is more than 15% of the em, the editor surfaces it so you can decide whether it's really needed.
If you find yourself wanting to kern a pair by 300 fu, look at the sidebearings of both glyphs first. The fix is usually upstream.
- 6
Test in real strings, not in a kerning grid
Kerning grids (a/b/c… × a/b/c…) are great for systematic coverage but terrible for visual calibration. Kerning lives in the rhythm of real words. Patens's Preview tab shows live HarfBuzz-shaped text — type the words your font will actually set, look at the joins, kern by eye. Foundry-grade pangrams (Hamburgefonts, "The quick brown fox") are starting points; real client copy is the final test.
Cmd+Shift+P opens Preview. Try the strings you suspect will be hard first (To, AV, We) — many kerns reveal themselves in 30 seconds of real text.
- 7
Family-wide kerning
In a multi-style family, kerning often holds across siblings: if Te kerns by -45 in Regular, Te in Italic probably wants -45 too. Patens supports family-wide kerning (defined once at the family level, inherited by every sibling) with per-sibling overrides where needed. The Family hub at /family/[id] shows the family-wide table; opening a sibling shows the inherited value alongside any local override.
Start at the family level. Override only when a sibling's spacing differs enough that the family-wide value reads wrong.
- 8
When the kerning panel is empty but feature-kern is on
OpenType supports a kerning feature (kern) that's enabled by default in browsers. If feature-kern is on in your project but the kerning table is empty, the file ships an "intent to kern" with no actual data. Patens flags this with feature-kern-disabled-with-pairs (the inverse — pairs present but the feature toggled off — also fires). Either disable feature-kern explicitly for the project, or add the pairs you intended.
The pre-flight check on the Release tab runs both directions of this audit before export.
- 9
Exporting kerning
On export, Patens compiles class-based kerns into the OpenType kern feature. The output table preserves your classes as GPOS lookup type 2 (pair adjustment) with class definitions in the format the rest of the OT pipeline expects. Browser renderers, Adobe apps, and InDesign all honor the kerning correctly. macOS Font Book's preview is the one place that occasionally renders kerning oddly — that's a Font Book bug, not yours.
Test the exported OTF in the actual target app (browser, InDesign) before assuming a kern doesn't work. Font Book is not the ground truth.
Related
The audit-codes reference documents the eleven kerning-related codes Patens emits. The first-font tutorial covers the broader workflow that kerning sits inside. And the OpenType features guide explains how the kern feature interacts with the other features your font may ship.
Patens is in private alpha. Request an invite →