---
title: "Too many font weights (perf/font-weights)"
description: "Each static weight is a separate font file to download; for a variable font, listing weights replaces one file that has every weight with several static ones."
url: http://localhost:4173/rules/perf/font-weights
updated: 2026-11-11
---

# Too many font weights

> `perf/font-weights` is a vetd rule. It flags: Too many font weights. It runs on every `check`, together with the TypeScript check.

| Fact | Value |
| --- | --- |
| Rule id | `perf/font-weights` |
| Severity | warning |
| Group | Performance: fonts, images, scripts and bundle |
| Tags | performance, nextjs-16 |

## Why it matters

Each static weight is a separate font file to download; for a variable font, listing weights replaces one file that has every weight with several static ones.

## How to fix it

Keep the 2-3 weights the design uses, or drop weight for a variable font.

## Credit

Based on work by:

- [Next.js team](https://nextjs.org): The font docs recommend variable fonts and note that each static weight is a separate file.

## References

- [Font Module](https://nextjs.org/docs/app/api-reference/components/font), Next.js
- [Font Optimization](https://nextjs.org/docs/app/getting-started/fonts), Next.js
- [Best practices for fonts](https://web.dev/articles/font-best-practices), web.dev

## See it

Demos in the vetd Lab:

- [Load fonts without shift](http://localhost:4173/lab/web-perf/font-loading-without-shift)

## Related rules

- [`perf/font-format`](http://localhost:4173/rules/perf/font-format.md)
- [`perf/font-subsets`](http://localhost:4173/rules/perf/font-subsets.md)

## Get this text from vetd

MCP: call `explain` with `{ "diagnosticId": "perf/font-weights" }`. CLI: `npx vetd explain perf/font-weights`.

---

[All 92 rules](http://localhost:4173/rules.md) · Previous: [`perf/font-module-scope`](http://localhost:4173/rules/perf/font-module-scope.md) · Next: [`perf/font-duplicate`](http://localhost:4173/rules/perf/font-duplicate.md)
