Workflow
This page covers the recommended end-to-end workflow from the first builder export to a production storefront, and how to iterate on the theme.
1. Export the ZIP
In the Theme Builder, fill in the configuration, then Export ZIP. You receive <TechnicalName>.zip.
Save the snapshot first
Before exporting, download .guppy-builder.json via Save Snapshot and version it. Without the snapshot, later edits are painful, the builder has no server-side storage.
2. Install the plugin
Extract the ZIP into custom/plugins/<technical-name-kebab>/ (e.g. custom/plugins/AcmeGuppyChildTheme/).
cd /path/to/shopware
unzip ~/Downloads/AcmeGuppyChildTheme.zip -d custom/plugins/3. Register and activate the plugin
bin/console plugin:refresh
bin/console plugin:install --activate AcmeGuppyChildTheme4. Assign the theme
bin/console theme:changePick the sales channel, then select Acme Guppy Child Theme.
5. Compile the theme
bin/console theme:compile
bin/console cache:clearShopware's theme compiler now turns theme.json values into SCSS variables and bakes them into the storefront CSS.
6. Smoke test
Open the storefront and check:
- Brand colors active
- Logo, favicon, share image rendered correctly
- Custom fonts load (
@font-face) - Layout variants (header, footer, product cards) match the configuration
Iteration: snapshot re-import
For each follow-up adjustment:
- Open the Theme Builder.
- Load Snapshot → load your existing
.guppy-builder.json. - Change fields (new colors, more fonts, more snippets…).
- Save a new snapshot (versioning).
- Export a fresh ZIP.
- On the Shopware side, update the plugin:
unzip -o ~/Downloads/AcmeGuppyChildTheme.zip -d custom/plugins/
bin/console plugin:refresh
bin/console plugin:update AcmeGuppyChildTheme
bin/console theme:compile
bin/console cache:cleartheme:compile after every change
A plugin update alone isn't enough, theme:compile must run for theme.json values to land in the compiled CSS.
Inheritance order (background)
The generated plugin follows this inheritance layout:
overrides.scss (child) ← loads before @DmfGuppyTheme
└─ @DmfGuppyTheme ← parent theme
└─ base.scss (child) ← loads after @DmfGuppyThemePlus fixed theme.json inheritance:
configInheritance: ["@Storefront", "@DmfGuppyTheme"]This structure is not changeable, it guarantees the child always sits on top of the Guppy default.
From builder to your own repo (optional)
If you use the builder as a starter and want to continue manually from a certain point:
- Extract the ZIP.
- Move the contents into your plugin repo, version with
git init. - Check in the snapshot (
.guppy-builder.json) too, keeps the builder values reloadable. - From here on the manual workflow takes over, see Manual Child Theme Development.
CI/CD notes
- ZIP generation runs client-side, there is no automation hook through the builder URL.
- Recommended CI path: keep the plugin folder in your repo and deploy via standard Composer / Shopware CLI. Migrate theme configuration between stages via
dmf:theme:exportfrom DmfCmsImportExport.
Troubleshooting
"Plugin not found" after upload
bin/console plugin:refreshStyles don't apply
bin/console theme:compile
bin/console cache:clearCustom fonts don't load
- Verify the
.woff2files actually live indist/assets/font/. - Run
theme:compileandcache:clear. - Clear the browser cache or use an incognito tab.
Plugin update doesn't override anything
bin/console plugin:update AcmeGuppyChildThemeplugin:install complains if the plugin is already installed, plugin:update is the correct command for an existing installation.