How to woff2 decompression edge cases and common errors
- Step 1Identify the source format — Run the Format Identifier first. The first 4 bytes must be 0x77 0x4F 0x46 0x32 (wOF2). If they're 0x77 0x4F 0x46 0x46 (wOFF) or 0x00 0x01 0x00 0x00 (TTF) or 0x4F 0x54 0x54 0x4F (OTF), use a different tool.
- Step 2Detect the wrapped flavour — Bytes 4–7 of a WOFF2 file are the flavour. 0x00010000 means TrueType outlines (output: .ttf), 0x4F54544F (OTTO) means CFF/PostScript outlines (output: .otf). The decompressor picks the right extension automatically.
- Step 3Handle decompression errors — If wawoff2 throws, the file is genuinely corrupt — try downloading again from the source. WOFF2 has no error-correction; even one byte flip in the Brotli stream prevents decompression.
Frequently asked questions
Why does my WOFF2 decompress to OTF instead of TTF?+
The flavour field (bytes 4–7) is OTTO, indicating PostScript/CFF outlines. The font was originally an OTF, wrapped in a WOFF2 container. Use it as .otf — it's not corrupt.
What does 'Brotli decompression failed' mean?+
The compressed Brotli stream is corrupt or truncated. Most likely cause: incomplete download. Re-fetch from the source. Less commonly: an old wawoff2 version with a Brotli decoder bug — refreshing the JAD page reloads the latest WASM module.
Can I decompress a WOFF2 with embedded fonts?+
WOFF2 doesn't support embedded fonts the way OpenType collections (TTC) do. If your file contains multiple faces, it's a TTC, not a WOFF2 — the magic bytes will be 'ttcf' not 'wOF2'.
Is there a size limit?+
Free tier 5 MB, Pro 50 MB, Developer 1 GB. Most fonts are under 1 MB. Massive CJK fonts (30 MB+ uncompressed) compress to 5–8 MB WOFF2 — they decompress fine on Pro and above.
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.