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
FontPatchstruct: pointer field patches + optionalGlyphTransformModify(*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
| Plugin | Tables touched | Outline work |
|---|---|---|
bold | OS/2, glyf | Yes |
width | hmtx, glyf | Yes |
monospace | hmtx | No |
bounce | glyf | Yes |
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.