How to truetype hinting tables: complete reference
- Step 1fpgm — font program — Bytecode functions defined globally for the font. Run once at font load. Defines reusable hint primitives that prep and per-glyph hints call.
- Step 2prep — control program — Bytecode that runs every time the font is rendered at a new size. Sets up the rasteriser state. Empty after stripping; modern engines skip it gracefully.
- Step 3cvt — control value table — Pre-defined coordinate values referenced by hint bytecode. Without it, hint bytecode that references cvt entries silently produces zero values — usually a no-op.
Frequently asked questions
What is gasp?+
Grid-fitting and Scan-conversion procedure table. Tells the renderer at what pixel sizes to apply hinting vs grayscale vs subpixel rendering. Modern renderers ignore it; legacy GDI on Windows 7 used it heavily.
What's hdmx?+
Horizontal device metrics — pre-computed glyph widths at specific pixel sizes. Used by some legacy renderers to skip layout calculations. Universally ignored in modern engines.
What's VDMX?+
Vertical device metrics — pre-computed line heights at specific pixel sizes. Same legacy fate as hdmx.
What's LTSH?+
Linear threshold table — tells the renderer at what pixel sizes glyph widths become linearly scalable. Useful for very-old GDI; ignored by everyone else.
Privacy first
Every JAD Font tool runs entirely in your browser using opentype.js and the wawoff2 WASM Brotli encoder. Your fonts never leave your device — verified by zero outbound network requests during processing.