Skip to content
Convertto

WOFF2 to TTF Converter

Decompress WOFF2 fonts back to TTF format.

WOFF2 to TTF Converter converts font files between TTF, OTF, WOFF, WOFF2, and Base64 CSS definitions locally in your web browser. Font data processing runs entirely on your device without transmitting files over the network.

Runs in your browser
Privacy
Runs entirely in your browser — nothing is uploaded
Cost
Free, unlimited, no sign-up

What WOFF2 does to a font

WOFF 2.0 packages an sfnt font for delivery, and it does two things WOFF 1.0 does not. It compresses the whole font with Brotli rather than compressing each table separately with zlib, and it applies a reversible preprocessing transform to the glyf, loca and hmtx tables before compression. The transform re-encodes point coordinates, flags and bounding boxes into separate streams that the entropy coder models far better than the raw table does. The W3C describes the goal as "improved compression and thus lower use of network bandwidth, while still allowing fast decompression even on mobile devices".

Every one of those steps is defined to run backwards. Decoding reconstructs the original tables, so unwrapping a WOFF2 gives you the same font data that was packaged, not a re-rendered approximation of it.

The glyf transform only applies to TrueType outlines. A CFF-flavoured font is stored with the null transform and simply Brotli-compressed, which means decoding a PostScript-outline web font hands you an OTF. That is the usual reason a "WOFF2 to TTF" result does not look like a TTF: nothing went wrong, the source was never TrueType. Converting it properly is an OTF to TTF job, and unlike this step it is lossy.

What you get back is the subset, not the family

One thing no decoder can undo is subsetting. Web fonts are usually cut down before they are packaged: the build strips glyphs the site never renders, often drops GSUB and GPOS layout features it does not use, and sometimes removes hinting to save bytes. Decoding the web font returns exactly that subset. If the file you pulled off a site carries 240 glyphs, the family it came from may have had two thousand, and the missing ones are not recoverable from the file you have.

WOFF2 also has a collection directory, so a single .woff2 can wrap several faces that share tables, the same arrangement a .ttc uses on the desktop. Decoding one of those yields a collection rather than a single font, and tools that assume one face per file will take only the first.

FormatOutline dataCompressionWhere it belongs
.ttf TrueTypeQuadratic curves in the glyf and loca tablesNoneDesktop installation, Android build pipelines, tools that only read glyf
.otf OpenType with PostScript outlinesCubic curves in a CFF or CFF2 tableNoneDesktop installation, print and design applications
.woff WOFF 1.0Whichever of the two the wrapped font already usedzlib, applied to each table separatelyA fallback source for browsers too old for WOFF2
.woff2 WOFF 2.0Whichever of the two the wrapped font already usedBrotli over the whole font, after a reversible transform of glyf, loca and hmtxThe format to actually serve on the web
.eot Embedded OpenTypeEither, wrapped in a Microsoft-specific containerOptional MicroType ExpressInternet Explorer 8 and earlier. A W3C Member Submission that never became a standard
.ttc / .otc collectionEither, with tables shared between several facesNone on its own, though WOFF2 can wrap a collectionShipping a whole family in one file, common for CJK fonts
TTF and OTF are two flavours of the same sfnt container. WOFF and WOFF2 are packaging placed around one of them, not a third kind of outline.

When you need the TTF at all

  • Installing the face locally so a mockup matches what the browser renders.
  • Opening it in a font editor or inspector with no WOFF2 support.
  • Feeding a renderer, PDF library or build step that only reads sfnt files.
  • Reading the name, head and OS/2 tables to identify the font and its embedding permissions.

If the goal is the opposite direction, packaging a desktop font for the web, start at TTF to WOFF2 instead. Round-tripping a font through WOFF2 and back gains nothing.

Frequently asked questions

Is my font file uploaded anywhere?

No, font conversion happens entirely in your browser using JavaScript.

What is the difference between OTF and TTF?

Both are OpenType fonts using the same sfnt container. A TTF stores glyph outlines as quadratic curves in the glyf and loca tables; an OTF stores them as cubic curves in a CFF or CFF2 table. The extension reflects which outline format the file uses, and the rasteriser decides by reading the version tag inside the file rather than the extension.

Is converting a font lossless?

Unwrapping WOFF or WOFF2 back to sfnt is defined to be reversible, so the table data comes back intact. Converting between outline formats, such as OTF to TTF, is not: cubic curves have to be approximated by quadratics, and hinting and variable-font axes do not carry over.

Am I allowed to convert a commercial font?

Often not. Many font licences forbid modification, web embedding or redistribution, and converting a font is a modification. The OS/2 table carries an fsType field in which the foundry declares its embedding permission. Check the EULA before converting a font you did not make.

Can I convert an EOT or TTC file here?

No. This tool accepts TTF, OTF, WOFF and WOFF2. EOT is a retired Microsoft container for Internet Explorer 8 and earlier, and TTC is a collection holding several faces in one file, which needs a different unpacking step.

How to use the woff2 to ttf converter

  1. 1Select your font file — the file stays on your device and is never uploaded.
  2. 2Press Run, then download the result when it is ready.

Sources & specifications

Embed this tool

Put the working woff2 to ttf converter on your own site. It runs in your visitors' browsers exactly as it does here — free, no account, nothing uploaded.

Share this tool

Last updated

More developer tools