Font subsetting is one of the highest-impact web performance optimizations most developers overlook. A typical font file contains thousands of glyphs covering dozens of scripts — Latin, Cyrillic, Greek, CJK, Arabic, Devanagari — but your website probably uses only a fraction of them. Loading a full 2MB font file when you only need 80 Latin characters is like shipping an entire encyclopedia when the reader needs one chapter. SapienKit's Font Trimmer lets you select exactly which glyphs to keep and exports a new font file containing only those, directly impacting your Core Web Vitals scores, Largest Contentful Paint (LCP) times, and overall page load speed.
The tool uses opentype.js to parse the font file entirely in your browser. It reads all font tables — glyph outlines, metrics, kerning pairs, hinting instructions, name records — and rebuilds a new font containing only the glyphs you select. You can choose glyphs individually from a visual grid, specify Unicode ranges (e.g., U+0020-007F for Basic Latin), or type sample text and let the tool automatically select the required glyphs. The output is a standards-compliant font file ready for use on the web or in applications.
The size reduction is dramatic and measurable. Google Fonts' Noto Sans CJK, which covers Chinese, Japanese, and Korean characters, weighs roughly 16MB. Subsetting it to Latin-only yields a file around 40KB — a 400x reduction. Even for Latin-script fonts, trimming unused glyphs (extended Latin, math symbols, dingbats, legacy characters) can reduce a 500KB file to 30-50KB. On mobile connections — particularly in emerging markets where 3G is still common — every kilobyte matters. A 2-second font load can become a 50-millisecond load, the difference between a user staying and bouncing.
Web developers optimizing page load times are the primary audience. If you use custom fonts (and most modern websites do), subsetting should be part of your build process. But it is equally valuable for designers embedding fonts in presentations or prototypes, email template developers who need tiny inline fonts, multilingual sites that serve different font subsets per language (Latin for English pages, Cyrillic for Russian pages, CJK for Japanese pages), progressive web app (PWA) developers who need fonts cached offline, and anyone paying for CDN bandwidth where smaller assets directly reduce costs.
SapienKit's Font Trimmer also serves teams building apps for constrained environments — kiosk displays, embedded systems, e-readers, or IoT dashboards — where storage and memory are limited. By including only the exact glyphs needed for the UI, you keep the footprint minimal without sacrificing typography.
How does this compare to alternatives? The Google Fonts CSS API supports a unicode-range descriptor that allows the browser to download only the subsets it needs, but this only works with Google-hosted fonts and relies on the browser making multiple range requests. FontSquirrel's Webfont Generator is a popular server-side tool, but you must upload your font to their server, and customization options are limited. The Python fonttools/pyftsubset library is powerful but requires a Python environment and command-line expertise. SapienKit runs entirely in your browser, requires no installation or upload, provides a visual glyph grid so you can see exactly what you are keeping, and lets you fine-tune your subset with precision.
The tool supports TTF, OTF, and WOFF as both input and output formats. Unicode range selection lets you target specific blocks (Basic Latin, Latin Extended-A, Cyrillic, Greek, etc.) or enter arbitrary ranges. The visual glyph preview grid displays every glyph in the font with its Unicode code point, making it easy to identify and select exactly what you need. Hinting instructions and kerning pairs for the selected glyphs are preserved, so your subsetted font renders just as well as the original at all sizes.
A few practical tips: always include Basic Latin (U+0020-007F) which covers standard ASCII letters, digits, and punctuation — omitting the space character or period will break your text. Test your subsetted font with representative sample text before deploying. If you use CSS features like font-feature-settings for ligatures or stylistic alternates, make sure the relevant glyphs are included. And always check your font license — most commercial licenses permit subsetting for web use, but some restrict modification of the font file. When in doubt, review the license terms or contact the foundry.
To dramatically reduce file size for web use. A full font may contain thousands of glyphs for dozens of scripts, but your site probably uses only a small subset. Removing unused glyphs can shrink a 2MB font to 30-50KB, directly improving page load speed, Core Web Vitals scores, and user experience — especially on mobile connections.
It depends on how many glyphs you keep. Subsetting a full CJK font (16MB) to Latin-only yields roughly 40KB — a 400x reduction. Even Latin-script fonts typically shrink from 300-500KB to 30-50KB by removing extended characters, math symbols, and legacy glyphs. The fewer glyphs you keep, the smaller the output.
The tool accepts TTF (TrueType), OTF (OpenType), and WOFF (Web Open Font Format) files as input. You can export the subsetted font in the same format. All standard font tables — outlines, metrics, kerning, and hinting — are preserved for the glyphs you keep.
Yes. The tool displays a visual glyph grid showing every character in the font along with its Unicode code point. You can click individual glyphs to select or deselect them, choose entire Unicode ranges, or type sample text to automatically select the required glyphs. This makes it easy to verify exactly what your subset will contain.
Kerning pairs between glyphs that remain in the subset are preserved. Ligatures (like fi, fl, ffi) are kept if all component glyphs and the ligature glyph itself are included. If you remove a component glyph, the ligature that depends on it will naturally be excluded. Always test with sample text after subsetting.
Yes. Download the font file (TTF or OTF) from Google Fonts, then load it into the tool. Select only the glyphs or Unicode ranges you need and export a subsetted version. This gives you more control than Google's built-in unicode-range CSS API, which only offers predefined subsets.
For English content, keep Basic Latin (U+0020-007F) which covers standard letters, digits, and punctuation. If you use typographic quotes, em dashes, or bullet points, add General Punctuation (U+2000-206F). For currency symbols beyond the dollar sign, add Currency Symbols (U+20A0-20CF). Test with your actual content to ensure nothing is missing.
Google's CSS API splits fonts into predefined subsets and uses unicode-range so the browser downloads only needed chunks. However, this only works with Google-hosted fonts and you cannot customize which glyphs are in each chunk. SapienKit gives you precise per-glyph control, works with any font file, and produces a single optimized file you can self-host.
The tool can load and subset variable fonts (fonts with design axes like weight, width, or slant). The variation tables are preserved in the output, so the subsetted font retains its variable capabilities for the included glyphs. This is particularly useful since variable fonts tend to be larger due to additional outline data.
Most web font licenses explicitly permit subsetting for performance optimization — it is standard practice. However, some commercial licenses restrict modification of the font file. Always check your specific license terms. Open-source fonts (SIL Open Font License, Apache 2.0) universally allow subsetting. When in doubt, contact the font foundry.