How to convert a variable font to a static ttf
- Step 1Drop your variable font — Any variable TTF, OTF, WOFF, or WOFF2 with an fvar table. The tool checks for the fvar magic and rejects non-variable inputs with a clear error.
- Step 2Choose axis values (optional) — By default, the freezer bakes the font at the default axis position (each axis's defaultValue). Specifying non-default values produces a font where the static outlines remain at the defaults — for true axis-position interpolation, use fonttools' varLib.instancer.
- Step 3Download the static TTF — Output is a clean sfnt with no variable tables. Compatible with every PDF library, font installer, and rendering engine that accepts static OpenType.
Frequently asked questions
Will my axis position be respected?+
The default axis position is preserved (the font renders identically to the variable font at its default settings). Non-default positions require interpolating gvar deltas — a complex operation that the JAD tool doesn't perform browser-side. Use fonttools for true axis baking.
Why does the freezer help legacy browsers?+
Variable font support landed in major browsers in 2018–2019. Older Safari, Edge Legacy, IE11, and embedded WebKit views reject fvar tables outright — the font fails to load. Freezing produces a static fallback that those engines accept.
How much smaller is the static font?+
Typical reductions: 20–50% depending on axis count and complexity. A 5-axis Roboto Flex variable shrinks dramatically when frozen; a 2-axis Inter loses less. Variable fonts pay overhead in gvar deltas that static fonts don't carry.
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.