Drop your fonts here
Upload one or more fonts — WOFF2 + Brotli, nothing uploaded to any server
TTF · OTF · WOFF · WOFF2 — single or batch
About this tool
Why subset and convert to WOFF2?
Pick exactly the characters you need — nothing ever leaves your browser.
A typical TTF font file ships hundreds of glyphs you'll never use — Cyrillic, Greek, mathematical symbols — even if your site only needs the Latin alphabet. Subsetting strips out everything you don't need, and WOFF2's Brotli compression shrinks what's left further than any other web font format.
- Free, no sign-up
- Nothing uploaded
- No watermark
Up to 90% smaller
A 300KB font carrying every Unicode script often compresses down to under 15KB once subset to just the characters your site actually renders.
Faster text rendering
Smaller font files mean less time blocking text paint — directly improving your First Contentful Paint and Cumulative Layout Shift scores.
Same visual identity
Subsetting only removes glyphs you don't use — every character your site actually displays renders pixel-identical to the original font.
Step by step
How to compress a font to WOFF2
Add your fonts
Drop TTF, OTF, WOFF or WOFF2 files — a single weight or a whole family.
Choose the characters
Keep the default Latin set, pick glyphs by script, or paste your site’s copy to select exactly the characters it uses.
Download WOFF2
Each font is subset and Brotli-compressed. Download them one at a time or all together.
Get the most out of it
Tips for the best results
- Paste your real site copyThe "auto-select from text" box finds exactly which characters you need — paste your homepage copy for the tightest possible subset.
- Upload one weight at a timeSubset Regular, Bold, and Italic as separate files rather than a single variable font, for the smallest output per weight.
- Keep punctuation and symbolsDon't forget em dashes, smart quotes, and currency symbols if your copy uses them — they're easy to miss when hand-picking characters.
- Add font-display: swapPair your subsetted WOFF2 with
font-display: swapin your @font-face rule so text never stays invisible while the font loads.
Keep going
More free tools
Questions
Questions about this tool
Everything here runs in your browser, so the answer to “where does my file go?” is always: nowhere. More in the general FAQ.
How do I compress a font file?
Drop a TTF, OTF, WOFF or WOFF2 file onto the page. It is converted to WOFF2, whose Brotli compression is the tightest of any web font format, and you can subset it at the same time — pick the characters your site actually renders and every other glyph is dropped. Nothing is uploaded; the work happens in your browser.
What is font subsetting, and why does it matter so much?
A typical TTF ships hundreds of glyphs you will never use — Cyrillic, Greek, mathematical symbols — even when your site only sets Latin text. Subsetting removes the ones you do not reference. It is usually a far bigger saving than the format change: a 300KB font carrying every script often lands under 15KB once cut to the characters a site really displays.
Is WOFF2 better than TTF or WOFF for a website?
Yes, for serving on the web. WOFF2 uses Brotli rather than the older zlib in WOFF, and TTF is not compressed for delivery at all, so the same outlines ship smaller as WOFF2. Every browser in current use decodes it. Keep the original TTF or OTF for editing — WOFF2 is a delivery format, not a working one.
Will subsetting change how my font looks?
No. Subsetting removes glyphs, it does not redraw them. Every character your site displays renders pixel-identical to the original. The risk is not quality but coverage: if a glyph is cut and later appears in your copy, the browser substitutes a fallback face for it. Paste your real page text into the auto-select box so the subset matches what you actually publish.
How do I use the compressed font on my site?
Reference it in an @font-face rule with format('woff2') and add font-display: swap so text is never invisible while the file loads. If you subset to a specific script, declare a matching unicode-range so the browser only fetches the file when a character in that range is needed.