Menu

D22. Vetted fonts shipped with Elabora (7 Oct 2026)

Agents building samples fetched fonts and their licences by hand each time. Elabora ships a vetted list, @elabora/fonts: 25 families under the SIL OFL 1.1 (classic and modern serifs, humanist, grotesque and geometric sans, a monospace, display faces), so that agents, the desktop app and new projects have them without network access. The files come from the Fontsource npm packages, which take them from Google Fonts: one source, versioned, with each font’s metadata and licence, the source agents would also turn to; npm run fonts pins each package by version and checks it against the npm registry’s integrity. Only the latin subset (the player’s seven languages and the other Western European ones) and, for variable fonts, the weight axis alone: one file per style, 1.87 MB for the whole list (measured: the 25 packages hold 20 MB of WOFF2 files, every subset, axis and weight; their latin files with every axis and weight, 3 MB). elabora font add copies a font with its licence into the course, and the build carries the licence files next to each packaged font: the OFL lets a package embed a font when its text travels with it. Any other font goes the same way (--from a Fontsource package, --file with --license), and the skill tells agents to look for one when the list has nothing that fits. No runtime dependency: the fonts are data in the repository, as three.js is vendored (D6). Only OFL or Apache licences enter the list; another licence needs the project’s approval. Revised (7 Oct 2026): courses in Polish, Czech, Romanian or Turkish got their letters from fallback fonts. theme.fonts entries take an optional unicodeRange (additive: no course changes, so no new version nor migration; at most 24 entries instead of 12, one per file), written into the @font-face rules and the compiled course data, so a face can be split into subset files that a browser downloads only for the pages that use their letters. The list ships the latin-ext files too (24 of the 25 families: UnifrakturMaguntia has none), with their ranges from Fontsource’s unicode.json: 3.42 MB in all (latin 1.76 MB, latin-ext 1.56 MB, licences 0.11 MB; measured with npm run fonts). Vietnamese (0.34 MB more for 16 families) and other scripts come from a Fontsource package (--from, --subsets). elabora font add takes latin-ext when the language of the course or of a translation needs it, so Western European courses are unchanged. Revisit if: courses in Vietnamese, Greek or Cyrillic become common (ship those subsets the same way), or the list outgrows about 4 MB.