Available fonts

The render engine has a curated set of font families pre-installed, so your PDFs render deterministically with zero network fetches. Reference any of them by name in your CSS with a generic fallback:

body { font-family: 'Inter', system-ui, sans-serif; }
FamilyRecommended stackNotes
Inter'Inter', system-ui, sans-serifClean UI sans; a great default.
Source Serif 4'Source Serif 4', Georgia, serifEditorial text serif; proposals, letters.
IBM Plex Serif'IBM Plex Serif', Georgia, serifRational serif; formal and legal documents.
IBM Plex Sans'IBM Plex Sans', system-ui, sans-serifEngineered sans; pairs with the other Plex families.
IBM Plex Sans Condensed'IBM Plex Sans Condensed', sans-serifDense operational documents: labels, manifests.
IBM Plex Mono'IBM Plex Mono', monospaceIdentifiers, references, tabular codes.
EB Garamond'EB Garamond', Georgia, serifOldstyle serif; certificates, academic documents.
Roboto'Roboto', system-ui, sans-serifNeutral, highly legible.
Open Sans'Open Sans', system-ui, sans-serifFriendly, wide language coverage.
Lato'Lato', system-ui, sans-serifWarm, humanist sans.
Noto Sans'Noto Sans', sans-serifBroad Unicode + CJK coverage.
DejaVu Sans'DejaVu Sans', sans-serifRobust fallback, wide glyph set.

Custom fonts

External font sources are not reliable: Google Fonts <link> tags are always stripped at render time, and an @font-face rule pointing at an external url() is either dropped or rewritten through our resource proxy, never fetched directly. For deterministic output, use a pre-installed family above or embed the font as a data: URI inside an @font-face rule:

@font-face {
  font-family: 'MyBrand';
  src: url(data:font/woff2;base64,d09GMgAB…) format('woff2');
}

Keep embedded fonts small (subset to the glyphs you use) to stay within the template size limit. For most invoices and receipts, the pre-installed families are all you need.

See Template syntax for placeholders and helpers.