Appearance: Themes, Options and Templates

Everything that decides how the public site looks: the theme, its options, navigation and widgets, and the one-click website templates and template library.

In the user guide: the Themes & Appearance chapter.

Themes and theme options

The public theme is echo (APP_FRONT_THEME, config key dotartisan.front_theme). It extends default. Its theme.json is both a theme manifest and the schema of its options: the defaults object lists 160+ options, each with a type (color, text, select, switch, spacing, image-select, number, font, radio, textarea, file, range), a default, a label, a help tooltip and a tab.

PieceClass / fileRole
SchemaThemeOptionsSchemaReads theme.json (cached per file fingerprint), converts it into settings pages grouped by tab (Light colours, Dark colours, Header, Footer, Typography, Top bar, Breadcrumbs, Components, Layout, Navigation)
StoreThemeOptionStorePersists per-theme option values in the theme_options setting; supports request-scoped overrides
Settings screenAppearance → Theme optionsA normal settings section (theme-options) whose pages come from the schema; saving routes through SettingsController::handleThemeOptions()
CSS compilerThemeCssCompilerTurns changed colour/typography options into a compiled stylesheet (storage/app/public/css/themes/echo/app.css)
Dynamic CSSDynamicCssTells FrontTheme which compiled stylesheet to load and registers theme fonts
Helperstheme_option(), set_theme_option(), override_theme_options()Read an option (stored value → schema default → caller default); override it for one request

Details and how to add your own options: Theme options and CSS pipeline and the option catalogue.

See Content. Menus (including mega menus) are selected by id in theme options (primary_menu, secondary_menu, user_nav_menu, footer_menu); widget areas are filled in Appearance → Widgets.

Website templates

Appearance → Website templates lists complete, ready-made sites (pages, blog posts, menus, footers, logo, theme options, settings and, where relevant, Booking/TruCommerce demo data). Each built-in template is a niche seeder (database/seeders/Niches/*Seeder.php, dozens exist) extending NicheSeeder; the catalogue rows are published to the website_templates table by WebsiteTemplatesSeeder (keyed by content hash).

Never import on a database you care about

Importing a template overwrites the homepage, menus, widgets and theme options. The niche seeders are intentionally not part of DatabaseSeeder.

Template library

Appearance → Template library browses the page-builder layouts (sections and full pages) by category with previews and lets administrators export and import them. The same data powers the editor's Templates panel. See Page builder.

Template packages (.trucms.zip)

Both website templates and library layouts can be exported to, and imported from, a .trucms.zip package (app/Services/WebsiteTemplates/Packages). Imports are two-step (analyse, then import) and gated by import website templates.

Where to go next

Create a themeAnatomy, manifest, layouts, switching.Theme options pipelineAdd options, compile CSS, override per request.Template library guideAuthor section layouts, assets, packages.