You can now upload custom fonts once at the account level and use them across every template, without re-sending the bytes on every render.
- Upload at
/settings/fonts— TTF or OTF, max 5 MB per variant. - Variable fonts are rejected with a clear error (we don't support them yet).
- Up to 4 families per account, 6 variants per family.
- Fonts are subsetted on registration and cached in KV.
Once uploaded, just reference the family in your DSL styles:
text({ "font-family": "Brand", "font-weight": "bold" }, "Hello");
The per-request fonts: payload on /preview and /render still works for one-off cases, but accounts that use the same brand fonts everywhere don't have to ship them on each call any more.
This is also the supported path for non-Latin European scripts (Cyrillic, Greek, Vietnamese, Georgian, Armenian) — see the pdf-fonts skill.