Compress WOFF2 fonts by subsetting them
A WOFF2 is already brotli at maximum. The saving is in the glyphs you were never going to draw, and this cuts them out on your own machine.
or browse your device. Everything is processed on this device
No WOFF2 to hand?
How to subset and compress a WOFF2
It is unpacked in this tab with Google's own woff2 codec. Nothing is uploaded.
Latin covers an English or Western European site. Widen it if your pages carry other alphabets.
The result panel says how many glyphs went and what stopped working. Read it before you ship.
Serve it from your own domain with a long cache header and a matching unicode-range.
What font subsetting actually does
WOFF2 is a font wrapped in brotli, compressed at the highest setting the encoder has. Decompress one, recompress it with the same codec and you get the same file back, byte for byte. We measured that on this site's own three web fonts: three round trips, zero bytes saved. Any tool that offers to 'compress' your WOFF2 and does only that is selling you nothing.
The bytes are not in the compression, they are in the glyph count. A typical font from Google Fonts carries Latin, Latin Extended, Cyrillic, Greek and often Vietnamese, which is anywhere from 400 to 3000 glyphs. An English language site renders about 220 of them. You are downloading the rest on every first visit for nothing.
So the tool here is a subsetter. It unpacks the font, works out which glyphs your chosen character range needs, follows every composite glyph to the pieces it is built from, rebuilds the outline, metric and character-map tables around the survivors, and repacks. On a full font that is routinely 90% or more off, because most of what you downloaded was Cyrillic, Greek and symbols you were never going to draw. On a font that was already subsetted it is far less, because someone did this job before you.
It is not free of consequences and this page will not pretend otherwise. Subsetting renumbers every glyph in the font, and the OpenType layout tables that hold kerning pairs and ligatures point at the old numbers, so they are removed rather than left pointing at the wrong letters. Body text will not notice. A large heading might. The result panel tells you every time.
WOFF2 and font subsetting FAQ
Why is my WOFF2 file so big?
Almost always because of glyph coverage rather than compression. A font carrying Latin, Latin Extended, Cyrillic and Greek is several times the size of the same font carrying Latin alone, and most sites never render the other alphabets. Variable fonts add to it too: every extra axis stores a second set of outline deltas. Check the glyph count before you blame the encoder.
Can WOFF2 be compressed further?
Not by compressing it. WOFF2 is brotli at its maximum setting, so recompressing gives you the same bytes back. The only way to make one smaller is to put less in it: fewer glyphs, no hinting, no metadata. That is removal, not compression, and any tool claiming otherwise is measuring something else.
What is font subsetting?
Font subsetting is cutting a font file down to the characters you actually use. The subsetter reads the font's character map, works out which glyphs those characters need, follows composite glyphs to their components (an e-acute is an e plus an accent, and dropping either one leaves a blank), then rebuilds the glyph, metric and character-map tables around what is left. The output is a smaller, valid font that draws fewer characters.
Will subsetting break my text?
Yes, if you cut a range you actually use. Any character not in the subset falls back to the next font in your stack, so it renders in something else or as a blank box. The way to tell is to load the subset font locally and look at your real pages, especially names, addresses, prices and anything user-generated: those are where the stray accent, currency symbol or Greek letter hides. Comments and search fields are the usual culprits, since your visitors type whatever they like.
Does subsetting remove kerning and ligatures?
Here, yes, and it is the honest trade of this tool. Subsetting renumbers glyphs, and the GPOS and GSUB tables that hold kerning and ligatures are keyed to the old numbers. Rewriting them correctly means reimplementing most of OpenType layout, and getting it slightly wrong produces a font that breaks a text shaper rather than one that looks a bit off. So they are dropped and you are told. If your headings depend on tight kerning, keep the full font for display and subset only the body face.
Should I use WOFF2 or WOFF?
WOFF2 everywhere. It is roughly 30% smaller than WOFF for the same font and every browser released since about 2016 supports it, Safari and Edge included. WOFF is worth adding as a fallback only if your analytics genuinely show visitors on browsers that old, and for almost every site they do not. There is nothing newer to move to: WOFF2 is the end of the line for web font containers, which is the opposite of the advice on our image pages.
Is it legal to subset a font I bought?
It depends entirely on the licence, so read it before you subset a commercial font. Most open licences, the SIL Open Font License included, allow modification and redistribution; many commercial webfont licences allow subsetting for your own site and forbid redistributing the result as a font file. Two rules hold either way: never re-serve a subset as a general-purpose font for others to download, and never strip the licence text out of the file. This tool keeps name records 13 and 14, the licence description and URL, whatever else it removes.
What should I do instead of compressing the file?
Use unicode-range in your @font-face rules and let the browser download only the subsets a page needs. Cut variable-font axes you never set, and drop the weights and italics you never call for, since each is a separate file. Serve the fonts from your own domain with a one-year immutable cache header, and preload only the one or two faces above the fold. Those four things beat any byte squeezing you can do to a single file.
Other compressors
Same format joins the queue. Anything else re-routes to its own tool.