Font Tools

WOFF to WOFF2 Converter

WOFF2 needs Brotli plus a glyph-stream transform, neither of which a browser exposes. Here is what to run instead.

Free · no account Runs in your browser Fonts Browser limits explained

Convert with this tool

Flagged as limited — read this firstPart of what this page is named after cannot be performed by a browser engine, and this tool will tell you so instead of pretending. The limitation is explained in full under Browser limits on this page below. Everything that can be done runs locally on your device.
Drag & Drop File Here

or choose a file from your device — it is processed in this tab and never uploaded

Accepted: WOFF (for inspection)

    Ready.

    Files stay on your device. There is no upload, no queue and no watermark, so a conversion works even with the network switched off after the page has loaded.

    Supported formats & processing

    Accepted inputWOFF (for inspection)
    Produced outputInspection report and conversion guidance — no font file is produced
    ProcessingWeb Audio API + canvas + native JavaScript encoders
    Upload requiredNo — the file is read locally and never transmitted

    How to use this tool

    1. Add the WOFF fileThe table directory, flavour and compression flags are read.
    2. Confirm the original formatThe tool reports whether the font was originally TrueType or OpenType.
    3. Read the recommended routewoff2_compress from the Google woff2 tools, or fontTools' woff2 module.
    4. Run it on your machineIt takes well under a second for a typical font.
    5. Verify the outputThe result is 25–30 percent smaller and loads in any current browser.

    About this tool

    WOFF2 is the best web font format available: typically 25–30 percent smaller than WOFF and supported by every browser released since 2016. It achieves that with two techniques — Brotli compression instead of zlib, and a transform that rearranges the glyf and loca tables into a more compressible form.

    Neither is available to JavaScript. The CompressionStream API offers gzip and deflate only; Brotli is exposed by browsers solely for HTTP transfer encoding, never as a callable API. The WOFF2 glyf/loca transform is defined in the specification but no browser implements it for authoring.

    Rather than produce a file with a .woff2 extension that is not actually WOFF2 — which would fail to load and be very hard to diagnose — this page tells you the command that works, and inspects your source WOFF so you can confirm what you have.

    Features

    • Reads the WOFF header and table directory accurately
    • Reports which tables were compressed in the source
    • Explains the two WOFF2 techniques that make it unavailable in JS
    • Gives the exact woff2_compress and fontTools commands
    • No file with a misleading extension
    • Confirm your source before you spend time on conversion

    Browser limits on this page

    The part that is genuinely impossible in a browser

    Outlines. TrueType (TTF) and PostScript (OTF/CFF) are different glyph technologies, not two labels for the same data. Converting one into the other means re-drawing every glyph — a conversion driven by a rasteriser and curve fitter, not by a byte-level transformation. No browser API does that, and any page that offers it is either upsampling a picture or lying.

    Naming. A browser can read a font's internal tables but cannot re-issue the digital signature and embedding metadata a font vendor expects, so a repackaged file is not a licensed re-release of the original typeface.

    WOFF2. WOFF2 uses a pre-processing transform plus Brotli, and no browser exposes Brotli compression to script. Genuine WOFF2 output is not possible here without shipping a full Brotli+woff2 encoder in WebAssembly.

    What this page does instead: it reads and validates the file you supply, states precisely which conversion is not supported and why, and points you at the desktop route that works (fonttools, fontforge, or the Google woff2 tools).

    Frequently asked questions

    What command converts WOFF to WOFF2?

    woff2_compress myfont.woff produces myfont.woff2 directly — the Google woff2 tools accept WOFF, TTF and OTF input. fontTools also works: from fontTools.ttLib import TTFont; f = TTFont('myfont.woff'); f.flavor = 'woff2'; f.save('myfont.woff2').

    Can I just rename a WOFF file to .woff2?

    No. Browsers check the magic bytes and will refuse a file whose signature does not match its extension. The failure is silent in the console and the font simply does not render, which is why producing a fake file here would be actively harmful.

    Is WOFF2 worth the effort?

    For a Latin subset it typically saves 25–30 percent over WOFF. On a page with three font weights that can be 150 KB or more, which is worth having on a mobile connection.

    Does WOFF2 need a fallback?

    Not for any browser released since 2016. Include the WOFF source second in the src list if you need to support anything older.