How to Fix Shopware 6 Stores Without Paying €80/hr to a Symfony Developer
Shopware 6 is the modern Symfony/Vue.js rewrite of the old Shopware 5 — but every customization needs a Symfony-fluent developer billing €60–120/hr. Yet most fixes come down to: a stale Twig template in custom/plugins/[Plugin]/src/Resources/views/storefront/, a missing entity decorator, or a broken theme.json after bin/console theme:compile. SimpleReview's Shopware-aware agent knows the plugin convention and the storefront override system, so it patches the right Twig/SCSS and opens a PR.
custom/plugins/, finds the storefront override path, opens a PR. Most edits ship the same hour.
Key Takeaways
- Shopware 6 uses Symfony plugins. Custom code lives in
custom/plugins/[YourPlugin]/and storefront overrides incustom/plugins/[YourPlugin]/src/Resources/views/storefront/. - Most "Shopware is broken" symptoms = caches (
var/cache/) + theme not recompiled + plugin not refreshed (bin/console plugin:refresh). - SimpleReview reads
custom/plugins/and the theme inheritance graph to find the right file fast. - Shopware Store (formerly Shopware Community Store) — we publish
SimpleReview-Editplugin: Marketplace → Search → SimpleReview → Add to cart (0€ free tier) → Plugin Manager → Install + Activate. - Custom payment app, complex inheritance / decoration patterns, multi-channel/headless API — Vibers human review.
Shopware 6 Plugin Architecture in 60 Seconds
Before fixing anything, know where things live. Shopware 6 inherits Symfony's bundle/plugin structure and adds its own conventions on top.
custom/plugins/MyVendor.MyPlugin/
├── composer.json # plugin metadata, entry-point class
├── src/
│ ├── MyPlugin.php # extends Shopware\Core\Framework\Plugin
│ ├── Resources/
│ │ ├── config/
│ │ │ ├── services.xml # Symfony DI: services, decorators, subscribers
│ │ │ └── routes.xml # storefront/admin routes
│ │ ├── views/
│ │ │ └── storefront/ # Twig overrides — extend @Storefront/...
│ │ │ └── layout/header.html.twig
│ │ ├── app/storefront/src/ # SCSS + JS (compiled by theme:compile)
│ │ │ ├── scss/base.scss
│ │ │ └── main.js
│ │ └── snippet/ # translations: storefront.en-GB.json
│ └── Subscriber/
│ └── ProductPageSubscriber.php
└── theme.json # only for Theme plugins
Three rules to remember:
- Override path mirrors core path. To override
vendor/shopware/storefront/Resources/views/storefront/layout/header.html.twig, you create the same path under your plugin'ssrc/Resources/views/storefront/layout/header.html.twigand{% sw_extends '@Storefront/storefront/layout/header.html.twig' %}at the top. - Never edit
vendor/shopware/orcore/. Composer wipes it on update. SimpleReview refuses to write there and proposes a plugin override instead. - SCSS / JS edits need
theme:compile. Twig edits need onlycache:clear(or nothing in dev mode).
The Three-Click Workflow with SimpleReview
- Install the SimpleReview Chrome extension from the Chrome Web Store. It's free with your own AI key (Claude Code or Codex). The extension auto-detects Shopware 6 from
<meta name="application-name" content="Shopware">+ thedata-storefront-configJS handle in the storefront source. - Connect your store's Git repo (GitHub, GitLab, Gitea) or grant SFTP credentials. SimpleReview indexes
custom/plugins/, readscomposer.jsonfor each plugin, and parses your theme inheritance graph fromtheme.json. - Open your storefront, click the SimpleReview icon, click the element you want to change. Type the change in plain English: "remove this banner", "add reCAPTCHA to contact form", "hide Powered by Shopware in footer". Click Fix it. The agent finds the right override path, writes the Twig/SCSS, runs
plugin:refresh+theme:compile+cache:clearon staging, and opens a Pull Request.
Common Shopware 6 Fixes
Fix "500 — Internal Server Error" / "Twig_Error_Loader" on storefront
Almost always means a plugin's view path is wrong — Twig can't find a template the override is trying to extend. Check custom/plugins/[Plugin]/src/Resources/views/storefront/: the path must mirror the core path exactly. Then run:
bin/console plugin:refresh
bin/console cache:clear
bin/console theme:compile
# If still broken — full rebuild in prod:
bin/console cache:clear --env=prod
composer dump-autoload -o
Also check var/log/prod-*.log (or dev-*.log) for the exact missing template path. SimpleReview reads the log, identifies the missing template, and proposes the right {% sw_extends %} directive in a PR.
Add reCAPTCHA to a custom form
Shopware 6 ships with built-in basic_captcha and honeypot implementations — try those first, they're zero-config. For Google reCAPTCHA you wire in Shopware\Storefront\Framework\Captcha\GoogleReCaptchaV2 (or V3) and add the captcha to your plugin's config.xml:
<!-- src/Resources/config/config.xml -->
<config>
<card>
<title>Captcha</title>
<input-field type="single-select">
<name>activeCaptchaV2</name>
<options>
<option><value>googleReCaptchaV2</value></option>
</options>
</input-field>
<input-field type="text"><name>googleReCaptchaV2SiteKey</name></input-field>
<input-field type="password"><name>googleReCaptchaV2SecretKey</name></input-field>
</card>
</config>
Then enable in Admin → Settings → System → Storefront → Captcha. SimpleReview generates the full scaffold — config.xml, the form Twig override ({% sw_include '@Storefront/storefront/component/captcha/base.html.twig' %}), and snippets — in one PR.
Hide "Shopware" / "Powered by" from footer
Override the core footer in your theme plugin:
{# custom/plugins/MyTheme/src/Resources/views/storefront/layout/footer.html.twig #}
{% sw_extends '@Storefront/storefront/layout/footer.html.twig' %}
{# Drop the credit block, keep everything else #}
{% block layout_footer_inner_container_bottom %}{% endblock %}
Then bin/console theme:compile + cache:clear. Don't touch vendor/shopware/ — composer overwrites it on the next update and your edit is gone. The agent always writes the override into your plugin, never into core.
Theme not updating after a Twig edit — theme:compile runs but storefront still old
The classic Shopware 6 trap. The correct sequence is:
bin/console plugin:refresh # 1. re-read composer + manifest
bin/console theme:refresh # 2. re-read theme.json
bin/console theme:compile # 3. compile SCSS + JS bundle
bin/console cache:clear # 4. drop var/cache/ Twig cache
If still old: check var/cache/ permissions (must be writable by your PHP-FPM user, usually www-data) and run composer dump-autoload -o. In prod environments also flush the HTTP cache (Varnish / Cloudflare) — Shopware emits Cache-Control headers a CDN may have already cached.
Slow admin / Vue.js admin sluggish
Shopware 6 admin is a Vue.js SPA. If it's sluggish in production, you're almost certainly running with APP_ENV=dev. Check .env:
APP_ENV=prod
APP_DEBUG=0
OPCACHE_VALIDATE_TIMESTAMPS=0
SHOPWARE_HTTP_CACHE_ENABLED=1
MAILER_DSN=smtp://...
# Redis cache adapter (much faster than filesystem):
REDIS_DSN=redis://127.0.0.1:6379
Also enable Redis as the cache adapter in config/packages/framework.yaml and OPcache in php.ini with opcache.memory_consumption=256. Most "slow Shopware admin" tickets close after that single env switch.
Shopware Store — Our Plugin
Shopware Store at store.shopware.com is Shopware's official marketplace (formerly Shopware Community Store). We publish SimpleReviewEdit there — currently in review. Once it ships, the install path is:
- Admin → Account → log in to your Shopware Account
- Marketplace → search "SimpleReview" → 0€ free tier → Add to cart → Checkout
- Admin → Extensions → My Extensions → SimpleReview → Install + Activate
Until the marketplace listing is live — the SimpleReview Chrome Extension already auto-detects Shopware from <meta name="application-name" content="Shopware"> + the JS storefront handle, and routes edits to your Git repo. No marketplace install required for the click-to-edit workflow.
Comparison Table — Symfony Freelancer vs SimpleReview
| Step | Symfony / Shopware freelancer | SimpleReview agent |
|---|---|---|
| Brief | 30-min Zoom + back-and-forth in chat | One sentence in the popup |
| Repo / SFTP setup | 30-90 min — clone, install Composer deps, run plugin:refresh | Once, then cached |
| Find the override path | 30-90 min reading vendor/shopware/storefront/ to mirror it | Instant — plugin convention is indexed |
| Make the edit | 5-30 min | 5-30 seconds |
| Run cache / theme commands | 5-15 min (often forgets theme:refresh) | Automated on staging |
| Open a Pull Request | If they use Git at all | Always |
| Cost for a 1-line change | €60-150 (1-hour minimum) | €0 (BYO key) or pennies of API usage |
When You Want a Senior Shopware Developer
SimpleReview handles Twig overrides, SCSS variables, snippets, and small subscribers. It is not a replacement for a senior Shopware engineer when the work touches money, multi-channel, or the persistence layer. Get a human review — Vibers handles this — for:
- Custom payment app (Shopware Apps, not Plugins — manifest, webhooks, async sync). Money flows through it; humans should review.
- Multi-channel / headless API via Sales Channel API. Type-safety and pagination edge cases need careful design.
- Complex entity decoration / extension — adding fields to
ProductEntity, decorating repositories, customEntityDefinitionwith foreign keys and translations. - Performance audit — ElasticSearch tuning, Redis adapter selection, database indexing, N+1 query traces.
- Migration Shopware 5 → 6. SW5 (Smarty + Enlight) and SW6 (Twig + Symfony) are different architectures. The
SwagMigrationAssistanthandles data migration, not theme/plugin migration. That's senior-engineer work.
Vibers takes those PRs — a real human reviews them, sends a fix-up if needed, and approves before merge. Use SimpleReview for the 80%, use a human for the 20% that earns the €100/hr.
Stop Paying €80/hr for One-Twig-File Shopware Edits
SimpleReview's Shopware agent reads custom/plugins/, knows the storefront override system, runs theme:compile + cache:clear for you, and opens a Pull Request.
Custom payment app, headless, SW5 migration? Get a human review → Free first PR for a GitHub star.
Frequently Asked Questions
custom/plugins/[YourPlugin]/src/Resources/views/storefront/ and Resources/app/storefront/src/scss/. SimpleReview's Shopware-aware agent reads your plugin, finds the right override file, runs the right console commands (theme:refresh → theme:compile → cache:clear), and opens a Pull Request. Custom payment apps, complex entity decorators and headless integrations still want a senior Shopware developer review.core/ or vendor/shopware/. Pair it with a staging clone (most managed Shopware hosts include one) and the worst case is a PR you decline. The agent also flags whenever a fix would touch core, payment, or sales-channel code, so you get a heads-up before merge.custom/plugins/[Vendor].[Plugin]/) and the storefront override system documented at developer.shopware.com. Shopware 5 has limited support — its Smarty + Enlight architecture is fundamentally different from SW6's Symfony/Twig stack, so SW5 → SW6 migrations are explicitly a human-review task.@Storefront?@Storefront and any view in custom/plugins/[YourTheme]/src/Resources/views/storefront/ overrides the matching path in vendor/shopware/storefront/Resources/views/storefront/. SimpleReview reads the theme inheritance graph (from theme.json + Resources/theme.json) and writes the override into your theme, never into core or vendor.