How to font subsetting vs css unicode-range strategies
- Step 1Single subsetted file — Run JAD's Font Subsetter once with your target charset. Single @font-face block. Best when 90%+ of your traffic uses one language.
- Step 2Multiple unicode-range files — Subset to each language separately (latin, latin-ext, cyrillic). Emit one @font-face per subset with unicode-range pointing to the right WOFF2. Browser only downloads subsets matching characters on the page.
- Step 3Choose by traffic mix — Single-language audience: subset once. Multilingual audience (e.g., 50/50 English/Russian): unicode-range split lets each visitor download only what they need.
Frequently asked questions
Does unicode-range work in older browsers?+
Yes since Chrome 36, Firefox 44, Safari 10, Edge 17. 99%+ support globally as of 2026. Browsers that lack support download all WOFF2 files (no harm done, just slightly more bandwidth).
How does Google Fonts split subsets?+
Google's CSS API emits one @font-face per subset (latin, latin-ext, cyrillic, etc.) each with a unicode-range. The browser only fetches the subset whose characters appear on the page. Highly bandwidth-efficient for multilingual sites.
Can I combine subsetting with unicode-range?+
Yes — typical pattern: variable font split into 4 unicode-range subsets, each subsetted to that range's characters. Three layers of optimisation: variable + subset + unicode-range. Total payload typically <50 KB for a multilingual marketing site.
Privacy first
Every JAD Font tool runs entirely in your browser using opentype.js and the wawoff2 WASM Brotli encoder. Your fonts never leave your device — verified by zero outbound network requests during processing.