Skip to main content

Theme extensions

Site-installed public themes live under:

themes/public/<theme-key>/theme.json

The manifest names the theme, its templates, local CSS and JavaScript, declared features, and settings. A public theme provides views for the root home, author home, posts, pages, and not-found responses. Post and page views may share one template.

Themes receive prepared view data for site identity, content, author context, menus, page trees, Search, screen mode, metadata, breadcrumbs, child pages, and plugin sidebar or footer fragments. Use those values instead of reading content files, user records, configuration, or plugin storage.

Themes own HTML and presentation. Core owns routes, authentication, visibility, publishing rules, and storage. A theme must not change who can read an entry or invent a second routing model.

Use the included Baseline theme for a conventional Bootstrap-based example and Terminal for a theme that does not use Bootstrap. Do not copy a first-party theme and assume its private template structure or CSS selectors will remain unchanged.

Run php8.4 bin/tinymash.php system:themes after installation. Diagnostics report missing metadata, invalid settings, missing local assets, and remote asset URLs.