Developer Tools

Font Converter

Convert between TTF, OTF, WOFF, and WOFF2 — compress a desktop font for the web, or decompress a web font back to a usable file. Runs entirely in your browser; fonts up to 10 MB are never uploaded to a server.

Click to upload or drag and drop

TTF, OTF, WOFF, or WOFF2

What this does and doesn't convert

This tool converts between font containers — TTF and OTF share the same file structure (they differ in the type of outlines inside), and WOFF/WOFF2 are compressed wrappers around that structure for efficient web delivery. It does not convert between TrueType and PostScript/CFF glyph outlines, which are two different ways of describing letterforms — the "decompressed" output keeps whichever outline type your source file already used, and is saved with the matching .ttf or .otf extension automatically rather than letting you pick one that wouldn't reflect what's actually inside the file.

How the conversion is done

The font's data is wrapped or unwrapped, never rebuilt. A TTF or OTF is compressed to WOFF2 directly from the file you chose, and a WOFF or WOFF2 is unpacked to plain TTF or OTF data. Choosing TTF / OTF for a file that is already TTF or OTF returns the same font with its outlines unchanged. There is no TTF-to-OTF switch: a TrueType font stays .ttf and a PostScript (CFF) font stays .otf, and the extension follows the outlines inside the file rather than the name you uploaded. Choosing WOFF2 for a WOFF2 file returns it unchanged. The font is also read once to confirm it is valid and to count its glyphs. If the file can't be read as a font you'll see a message saying so; if it was read but the output couldn't be written you'll see a different one. Font collections (.ttc) aren't supported.

Why convert to WOFF2

WOFF2 uses Brotli compression with font-specific preprocessing, typically producing a file 30–50%+ smaller than the original TTF or OTF with no change to the letterforms: outlines and spacing decompress back identical, although the file itself is not byte-for-byte the same (a digital-signature table, if the font has one, is dropped). With around 97% browser support, it's the right choice for serving a font on a website via @font-face.

A worked example

Liberation Sans Regular, a free font, is a 139,512-byte TTF with 681 glyphs. Converted to WOFF2 it is 72,024 bytes, about 48% smaller. Liberation Sans Bold goes from 137,052 to 66,768 bytes, about 51% smaller. Converting the WOFF2 back to TTF gives 139,508 bytes for the Regular, 4 fewer than the original, and exactly 137,052 for the Bold, which is why the output is described as identical in letterforms rather than byte for byte.

How the file is recognized

  • The name must end in .ttf, .otf, .woff or .woff2 (capital letters are fine). The contents are then identified from the first four bytes, so a PNG renamed to .ttf shows "Couldn't read that file as a font."
  • A real .ttc file is not on the accepted list. If a collection is renamed to .ttf it is recognized and refused with its own message about font collections. Fonts can be up to 10 MB.
  • Choosing a different format in Convert to runs the conversion again straight away. WOFF to WOFF2 works, because the WOFF is unpacked first and then compressed.
  • A WOFF2 converted to WOFF2 comes back unchanged. A TTF converted to TTF / OTF also comes back with the same bytes, so use that option for a WOFF or WOFF2 you want to unpack.
  • The result page shows the number of glyphs, such as 681 glyphs. The file is saved under your font's name with .woff2, .ttf or .otf on the end.

Frequently asked questions

Does this convert TrueType outlines to PostScript (CFF), or vice versa?

No — TTF/OTF and WOFF/WOFF2 are containers and compression wrappers around the same underlying glyph data. This tool converts between those containers, but doesn't redraw the letterforms between TrueType and PostScript/CFF outline formats. The decompressed output is automatically saved with the correct .ttf or .otf extension for whichever outline format your source font already uses.

Is WOFF2 conversion lossless?

It is lossless for the letterforms: glyph outlines and spacing come back identical when you decompress. The file is not byte-for-byte identical, because WOFF2 re-encodes the glyph table, and a digital-signature (DSIG) table, if the font has one, is dropped.

Can this produce a plain WOFF (not WOFF2) file?

Not currently — WOFF2 is supported for compression since it has around 97% browser support and is smaller than WOFF for the same font. WOFF, TTF, and OTF are all supported as input.

Can I convert WOFF to WOFF2?

Yes. Choose WOFF2 as the target and drop the .woff file. It is unpacked to the underlying TTF or OTF data and then compressed to WOFF2.

Why does my output keep the .ttf ending after I chose TTF / OTF?

That option unpacks the font and keeps whichever outline type it has. A TrueType font stays .ttf and a PostScript font stays .otf, so a .ttf input comes back as the same file.

What does the glyph count tell me?

It is the number of glyphs in the font file, read once to confirm that the file is a valid font. 681 is the count for Liberation Sans Regular.

Related tools