A meta-framework for building content sites on Astro — where design decisions live in one place and travel everywhere.
Standard is the framework layer under stnd.build and standard.garden. It exists because most content sites re-solve the same problems badly: typography drifts between surfaces, features get tangled across folders, and the design system stops matching the site the week after it ships.
This repository mirrors three packages from a larger private monorepo. It is published so the architecture can be read, not because it is a turnkey product.
| Folder | Package | What it does |
|---|---|---|
core/ |
@stnd/core |
The Astro integration: module discovery, route injection, and the build-time glue that makes vertical slices work. |
styles/ |
@stnd/styles |
The design system itself — golden-ratio scale, vertical rhythm, micro-typography — compiled to CSS once and consumed everywhere. |
themes/ |
@stnd/themes |
Token-driven themes, authored once and compiled to every target: web, Obsidian, VS Code, Zed. |
Vertical slice modules. A feature is a folder. A blog, a menu, a shop — each one holds its own server code, client code, routes, and styles, and registers itself. Adding a feature means adding a folder; removing one means deleting it. There is no central registry to update and no import graph to untangle, which is what keeps the complexity flat as the number of features grows.
One design system, four layers. Design decisions are only allowed in two of them:
Layer 3: User overrides (per-note frontmatter tokens) ← applies last, always wins
Layer 2: Themes (tokens.yaml + theme.scss per theme) ← authored once, compiled to every target
Layer 1: Adapter (app-specific DOM mapping) ← mapping only: no colors, no sizes, no spacing
Layer 0: Framework (the scale, the rhythm, the rules) ← the same compiled CSS everywhere
The discipline is in Layer 1. An adapter is allowed to say "this app's DOM is shaped strangely, here is how Standard maps onto it" — and nothing else. The moment a colour or a font size appears in an adapter, the system has forked and the drift begins. Keeping that rule is what lets the same typography render identically in a browser, in Obsidian, and in an editor's UI.
The scale is built on the golden ratio, the vertical rhythm is enforced rather than suggested, and the micro-typography rules — optical margins, hanging punctuation, proper quotes and dashes — are applied automatically. The premise is that professional typesetting should be the default state of a document, not a manual pass someone does at the end and nobody maintains.
Pre-release, and honest about it: no backward-compatibility guarantees, no shims, no legacy aliases. Interfaces change when a better shape is found. The packages run in production behind several sites, plugins, and native apps, and they are published on npm under the @stnd scope:
npm install @stnd/coreThe full ecosystem — apps, plugins, a Tauri/Rust photo tool, and the rest of the @stnd/* family — lives in a private monorepo. This mirror is updated automatically on every push to it.
MIT — see LICENSE.
Built by Francis Fontaine · github.com/ZeFish