Roadmap

Phase 1 — TTF Foundation

The first phase establishes the complete foundation: parse, write, transform.

Parser

Decode a TTF binary into a fully typed Font struct. All core tables decoded to named fields. Glyphs decoded to contours and control points — no raw byte storage.

Tables: head, hhea, maxp, OS/2, name, cmap, post, loca, hmtx, kern, glyf.

Writer

Re-encode a Font struct back to a TTF binary. The correctness bar: Parse → Write on a real font file produces byte-identical output.

Transform Engine

  • FontPatch struct: pointer field patches + optional GlyphTransform
  • Modify(*Font, FontPatch) — single mutation point
  • Plugin registry: name → func(*Font, json.RawMessage) (FontPatch, error)
  • JSON pipeline loader

CLI

handyman run pipeline.json input.ttf output.ttf

Transformations

PluginTables touchedOutline work
boldOS/2, glyfYes
widthhmtx, glyfYes
monospacehmtxNo
bounceglyfYes

Phase 2 — Variable Fonts

Add parsing for variation tables: fvar, gvar, avar, HVAR, MVAR. Expose axis blending as a transformation — blend along wght or wdth for fonts that support it, falling back to outline manipulation for static fonts.


Phase 3 — CFF/OTF

Add a CFF charstring parser that produces the same Glyph struct as the TTF parser. All Phase 1 transformations work for OTF files with no changes.


Phase 4 — Desktop UI

Visual glyph preview, live parameter editing, and a pipeline builder. The CLI and pipeline format remain the primary interface; the UI is a layer on top.