Research
One font file or six
by Patrick Albert
- Question
- Variable fonts are supposed to save weight. On a real site with real weights in use, how much do they actually save?
- Finding
- For our two typefaces, variable files cut 156,616 bytes across 9 requests down to 80,640 bytes across 2. That is a 48 percent saving and 7 fewer round trips, with more weights available than the static set offered.
- Method
- Measured the published latin-subset WOFF2 files for Archivo and IBM Plex Sans from the npm Fontsource packages, comparing every static weight a designer would plausibly load against the single variable file covering the same range.
The previous piece found that typography was 83 percent of this page's weight, which was not the answer we expected. That makes the font strategy worth its own measurement rather than a rule of thumb.
The usual advice is to use variable fonts because they save bandwidth. It is good advice and almost nobody attaches a number to it, which makes it hard to know when it stops being true.
What we compared
For each typeface, the static weights a designer would realistically load, against the single variable file that covers the same range. All figures are the published latin-subset WOFF2 files, which is what a browser actually downloads.
| Archivo | Bytes | Requests |
|---|---|---|
| Static 400 | 14,700 | 1 |
| Static 500 | 14,600 | 1 |
| Static 600 | 13,820 | 1 |
| Static 700 | 14,508 | 1 |
| Static 800 | 14,416 | 1 |
| Static 900 | 13,548 | 1 |
| Static total | 85,592 | 6 |
| Variable, weight axis | 34,928 | 1 |
The variable file covers weights 100 to 900 continuously, so it offers more than the six static files it replaces.
| IBM Plex Sans | Bytes | Requests |
|---|---|---|
| Static 400 | 22,588 | 1 |
| Static 500 | 24,184 | 1 |
| Static 600 | 24,252 | 1 |
| Static total | 71,024 | 3 |
| Variable, weight axis | 45,712 | 1 |
Only three static weights here, which is where the maths gets interesting.
The result
Across both typefaces, nine static files totalling 156,616 bytes become two variable files totalling 80,640. A 48 percent saving, and seven fewer requests.
Nine files and 153 KB become two files and 79 KB, and you gain every weight in between rather than losing them.
Where the advice breaks down
The Plex numbers show the limit. One variable file at 45,712 bytes replaces three static weights at 71,024, so it wins. But it is larger than any two of them combined, and larger than a single static weight by a factor of two.
So if a design only ever uses regular and semibold, the static pair is 46,840 bytes against the variable file's 45,712. Effectively a tie, and the static pair can be loaded in parallel.
The break-even sits at roughly three weights. Below that, variable fonts cost you nothing and gain you nothing. Above it, they win and keep winning, because the variable file does not grow as you use more of it.
The axis you did not ask for
Archivo also publishes a variable file carrying a width axis as well as weight. That one is 90,104 bytes, which is 2.6 times the weight-only file and larger than all six static weights combined.
We wanted the wide setting for the headlines on this site and did not take it. The same effect came from letter-spacing and scale at a cost of zero bytes. A width axis is a real capability and it is worth 55 KB only if the design genuinely animates or interpolates across it.
What we did
- Two variable files, weight axis only, latin subset. 80,640 bytes total.
- Preloaded both, since they are render-blocking in practice and discovered late otherwise.
- font-display: swap, so text is readable before the fonts land.
- Self-hosted rather than from a CDN, which removes a third-party connection and the privacy question that comes with it.
- Skipped the width axis and got the effect with CSS instead.
Repeat it yourself
Open your site's network tab, filter to Font, and count. If you see six files from a font CDN, you are probably loading weights your design never uses, at a cost you have never measured. The fix is usually an afternoon.
Figures here are from the published Fontsource packages for Archivo and IBM Plex Sans, latin subset, measured 1 September 2026. If you measure different numbers, tell us and we will publish the correction.