Font Subsetter
Cut a font down to the characters your site actually sets, then compress it to WOFF2 in the same pass. Typical saving on a Latin site is 90–97%. Everything runs in your browser – the font is never uploaded.
Drop a font here, or click to choose one
.ttf · .otf · .woff · .woff2 · up to 20 MB
The font is cut down on your own device. Nothing is sent to this site, and nothing is stored.
Keep these scripts
And keep exactly these characters
Optional. Anything you paste here is kept on top of the scripts above.
Output
Dropping hints can remove a third of the file. Safe on modern screens; keep them if you support Windows with GDI rendering. Keeping the licence records costs around 4 KB and is on by default – see below for why.
How to use this tool
- Drop your font file onto the box above. The tool reads it and shows which scripts it actually contains.
- Tick the scripts you need. Basic Latin is selected for you; scripts the font does not carry are shown greyed out rather than pretending to be an option.
- Paste any must-keep text – a brand name with an accent, a currency symbol, a set of arrows. Those characters are kept on top of the scripts you ticked.
- Choose your output. WOFF2 is on by default because it is what you should serve.
- Subset, then download. You get the before and after sizes and the total saving.
Why subsetting saves so much more than converting
A font like Arial carries over 3,000 characters – Greek, Cyrillic, Hebrew, Arabic, mathematical symbols, box-drawing characters. An English website sets about a hundred of them. Every visitor downloads the rest anyway.
Converting that font to WOFF2 takes it from about 1 MB to 400 KB, which is a real saving. Subsetting it to the characters you actually use takes it to about 68 KB. Doing both, which is what this page does in one pass, takes it to around 35 KB – roughly a 97% reduction. That is the difference between a font that delays your first paint and one that does not.
What subsetting removes, and what it cannot
HarfBuzz – the same shaping engine inside Chrome, Firefox, Android and LibreOffice – rebuilds the font with only the glyphs you asked for, and rewrites every internal table to match: the character map, the kerning pairs, the OpenType features, the ligatures. Ligatures and kerning between characters you kept still work, because the rules referring to removed glyphs are removed with them.
What it cannot do is guess. If a character is not in the set you chose and someone types it, the browser falls back to another font mid-word. That is why the paste box exists, and why it is worth pasting your real copy rather than trusting a preset.
About hinting
Hinting is a set of instructions telling the rasteriser how to snap outlines to the pixel grid at small sizes. On a high-density screen it is ignored, and it can be a third of the file. On Windows with older GDI rendering it still does real work.
If your analytics show meaningful Windows desktop traffic, keep hints and take the larger file. Otherwise dropping them is usually free bytes.
Why the licence records are kept by default
HarfBuzz keeps a font's first seven name records – copyright, family, subfamily, unique ID, full name, version and PostScript name – and discards everything above them. That silently throws away the licence text, the licence URL, the designer, the foundry and the trademark.
The result is a font file that nobody can later identify or trace to its terms, which is a genuinely bad outcome for a licensed font sitting in a build folder two years from now. This tool asks HarfBuzz to retain those records instead. It costs roughly 4 KB on a typical subset — about 6% — and the checkbox is there if you would rather have the bytes.
The licence question, honestly
Fonts carry a field called fsType where the foundry records what embedding it intends to allow, and one of its bits means "do not subset". This page reads that bit and tells you when it is set.
That is information, not permission and not legal advice. The bit is a declaration inside a file; your rights come from the licence you bought. Plenty of licences allow subsetting on fonts whose bit is set, and plenty of fonts with a clear bit are still licensed in ways that forbid it. The tool warns and lets you proceed, because it is not in a position to know which applies to you – but if you have not read the licence, read it before you ship the result.
Which formats it accepts
TTF, OTF, WOFF and WOFF2 all go in. WOFF2 is unpacked in your browser first, since it has to be plain sfnt before it can be rewritten. The subset always comes out as TTF, and as WOFF2 as well when you ask for it.
Before you subset, the font
analyzer shows what the file contains and what its licence fields say, and the
language checker
confirms it covers the languages you need. Afterwards, the
@font-face generator
writes the CSS – including the unicode-range that makes a subset
pay off properly – and the
character checker
will confirm the result still sets your copy.