Stoat serves self-hosted fonts only. The route in is WordPress’s own Font Library, which needs WordPress 7.0 or newer.
Install the family
- Appearance → Fonts.
- Upload — drop in your
.woff2files — or Install Fonts to pull a family from the collections WordPress ships with. Either way the files land in your own uploads directory and are served from your domain. - Install every weight and style you will actually use. A family with only 400 installed will have its bold synthesised by the browser, and a synthesised bold looks like one.
Pick it
Appearance → Customize → Typography, then the face dropdown on whichever role you want it on. Installed families appear under the nine built-in stacks, listed by name.
Stoat writes the @font-face rules for the family you picked — and only for the ones you picked. A family sitting in the Font Library that no role uses costs your visitors nothing.
If two roles use the same family, its @font-face rules are written once, not twice.
Choosing files
.woff2 only. Every browser that matters has supported it for years, and it is 25–35% smaller than .woff. Uploading .ttf or .otf as well just gives the browser a bigger file it might pick.
Variable fonts work and are usually the better buy: one file covering every weight from 200 to 900, often smaller than two static weights.
Two families is the budget. Each family, at each weight, is a file the visitor waits for. A body face and a heading face is a design; four is a download.
Licensing
Check it before you upload. A font licensed for desktop use is not necessarily licensed for webfont embedding, and the licence usually says so explicitly. Google Fonts, Fontshare and the SIL Open Font License families are safe to self-host — which is the whole point: you can use a Google font, you simply host the files yourself instead of letting Google see your readers’ IP addresses.
Below WordPress 7.0
There is no Font Library, so the dropdown shows System default and the nine web-safe stacks only. Those are genuinely good options — Georgia in particular — and they are instant.
If you must load an external font on an older install, use a plugin to load it and point Stoat’s tokens at the family in Customize → Additional CSS:
:root {
--heading-font: "Your Family", Georgia, serif;
--body-font: "Your Family", system-ui, sans-serif;
}
The theme does not forbid this. It just will not do it for you.
