self-intersecting
A contour crosses itself. Rasterisers fill the overlap unpredictably depending on fill-rule (even-odd vs non-zero).
Patens is a design tool for designing beautiful typefaces — with some assistance.
Proof · 30 seconds
One unbroken take in the editor: draw a lowercase a, trace it to Béziers, let the audit read the result, apply a one-click fix, kern the new letter against V, and export an OTF you could install right now. No cuts, no speed-ups.
Proof · Specimen
Studio Geometric — drawn in Patens, exported by Patens, shipped as the editor's demo OTF. It's not a marketing typeface; it's the kind of work the editor produces end to end, from a blank canvas to an installable file.
The Method · Mentor in the margin
Patens runs all 105 rules continuously. When a contour crosses itself, when an x-height drifts, when a sidebearing wanders from its class — the audit notes it in plain English, beside the glyph, while you draw. Around 30 codes also offer a one-click fix; the rest are matters of judgment.
describeAuditCode() — one dictionary, five surfacesA contour crosses itself. Rasterisers fill the overlap unpredictably depending on fill-rule (even-odd vs non-zero).
A lowercase letter that should reach x-height is sitting noticeably below it. Uneven tops across letters give text a wobbly rhythm; consistent x-height alignment is what makes type read smoothly.
This glyph's LSB has drifted from the median of its sidebearing-class peers. Either re-apply the class or remove this glyph from it.
Read the Method → · Full reference (105 codes) · Also
from the terminal: npx patens audit
Interface · Where you'll work
Patens runs entirely in the browser. Projects live in your IndexedDB; nothing leaves the machine unless you choose to share. The audit panel sits to the right of the canvas and updates as you draw.
Glyphs · 162
Audit 4
contour 1, points 4–6
+14u above x-height
right side −6u
+8% bottom downstroke
Editor surface — actual layout. Findings are real audit codes.
What the audit checks · 9 families, 105 rules
The 105 codes group into nine families. Each one runs continuously; each one has plain-English prose attached. Click to expand a family — the codes inside are the actual checks running against every glyph as you draw.
Self-intersection, winding direction, near-collinear nodes, sharp kinks. The geometry that decides how the glyph rasterizes at every size.
self-intersecting · winding-collision · sharp-kink · near-collinear-points
Ascender, descender, cap-height, x-height, baseline. The framework every letter hangs on; drift here breaks reading rhythm before any single letter looks wrong.
cap-above-ascender · xheight-misaligned · win-clip-top · use-typo-off
Left + right sidebearings, advance widths, class drift. The optical balance type designers calibrate by eye in strings like nnnonnon — now checked continuously.
overflows-advance · deeply-negative-lsb · sidebearing-class-drift
Duplicate names, orphan classes, empty features, kern enabled with zero pairs. The plumbing that has to be right or the font silently misbehaves in downstream apps.
duplicate-glyph-name · pair-orphan-class · feature-kern-disabled-with-pairs
Family, style, version, vendor ID, license, glyph-name canonicality. What downstream apps read to identify the font, and what reservation-of-name licenses (OFL) require you to change in derivatives.
naming-family-style · vendor-id-invalid · glyph-name-not-canonical
Latin-1 supplement, typographic essentials, currency, math symbols. Scripts you claim to cover and what those scripts actually require to be useful for setting real text.
coverage-typo-essentials · coverage-latin-1-supp · coverage-currency · coverage-math
Mark-positioning anchors — base, mark, ligature. The GPOS layer that makes diacritics sit correctly across the alphabet, in every accented language.
mark-no-prefix · base-with-prefix · anchor-without-partner
Master contour counts, axis ranges, named instances. The constraints that must hold for a variable font to interpolate cleanly without producing surprise glyphs between masters.
master-contour-count · axis-out-of-range · no-instances
COLR/CPAL palette consistency, project-brief completeness, tabular figures for data tables, and the long tail of practical checks designers internalize over years.
palette-length-mismatch · brief-no-intent · figures-non-tabular
Compared · Where Patens fits
Most rows in a font-editor comparison are tied — every modern editor draws Béziers and exports OpenType. These are the rows where Patens is different.
| Feature | Patens | FontLab | Glyphs | Fontra | Robofont | Glyphr Studio | Lipi | Fontish |
|---|---|---|---|---|---|---|---|---|
| Price | Free | $499 | $300 | Free | $400 | Free | Freemium | $6.49+/mo |
| Open source | MIT | — | — | BSD | — | MIT | — | — |
| Runs in the browser | ✓ | — | — | ✓ | — | ✓ | ✓ | ✓ |
| Pressure-sensitive sketch | ✓ | — | — | — | — | — | — | — |
| 105-code teaching audit | ✓ | partial | partial | — | partial | — | — | — |
| One-click "Fix" actions | ✓ | — | — | — | — | — | partial | partial |
| Plain-English explanations | ✓ | — | — | — | — | — | — | — |
— Alejandro, maker · with audit notes · more about who, why, and what's under the hood