Font Subsetting
Font subsetting is the surgical removal of every unnecessary glyph, feature, and axis range from a font file before you ship it to users. Variable fonts pack continuous design spaces across weight, width, slant, optical size, and custom axes plus glyph outlines for every language under the sun. Subsetting examines your live site copy, your CSS font variation settings declarations, and your target language list then deletes everything else. The resulting file stays completely variable. It still interpolates smoothly across the exact ranges you kept. It just no longer wastes bytes on Vietnamese tones you never use or width axes your brand never activates.
The technology lives in the OpenType spec and gets executed by tools like fontTools. The pyftsubset command line utility is the industry standard in 2026. Designers point it at their variable TTF, declare the exact Unicode codepoints their interface actually renders, clamp the axis ranges to match their CSS, and choose which OpenType features to preserve. The tool rebuilds the font from the default master and only the necessary delta tables. Google Fonts offers the identical capability through their API. Add specific axis ranges and subset=latin,ext in the stylesheet link and their servers return the trimmed file. No excuses left for bloated font payloads.
Font subsetting is not the same as font compression. Brotli and gzip still shrink the file further during transfer. Subsetting deletes data for good. It is not a lazy way to fix poor type choices. If your typeface lacks proper hinting at small sizes subsetting will not save you. It is not automatic or foolproof. Feed it the wrong Unicode ranges and your French pages render boxes. It is not something you do only once at launch and then ignore. Content changes. New features add new characters. Your subset file must evolve with the product or it becomes a liability. It is not a silver bullet that makes every variable font appropriate for every project.
Concrete example one is Inter on the Linear dashboard. The full variable Inter file measures 310 KB. Linear ran it through subsetting in 2025 to support only the characters needed for their product UI. They restricted the weight axis to 400 through 700 and preserved italic. The output file landed at 87 KB. One HTTP request delivers every UI weight their designers specify. No more separate files for medium, semibold, and bold. Their mobile load times dropped measurably and the Core Web Vitals scores climbed. The typography feels identical to the full version because the axes they use remained intact.
Notion followed a parallel path in 2024. Their team used the Google Fonts subsetting endpoint to generate a variable Inter build that covered their exact mix of Latin, numbers, symbols, and a handful of extended characters for their global user base. The delivered file sits at 102 KB complete with full variation on weight and slant. Before the change they shipped multiple static cuts that added up to over 400 KB and multiple blocking requests. The new subsetted variable approach eliminated layout shifts and improved perceived performance for millions of users editing pages simultaneously.
Recursive shows what happens when custom axes enter the picture. The complete file with MONO, CASL, and expression axes weighs 580 KB. A SaaS marketing team that only needs proportional to mono transition plus casual to formal stroke changes plus three weights can subset aggressively. They clamp MONO to 0.5 to 1.0 and CASL to 0 to 0.8. The resulting file drops to 138 KB. That single asset powers both their documentation code blocks and their hero headlines with perfect brand consistency. Stephen Nixon built the font to reward exactly this workflow. The full file stays available for type nerds at recursive.ink but production builds get the knife.
IBM Plex variable delivers the corporate proof point. The Sans variable version starts near 200 KB. After subsetting to Western European languages and a practical weight range the file shrinks to 68 KB. IBM ships this across cloud consoles, marketing microsites, and internal tools. The consistency across surfaces is absolute because every product pulls from the same subsetted variable backbone. No more mismatched weights between the website and the product. The design system team enforces the exact subset configuration in their Figma libraries and their build pipelines.
Use subsetting on every single variable font you ship for production digital products. Use it when your performance audits show fonts contributing more than ten percent of total page weight. Use it when your audience skews toward mobile networks in regions with expensive data. Use it when you have already chosen a variable font with the axes your brand needs and now you want to make it fast. Pair it with the six question framework in the variable fonts guide. Answer the file size question honestly and then run the subsetting command before you merge to main.
Skip subsetting when your site exists to demonstrate the full capabilities of a variable typeface to other designers. Skip it when your internationalization roadmap includes new languages every quarter and predicting character sets feels impossible. Skip it for internal tools where the font loads from a local network and size barely registers. Never subset so aggressively that you strip ligatures your logotype depends on or kerning pairs your headlines require. Always preview the subsetted font against your real production content including edge case characters like em dashes, trademarks, and currency symbols.
Teams that treat subsetting as table stakes in 2026 ship faster experiences and spend less time apologizing for slow loads. The ones that skip it because the full file looks fine on their fast desktop connection are the same ones watching their bounce rates climb on mobile. Font subsetting forces clarity about what your design actually needs versus what looks impressive in a specimen.
Subset every variable font you ship or admit your performance budget is fake.
Read the full guide
Related terms
Keep exploring
Variable font
A font file that exposes one or more axes (weight, width, slant, optical size, or custom) that can shift at runtime without loading additional files.
Font Budget
Font budget is the hard cap on typography assets that keeps LCP fast and brand perception premium. Two weights max, aggressive subsetting to only needed characters, and loading strategies that never block render or shift layout.
Core Web Vitals
Google's three measurable user-experience metrics for loading, interactivity, and visual stability that act as both a search ranking input and a design quality signal.
Design Tokens
The atomic design values (colors, spacing, typography, shadows, motion) stored as platform-agnostic variables that every component in a design system references.