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.

How to use this tool

  1. Drop your font file onto the box above. The tool reads it and shows which scripts it actually contains.
  2. 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.
  3. 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.
  4. Choose your output. WOFF2 is on by default because it is what you should serve.
  5. 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.

Frequently asked questions

It rebuilds the font with only the characters you asked to keep, and rewrites every internal table to match - the character map, kerning pairs, OpenType features and ligatures. A font like Arial carries over 3,000 characters; an English site sets about a hundred of them, and every visitor downloads the rest anyway.

For a Latin site, usually 90-97%. Arial goes from about 1 MB to 68 KB when subset to the characters English copy uses, and to roughly 35 KB when that subset is also compressed to WOFF2 - which this page does in the same pass.

Converting alone takes a 1 MB font to about 400 KB, which is a real saving but leaves most of it behind. The two steps solve different problems: subsetting removes characters you never use, compression shrinks what is left. Doing both is what gets you to 35 KB.

Yes, between the characters you kept. HarfBuzz - the same shaping engine inside Chrome, Firefox and Android - rewrites the OpenType tables so the rules referring to removed glyphs go with them, and everything else survives intact.

The browser falls back to the next font in your font-family stack for that character, so one letter renders in a different typeface mid-word. That is why the tool has a paste box: put your real copy in it rather than trusting a preset to have guessed right.

Usually yes. Hinting tells the rasteriser how to snap outlines to the pixel grid at small sizes, and it can be a third of the file. High-density screens ignore it. Keep it if your analytics show meaningful Windows desktop traffic, where older GDI rendering still uses it.

Fonts carry a field called fsType where the foundry records what embedding it intends to allow, and one bit means no subsetting. This page reads that bit and tells you when it is set. It is a declaration inside a file, not your licence and not legal advice - your rights come from the licence you bought. The tool warns and lets you proceed, because it cannot know which applies to you.

TTF, OTF, WOFF and WOFF2 all go in. WOFF2 is unpacked in your browser first, because it has to be plain sfnt before it can be rewritten. The result comes out as TTF, and as WOFF2 as well when you ask for it.

No. HarfBuzz and the WOFF2 encoder both run as WebAssembly inside your own browser tab. Fonts are routinely licensed and non-redistributable, so there is no upload endpoint on this page to send one to.