Basefox · Type study · 26 Aug 2026
Your read was right and it is structural: two of the three current faces are grotesques. Space Grotesk descends from Space Mono, and Barlow is built on California highway signage. Spline Sans Mono is the humanist one, and it is doing the smallest job. These are real builds, not mockups.
The app addresses type through three roles — display, body, mono — so a system swaps all three at once and no call site changes. Mono is identical in all four, which keeps the comparison about display and body.
| System | Display / body | Launch flag |
|---|---|---|
| Current | Space Grotesk / Barlow | -type=current |
| Warm sans | Archivo / Source Sans 3 | -type=warmSans |
| Editorial | Fraunces / Source Sans 3 | -type=editorial |
| Hybrid | Fraunces heroes / Archivo labels / Source Sans 3 | -type=hybrid |
Hybrid did not exist when you asked. I added it after seeing Fraunces at label sizes: a serif carries character at 22pt and up, and gets busy below that. Hybrid uses Fraunces for hero-scale display only and Archivo underneath.
Home · exchange card. The largest display type in the app, over the body face.
Home header. One word, seen every launch.
13pt display, uppercase, letterspaced. Where a serif gets busy.
15pt display headline in a compact card — the smallest display size in use.
Brand board, large navigation title.
All three roles at once: display, body, and the unchanged mono readouts.
Space Grotesk / Barlow
Competent and cool. Tight apertures, squarish bowls, a slightly technical air. Barlow is narrow and mechanical at 13–15pt, which is most of the pixels in this app.
Archivo / Source Sans 3
The safe improvement. Source Sans 3 is genuinely humanist and noticeably more open at body sizes. Archivo is warmer than Space Grotesk without changing the register. Lowest risk, least distinctive.
Fraunces / Source Sans 3
Real character, and it matches the field-guide register the product is reaching for. It falls down at label sizes: serif small-caps section headers read heavy and dated, and the 15pt feed headline gets noisy.
Fraunces heroes / Archivo labels / Source Sans 3
Takes the character and leaves the busyness. The wordmark and hero headlines get Fraunces; section headers, row titles, and feed headlines stay clean. The body face does the warming.
Compare the section-header row above. Editorial sets SHOP BY CATEGORY in letterspaced serif caps, which reads like a 2012 restaurant menu. Hybrid sets the same label in Archivo and keeps Fraunces for the two places a serif earns its keep: the wordmark and the hero headline. One switch on point size does it, and that switch already exists for the width axis.
wdth 89, matching
the condensed headlines in your no-photography mockup. That is one extra variable in the
comparison, so it looks tighter than the others partly for a reason unrelated to warmth.Small, and reversible. TypeSystem.active selects a system; every candidate is
built from variable fonts already bundled. Picking a winner means deleting the other cases
and the fonts they use, which is a subtraction rather than a rewrite.
| Item | Detail |
|---|---|
| New files | Theme/TypeSystem.swift, three .ttf files in Resources/Fonts/ |
| Changed | Theme/Fonts.swift — role builders now switch on the active system |
| Call sites touched | None. .display(), .bodyText(), .mono() are unchanged. |
| Bundle cost | Archivo 643KB, Source Sans 3 631KB, Fraunces 352KB. Dropping the losing faces recovers most of it. |
| Licence | All three are SIL Open Font License, same as the current three. |
Tell me which one, and I will delete the other three cases, remove the unused font files,
update the design-system section of basefox-spec-v03.md, and settle the
sentence-case question at the same time. Then back to the card visuals.