What ends up installed
Building copies everything instatic/ to BUILD_DIR, adds the compiled CSS and JS under assets/, and writes .vite/manifest.json. The installed theme looks like this:
extra.public are then copied to public/e/acme/aurora/, which is what the browser actually loads.
What each part does
Only
composer.json and templates/index.twig are required by the application. Layouts, sections and snippets are conventions that make a theme easier to maintain.Naming conventions
- Templates are pages: one file per route.
- Sections are page-sized blocks, included from a template:
{% include "@theme/sections/hero.twig" %}. - Snippets are fragments used in several places, often with variables:
{% include "@theme/snippets/plan.twig" with { plan } %}. - Layouts are extended, not included:
{% extends "@theme/layouts/theme.twig" %}.
@theme/, which points at the active theme’s installed directory.
PHP inside a theme
A theme that only renders the landing page needs no PHP. Addstatic/src/ when you want extra pages:
Anything under
static/src/ must be covered by the PSR-4 map in composer.json, and the package must be installed with Composer so the classes autoload. See Custom pages.
Translations
Catalogs live atstatic/locale/{code}/LC_MESSAGES/theme.po, in the theme domain. The starter ships catalogs for the locales Aikeedo supports. See Theme localization.