Themes
typress themes are typed React component packages. Instead of template strings, you implement six components — Layout / Home / Single / Page / Archive / NotFound — and you have a working theme.
Bundled themes
- typress.default — "editorial workshop", paper + oxblood
- typress.docs — dark, top-bar + left sidebar + right ToC, Material-for-MkDocs feel
Switching themes
Press Activate in the admin Themes tab; a reauth dialog asks for your password (and TOTP if enrolled). Per ADR-005 every destructive admin operation re-prompts for the password — a stolen session cookie alone can't switch your site.
Building your own
Add a new workspace package under themes/, import defineTheme from @typress/theme-sdk, and return the six components.
import { defineTheme } from "@typress/theme-sdk";
export default defineTheme({
manifest: { id: "com.example.minimal", displayName: "Minimal", version: "0.1.0" },
Layout, Home, Single, Page, Archive, NotFound,
});Pack and sign a .tpkg
Themes are distributed as ed25519-signed .tpkg archives. Sign with the private key whose public side you've added under Trusted Keys.
# Generate a key once
bun tools/tpkg/src/main.ts keygen --label dev
# Build, pack, sign
bun build themes/my-theme/src/index.tsx \
--target=bun --format=esm \
--outfile=themes/my-theme/dist/index.js
bun tools/tpkg/src/main.ts pack themes/my-theme
bun tools/tpkg/src/main.ts sign themes/my-theme/com.example.my-theme-0.1.0.tpkg --key devUpload the .tpkg from Themes → Install .tpkg in admin: signature check → SHA-256 record → on-disk install. The same .tpkg format is used for plugins.