Guide
Converting TTF and OTF fonts to WOFF2 and WOFF for the web
Fonts arrive from foundries and libraries as TTF or OTF files, which are designed for installing on a computer and not for sending over a network. For websites there are two wrappers made for the job, WOFF and WOFF2. A browser that supports WOFF2 downloads a noticeably smaller file, and every current browser does. This converter repackages your font in the web formats without changing a single outline.
The formats
TTF (TrueType) and OTF (OpenType with CFF outlines) are desktop formats. WOFF 1.0 wraps the same tables in zlib compression and adds metadata. WOFF2 wraps them again with a font-specific transform of the glyph table and Brotli compression, which is why it is smaller. Both keep every table exactly: outlines, hinting instructions, kerning, ligatures and variable-font data are all preserved. The page identifies the input by looking at the first bytes, so a file named .ttf that is really a WOFF is handled correctly.
A worked example
Press Sample to load Geist, an open-source variable font by the Geist Project Authors, shipped as WOFF2. It is 28.7 KB, and because it is already WOFF2 the page offers only the formats it is not in: it produces geist-latin-wght-normal.woff at 35.0 KB, which is 122% of the original. The comparison shows the point of WOFF2 on a real file, since the older wrapper costs about a fifth more than the newer one. Switch on “Unpack to TTF or OTF” and the page gives a third file with the plain desktop format, which is larger still.
Using the output
Place the files in your site and describe them with @font-face, WOFF2 first. List the WOFF2 src entry before any WOFF fallback so the browser picks the best format it understands. Serve fonts with a long cache time, since the file name changes when you replace it, and from your own domain when you can. The font face generator on this site writes the CSS and the preload tag for you.
Batch conversion
Drop several fonts at once, for example regular, italic and bold. Each gets its own row with the detected input format, the file size and the output list. When more than one result exists a button downloads everything as fonts.zip. If a file is not a valid font, or is already in every format you selected, that row shows a note and the other rows still work.
Edge cases
A font with an embedding restriction is converted anyway, because the restriction is a request recorded in the file and not enforced by the format. Large fonts, such as those for Chinese, Japanese or Korean, take longer to compress. Conversion cannot recover a damaged file, and a file that is not a font produces an error note on its row.
Licence check
Converting a font does not change what you are allowed to do with it. Open-source licences such as the SIL Open Font License generally allow web use and conversion, with conditions about names and attribution. Commercial desktop licences often exclude web embedding, and web use may need a separate licence. Read the licence before you publish a converted file.
Limits
Conversion keeps all glyphs, so the size gain is only from compression; to remove characters, use the font subsetter. No font is uploaded: reading, converting and zipping happen in your browser.
Related tools
- Font Subsetter removes unused characters to cut size further.
- @font-face CSS Generator writes the CSS and preload tags.
- Font Inspector shows a font’s names, features and licence text.
- Variable Font Tester tries the axes of a variable font.
Checked against the current version of the TTF/OTF to WOFF & WOFF2 Converter on .

