productivity

Font Subsetter

Keep only the characters your site uses, subset TTF / OTF fonts to WOFF2, and export ready-to-use CSS and a webfont ZIP package.

Local processing
About your filesFiles and content selected in this tool are processed in your browser and are not uploaded to a Browser Kitty backend.
Operation demo See the basic workflow in a short video.

About this tool

Font Subsetter collects the characters a web project actually uses and creates smaller WOFF2 webfonts from TTF / OTF sources. Characters can come from direct text or local HTML, CSS, JavaScript, Markdown, and other supported source files, then be deduplicated into one shared set for multiple fonts.

Before generation, the app reads each font's cmap to show missing characters and Unicode code points, and displays OS/2 fsType restrictions. No Subsetting / Bitmap Embedding Only inputs are blocked. After generation, compare source and output fonts, copy @font-face CSS with unicode-range, save WOFF2 files, or export a complete webfont ZIP with demo.html and manifest.json.

Good for

  • Reduce a Japanese webfont by creating a WOFF2 that contains only characters actually used on the site
  • Subset Regular, Bold, Italic, and other related fonts with one shared character set
  • Collect used characters from local HTML, CSS, JS, Markdown, and other source files
  • Check missing characters before export and reduce unexpected fallback-font usage
  • Generate @font-face CSS and unicode-range while converting TTF / OTF for the web
  • Hand off WOFF2 files, CSS, demo.html, and manifest.json in one ZIP package
  • Convert a custom TTF into a smaller web-oriented WOFF2 containing only required characters

What it can do

Key capabilities available in this tool.

How to use

  1. Add one or more fonts. TTF / OTF are generation sources; WOFF / WOFF2 can also be added for inspection.
  2. In Characters, enter real site text, choose Japanese presets, or add TXT / MD / CSV / JSON / YAML / HTML / CSS / JS / TS / XML / SVG files.
  3. Open Font coverage and review missing characters for each font and across the set. If required characters are missing, change the font or character set before export.
  4. Review fsType and available license metadata for each font. Process Restricted License fonts only when you have the required rights; No Subsetting / Bitmap Embedding Only fonts cannot be generated.
  5. In Output, choose the fonts to generate and review or edit family, weight, style, and output filename.
  6. Generate the selected fonts. Multiple fonts are processed one at a time so one failure does not stop later selected fonts from being attempted.
  7. Select a successful output and compare the source font with the generated WOFF2 using the same text and size.
  8. Save individual WOFF2 files, copy the generated @font-face CSS, or download font-subset.zip.

Supported

  • Generation sources: TTF / OTF. WOFF can be inspected but is not used as a generation source. WOFF2 can be added, but v1.0.0 does not decode its internal tables, so cmap coverage and fsType are unavailable for WOFF2 input.
  • Character sources: direct text, ASCII, common symbols, Hiragana, Katakana, 2,136 Joyo Kanji, combined Japanese starter set, TXT / MD / CSV / JSON / YAML/YML / HTML/HTM / CSS / JS/MJS / TS / XML / SVG.
  • Text encodings: UTF-8, UTF-8 BOM, UTF-16LE BOM, and UTF-16BE BOM. Shift_JIS is not auto-detected.
  • Coverage: read each font's cmap and show missing characters as glyph text plus U+XXXX / U+XXXXXX, without relying on browser fallback rendering.
  • Subsetting restrictions: inspect OS/2 fsType. No Subsetting / Bitmap Embedding Only are blocked; Restricted License requires an explicit rights/permission check.
  • Variable Fonts: supported CFF2 / fvar-based fonts remain variable. Axis pinning is not included in v1.0.0.
  • Output: individual WOFF2, @font-face CSS, unicode-range, and font-subset.zip containing fonts/*.woff2, fonts.css, demo.html, and manifest.json.
  • Input limits: fonts are limited to 100 MB each, 12 files, and 300 MB total. Character-source files are limited to 10 MB each, 200 files, and 50 MB total.
  • Runtime networking: HarfBuzz, Brotli, subset Worker code, and preset data are embedded in the HTML, with CSP connect-src 'none'.

Limitations and notes

  • TTF / OTF are the v1.0.0 generation sources. WOFF can be inspected but is not used for generation.
  • WOFF2 input is not internally decoded yet, so cmap coverage and fsType cannot be inspected for WOFF2 inputs.
  • TTC / OTC face selection is not supported.
  • Shift_JIS character-source files are not auto-detected.
  • Generation can continue with missing characters, but those characters cannot appear in that font's output.
  • The combined Japanese preset is a starter set, not complete coverage for every name, place name, variant, non-Joyo kanji, or symbol. Add real site text as well.
  • Variable Font axis pinning is not supported; compatible Variable Fonts remain variable.
  • Color-font formats and some uncommon layout systems are best-effort and outside the v1.0.0 compatibility guarantee.
  • fsType is a technical flag inside the font and does not automatically determine whether your license legally permits webfont use. Check the font license / EULA as well.
  • Large fonts and many simultaneous inputs can consume substantial browser memory.

Frequently asked questions

Can I convert TTF or OTF to WOFF2?

Yes. TTF / OTF sources can be subset to WOFF2 using only the requested character set, rather than being converted as full fonts.

Can it subset Japanese fonts?

Yes. Presets include Hiragana, Katakana, and 2,136 Joyo Kanji. The combined Japanese preset is not complete for every name, place, variant, or symbol, so add the actual site text too.

How are missing characters checked?

The app reads each font's cmap and shows missing characters plus U+XXXX / U+XXXXXX. It does not rely on browser fallback rendering.

Can I process multiple font files together?

Yes. Apply one character set to multiple Regular, Bold, Italic, or other TTF / OTF files. They are processed one at a time so one failure does not stop later fonts.

Can it collect characters from my site's HTML or CSS?

Yes. Add supported local HTML, CSS, JS, TS, Markdown, and other files. HTML / XML / SVG are parsed as data rather than executed.

Does it automatically decide whether webfont use is legally allowed?

No. It can display fsType and available license metadata, but fsType alone is not a legal permission decision. Check the font's license or EULA as well.

What is included in the generated package?

You can save individual WOFF2 files. font-subset.zip contains fonts/*.woff2, fonts.css, demo.html, and manifest.json; original fonts, entered text, and source-file contents are not included.

Are fonts or source text uploaded to a server?

No. Font inspection, character collection, subsetting, comparison, CSS generation, and ZIP export run in the browser. The hosted version only needs the initial HTML request.

Offline version and source code

The generated standalone HTML embeds HarfBuzz, Brotli, subset Worker code, and the Joyo Kanji preset with CSP connect-src 'none'. Where the browser/environment permits local HTML execution, the saved dist/index.html can be opened and used without network access.

View source on GitHub