README.md

Shell fonts

Geist and Geist Mono, subset to Latin + the punctuation and arrows a dashboard actually renders, and vendored here as woff2.

They are vendored rather than loaded from Google Fonts because the inner renderer's srcDoc runs under font-src data: — it may open no network connection at all, by design (see buildRendererSrcDoc in shell-app.tsx). The only way a branded typeface reaches model-written UI is as bytes inside the document, so globals.css references these files and the shell's Vite build inlines them as data: URLs (build.assetsInlineLimit in vite.config.shell.ts). The shell's CSS is then copied into the srcDoc verbatim, carrying the fonts with it.

Without this the shell falls back to system-ui and artifacts are the only executor surface not set in Geist.

Regenerating

Source: the geist npm package (v1.7.2), variable weights.

bun run --cwd packages/hosts/mcp-apps-shell fonts:subset

That script downloads the published package and re-subsets it. The subset range is Latin-1 plus the arrows, bullets and dashes used in metric deltas and axis labels; tnum is kept because the design system sets numbers in tabular figures.