Six Themes, One Engine — What Actually Changes Between Them

· 2 min read · The Inkform Team

Six themes ship with this framework today, and by design they look nothing alike — a dark Nextra-style docs site (Aurora), a brutalist monospace terminal (Mono), a warm editorial paper-and-ink identity (Galley, this site's own theme). The interesting part isn't that they look different — it's exactly how little code that difference actually requires.

What varies: one CSS file

Every theme's entire visual identity lives in app/theme.css — a set of --fw-* CSS custom properties (surfaces, brand color, radius, shadows, font stacks) plus, for themes with a genuinely distinct structural personality (Mono's uppercase tracked-out nav, for instance), a small delta of theme-specific selectors layered on top of the shared base. Recoloring, re-fonting, or fully restyling a site never touches a layout component.

What doesn't vary: everything else

app/[[...slug]]/page.tsx, app/blog/page.tsx, app/changelog/page.tsx, lib/route.tsx, components/top-bar.tsx — these files are byte-identical across all six themes. The docs-tree resolution, the blog/changelog data loading, the top-bar composition: one implementation, reused six times without modification. See Choosing a Theme for the actual per-theme identity summaries, and Framework API for the shared engine every one of them calls into.

Building Galley: dogfooding our own design system

Galley — the theme this very site uses — is the one meaningful exception to "just recolor an existing theme": it's built from Inkform's own actual design tokens (the inkform-design skill's authoritative tokens/{colors,effects,typography}.css), not an approximation. Same --fw-primary/--fw-bg/--fw-radius contract every other theme implements, populated with the real hex values, the real Newsreader + General Sans + JetBrains Mono font stack, and the real warm-paper shadow values — proof that the framework's theming contract is genuinely expressive enough to reproduce a real, opinionated brand identity, not just a hue swap.