Font Tools

WOFF2 to WOFF Converter

WOFF2 is Brotli-compressed with a table transform, so a browser cannot expand it back. Here is the command that can.

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: WOFF2 (header inspection only)

    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 inputWOFF2 (header inspection only)
    Produced outputInspection report and decompression 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 WOFF2 fileThe header fields that are not Brotli-compressed are read and reported.
    2. Note the reported flavourIt tells you whether the original was TrueType or OpenType.
    3. Read the recommended routewoff2_decompress restores the original TTF or OTF directly.
    4. Run it on your machineThe whole process takes well under a second.
    5. Verify the resultDrop the restored font into the metadata checker to confirm the tables are intact.

    About this tool

    It is a reasonable thing to want: you have a WOFF2 file and you need the original TTF or OTF so you can subset it, convert it, or use it in desktop software. Unfortunately WOFF2 is not simply a compressed archive.

    Inside a WOFF2 file the tables are stored in a transformed form and then Brotli-compressed as a whole. To reverse it you must run the inverse transform on the glyf and loca tables and then Brotli-decompress the stream. Browsers expose Brotli only for HTTP transfer, so JavaScript cannot do either step.

    This page reads what is visible in the WOFF2 header — the flavour, the table count and the compressed size — and gives you the exact decompression command, which takes under a second on a desktop.

    Features

    • Reads the uncompressed WOFF2 header fields accurately
    • Reports the flavour and table count of the source
    • Explains the Brotli plus transform structure in plain terms
    • Gives the exact woff2_decompress and fontTools commands
    • No fake output and no corrupted download
    • Points you to the metadata checker for verification

    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 decompresses WOFF2?

    woff2_decompress myfont.woff2 restores the original TTF or OTF. With fontTools: from fontTools.ttLib import TTFont; f = TTFont('myfont.woff2'); f.flavor = None; f.save('myfont.ttf').

    Why can the browser not do this?

    The CompressionStream API supports gzip and deflate, not Brotli. Browsers use Brotli internally for HTTP but never expose it as a JavaScript API, and the WOFF2 glyf/loca inverse transform is not implemented for authoring either.

    Are the fonts I find as WOFF2 usually licensed for reuse?

    Not necessarily. Web font files are frequently licensed for use only on the site that licensed them. Check the embedding rights reported by the metadata checker, and the licence terms you agreed to, before reusing a font.

    Will the restored font be identical to the original?

    Yes. WOFF2 is a lossless container, so decompression returns exactly the tables that went in.