Turn a WOFF web font into WOFF2 in seconds—upload your .woff file, convert, and download the .woff2 result.
.woff font into the box, or click "Add Files" to select one from your computer. Batch upload is supported, so you can re-encode an entire family at once.opentype.js, and the resulting .woff2 downloads instantly. No upload to a server, no sign-up, no watermark, no installed software.WOFF (Web Open Font Format) was published by W3C in 2012 and wraps a TrueType or OpenType font in a Flate-compressed container. WOFF2, finalized as a W3C Recommendation in March 2018 (and updated to a second edition in August 2024), keeps the same SFNT payload but switches to Brotli compression plus a font-aware preprocessing step. The result is a file that is typically 20–30% smaller than the same font as WOFF (median ~24% for TTF-flavored fonts, per the W3C WOFF2 Evaluation Report), with no change to how the font renders. Re-encoding existing WOFF files to WOFF2 is one of the cheapest performance wins for any site that ships custom typography.
@font-face payloads — Per the W3C WOFF2 Evaluation Report, WOFF2 averages roughly 20–30% better compression than WOFF 1.0 across the Google Fonts corpus (median ~24% for TTF-flavored fonts). A 94 KB WOFF often drops to around 65–75 KB as WOFF2, which compounds quickly across four weights and two styles.@font-face stack without going back to the source .ttf or .otf.| Property | WOFF | WOFF2 |
|---|---|---|
| W3C status | Recommendation, Dec 2012 (2nd edition Mar 2018) | Recommendation, Mar 2018 (2nd edition Aug 2024) |
| Compression | Flate / zlib (DEFLATE) | Brotli + font-specific glyph preprocessor |
| Typical size vs uncompressed | ~40–50% reduction | ~50–65% reduction vs uncompressed TTF (typically 20–30% smaller than WOFF, median ~24%) |
| Decoder complexity | Lower; widely tooled | Slightly higher, but ships in every modern browser |
| Browser support | ~99% (IE 9+, all modern) | ~97% (no IE, no Opera Mini) |
| Glyph/feature fidelity | Lossless | Lossless (same SFNT payload) |
| Container metadata | Preserved | Preserved |
| Streaming-friendly | Single Flate stream | Same; Brotli also single-stream |
| MIME type | font/woff |
font/woff2 |
| File extension | .woff |
.woff2 |
| Aspect | WOFF (Flate) | WOFF2 (Brotli + preprocessor) |
|---|---|---|
| Algorithm origin | Designed for general-purpose data (1996) | Designed by Google for web content (2013) |
| Static dictionary | None | 120 KB shared dictionary tuned for web text |
| Font-aware preprocessing | None | Reorders glyf/loca tables, transforms glyph data |
| Typical web-font ratio | ~50% of original SFNT | ~35–40% of original SFNT |
| CPU cost to decompress | Very low | Low (browsers ship optimized Brotli) |
| Re-decompression on cache hit | Avoided via HTTP caching | Same |
Yes — WOFF and WOFF2 are containers around the same SFNT font payload (glyf/CFF/CFF2, GSUB, GPOS, GDEF, etc.). The converter unwraps the WOFF, leaves the SFNT tables untouched, and re-wraps them in a WOFF2 container. Every OpenType feature your WOFF had — ligatures, contextual alternates, stylistic sets, fractions, kerning pairs, variable-font axes — is preserved byte-identical. The glyph outlines render exactly the same.
No. Brotli is a lossless general-purpose compression algorithm, and WOFF2's font-specific preprocessor (table reordering and glyph transformations) is mathematically reversible. The decoded SFNT after WOFF2 decompression is bitwise identical to the SFNT inside the source WOFF. Only the container envelope changes.
@font-face rule for 2026?Probably not. WOFF2 is supported by ~97% of global browsers as of 2026 (Chrome 36+, Firefox 39+, Safari 12+, Edge 14+, Opera 23+). The browsers that don't support it — IE11 and Opera Mini — are below 1% combined in most analytics. If your audience skews heavily enterprise (managed Windows fleets running IE11), keep WOFF as a second src: entry; otherwise, WOFF2-only is fine.
Typically 20–30% smaller than the WOFF, with a median of ~24% for TTF-flavored fonts, based on the W3C's WOFF2 Evaluation Report against the Google Fonts corpus. The exact ratio depends on the font: large CJK fonts (Noto Sans CJK, Source Han Sans) often see 35–45% reductions because their glyph data benefits more from Brotli's static dictionary, while small Latin-only fonts with few glyphs may only shrink 15–20%.
Yes. The WOFF2 spec explicitly supports variable fonts (fvar, gvar, HVAR, MVAR, STAT tables). If your WOFF contains a variable font, the WOFF2 output will also be variable with all axes intact. Be aware that variable fonts tend to be larger to start with, so the absolute byte savings are usually higher than for static fonts.
A few possible causes: (1) the source WOFF was already highly subset to a small Latin glyph set, leaving little for Brotli to exploit; (2) the source WOFF used aggressive Flate compression with a custom dictionary; (3) the font contains a large embedded color table (COLR/CPAL or sbix) that doesn't compress well. For colour/emoji fonts, the savings are typically closer to 10–15% rather than 30%.
Serve WOFF2 with Content-Type: font/woff2 (registered with IANA in 2017) and the .woff2 extension. Older guides recommend application/font-woff2 — this still works in practice but is no longer the registered MIME type. Make sure your CDN doesn't try to gzip the response on top of the already-Brotli'd payload; double-compression wastes CPU and slightly increases size.
Yes. The page lazy-loads opentype.js plus a WOFF2 encoder and runs the entire conversion in WebAssembly inside your tab. Your font never leaves your machine, which matters if you're working with a licensed commercial typeface whose EULA forbids uploading to third-party servers.
Yes. Drop multiple .woff files at once and each is re-encoded independently in the same session. There is no per-file size cap beyond what your browser tab can hold in memory, and there is no "Pro" tier or watermark — both regular weights and large CJK families work the same way.