1. Home
  2. Design tools
  3. Font Subsetter

Font Subsetter

Keep only the glyphs a page needs and make the font file a fraction of its size.

Free, no sign-up. Runs in your browser: nothing is uploaded.

How to use Font Subsetter

  1. Drop a font.
  2. Pick character sets, type text or enter Unicode ranges.
  3. Create the subset and download it.

Features

  • HarfBuzz subsetter compiled to WebAssembly
  • Latin, Latin-1, Cyrillic, Greek and other sets
  • Custom text and Unicode ranges
  • WOFF2, WOFF or TTF/OTF output
  • Optional hinting removal
  • @font-face with unicode-range

Supported formats

Input

  • TTF
  • OTF
  • WOFF
  • WOFF2

You get

  • WOFF2
  • WOFF
  • TTF/OTF
  • CSS

Private by design

Everything you enter is processed by your browser on this device. Nothing is sent to openWorkstand or anyone else, so the Font Subsetter is safe for private and work data. After you have used it once while online, it also works without an internet connection. How local processing works

Good to know

  • Collections (.ttc) are not supported.
  • Subsetting must be allowed by the font’s license.

Guide

Subsetting a web font to the characters you need

A professional font can hold thousands of glyphs for many languages, while a typical English page uses perhaps a hundred. Visitors still download all of it. Subsetting cuts the file to the characters you actually show, which can make a web font much smaller and improve loading, particularly on mobile connections. This page does it in your browser, and then writes the CSS that describes what the subset covers.

How the cut is made

HarfBuzz, the text shaping engine used by browsers and operating systems, includes a subsetter. It keeps the glyphs for the characters you list, then follows the font’s own rules to keep whatever else those characters need: ligatures and alternate forms reachable through layout features, the parts of composite glyphs such as accented letters, kerning pairs between kept glyphs and the .notdef glyph. Everything else is dropped. The engine is compiled to WebAssembly and runs locally.

A worked example

Press Sample to load Geist, a 28.7 KB variable font, with the Basic Latin set selected and the extra text “Hello, world”. Basic Latin is the 95 printable ASCII characters, so the page shows “Characters selected 95 of 95 in this font”. Press Create subset with WOFF2 output. The result is 18.1 KB, 37% smaller, with 152 glyphs kept out of the original 288. The downloaded file is geist-latin-wght-normal-subset.woff2, 18,576 bytes, and the CSS box contains an @font-face rule with unicode-range: U+20-7E plus the weight range of the variable font. The saving is modest because this font is already a Latin-only subset; a font with Cyrillic, Greek and CJK blocks shrinks far more.

Choosing characters

Three sources combine. Tick one or more sets: Basic Latin, Latin-1 for Western European accents, Latin Extended-A for Central European languages, digits and basic symbols, Cyrillic, Greek or common punctuation. Paste text the page will show, which adds exactly those characters. Or type Unicode ranges such as U+0020-007E, U+20AC. The page keeps the union, then intersects it with what the font really has and tells you how many matched. Characters the font lacks are listed so you can pick a different font instead.

Hinting and formats

Remove hinting deletes the TrueType instructions that adjust outlines on low-resolution screens. It makes files smaller, and on modern high-resolution screens the hints matter little, but check the text on the Windows machines you support before removing them. The output can be WOFF2, WOFF, or an uncompressed TTF or OTF. Use WOFF2 for websites. The generated CSS names the format to match your choice.

unicode-range

The unicode-range descriptor tells the browser that this file covers only certain characters, so it downloads the file only when the page uses one of them. Splitting a family into several subsets, for example Latin, Cyrillic and Greek, lets visitors fetch just the part they need. The page writes the range from the characters actually kept, not from the ones you requested.

Edge cases

Fonts whose embedding flags forbid subsetting trigger a warning, and the licence comes before any technical possibility. Open-source licences often allow subsetting but may require a different name for a modified font. Subsetting variable fonts keeps the axes by default, so the file stays flexible. Dynamic content, such as names typed by users, can contain any character, so keep a broad set or a fallback font.

Limits

The tool subsets by characters, not by features or axis ranges. It does not instance a variable font to a single weight. If none of the selected characters exist in the font, the page says so instead of creating an empty file. Nothing leaves your device.

Checked against the current version of the Font Subsetter on .

Troubleshooting

The download did not start

Look for your browser’s download bar or icon. Some browsers ask once before a site may download files; allow it and click the button again.

Frequently asked questions

Why does the subset keep more glyphs than characters I picked?

A glyph is a drawn shape. Besides one glyph per character, the subsetter keeps what those characters need: ligatures and alternates reachable through layout rules, composite parts of accented letters, and the .notdef glyph. In the sample, 95 characters need 152 glyphs.

What happens to a character I forgot?

The browser falls back to the next font in the stack for that character, so it appears in a different typeface. List every character the page can display, including punctuation, currency and any text users type.

Will ligatures and kerning still work?

Yes for the characters you keep: the subsetter also keeps the layout rules and glyphs those characters need.

Is subsetting allowed?

It depends on the license. Many open-source licenses allow it, some require renaming a modified font, and a font’s no-subsetting flag asks you not to. The page warns when that flag is set.

Keep working with the result

After you download, choose “Save to Workstand” to keep the result in a folder on your computer, attach it to a project and create a follow-up task. It is saved by your browser, not uploaded.