How to variable font freezing edge cases and gotchas
- Step 1Inspect axes before freezing — Run the Variable Font Axis Mapper first. List every axis: standard (wght, wdth, slnt, ital, opsz) and custom (typically uppercase 4-char tags like GRAD, YOPQ, XOPQ). Confirm you understand each axis's purpose before freezing.
- Step 2Check for MVAR — MVAR drives metrics adjustments per axis position — line height, x-height, cap height. After freezing, MVAR is dropped and metrics revert to the head/OS_2 table defaults. Visually identical for most use cases, but pixel-perfect comparisons may differ.
- Step 3Use fonttools for non-default positions — If your design uses non-default axis values (e.g., Inter at wght: 350), the JAD freezer doesn't apply gvar deltas. Use fonttools' varLib.instancer command to produce an instance at the exact axis position you need.
Frequently asked questions
What happens to custom axes?+
Custom axes (GRAD, YOPQ, XOPQ in Roboto Flex; FILL in Material Symbols) are dropped along with the rest of the variable tables. The static font renders at the axis defaults. If you need a non-default custom-axis position, fonttools is the right tool.
Does freezing break OpenType features?+
No — GSUB, GPOS, kern, and other layout tables survive untouched. Only the variable-specific tables (fvar, gvar, HVAR, MVAR, VVAR, cvar, STAT, avar) are dropped.
What about avar (axis variations)?+
avar maps user-facing axis values to internal coordinates non-linearly (e.g., wght: 700 might map to internal value 0.85). Freezing drops avar, so any non-default position you tried to bake would be unreliable. Stick to the default axis position with the JAD freezer.
Why is my output the same size as the input?+
Probably because the variable tables are tiny relative to the rest of the font. Some variable fonts (especially CJK) have huge glyph data and small fvar/gvar — freezing saves 1–5%, not 20–50%. The savings vary widely by font.
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.