Patch, minor, major: three different risks
Shopware counts with four numbers. In 6.7.13.0 the first two positions denote the major line, the third the minor release and the fourth the patch level. According to the release policy, minor releases appear on the first Monday of the month and bring features, bug fixes and security fixes; patch releases come in between when a fault requires it. Shopware does not state a rhythm for major releases: 6.7 appeared in June 2025, and 6.8 is only expected for 2027. Breaking changes come with the major version. The risk assessment follows from this classification, and it is anything but symmetrical. A patch level is an operational task, a major jump is a project. Anyone who treats both the same either makes one of them too costly or the other too careless.
With patch and minor levels within 6.7 the risk is limited, but not zero. What is affected is code that depends on internal APIs instead of the documented extension points, and templates that point to markup that has changed. A practical rule from operation: do not install new x.x.x.0 releases immediately. Shopware withdrew 6.7.12.0 shortly after publication — according to the release notes this version cannot be installed or used for an update because of a fault discovered afterwards, and 6.7.12.1 should be used instead. Anyone who moves a month later avoids this class of surprise.
With the major jump from 6.6 to 6.7, not only the code changes but also the underlying stack. As minimum requirements for 6.7, Shopware names PHP 8.2, 8.3 or 8.4, Node.js from version 20 for the administration build, MySQL from 8.0.17 or MariaDB from 10.11, and Redis from 7.0 if it is in use. The documentation explicitly names problematic intermediate versions: MySQL 8.0.20 and 8.0.21, MariaDB 10.11.5 and 11.0.3. These are minimum values and not recommendations — for operation, the hosting guide lists a newer stack. Anyone who is on PHP 8.1 or MariaDB 10.6 today has two projects and not one — and the order is fixed: first the stack, then the application.
Why 6.7 affects every plugin and every custom theme
The administration of Shopware 6 is a Vue application, not a set of form pages. An extension there does not call a stable interface but becomes part of this application: it overrides Twig blocks of the administration templates, registers or extends components via Component.register() and Component.override(), brings its own entry point under src/Resources/app/administration/ and is compiled into the same build as the core. This is exactly where the effort of 6.7 comes from: when the application moves from Vue 2 to Vue 3, the contract with every plugin that hooked into it changes as well.
Three rebuilds take effect at the same time. First, the Vue 2 compatibility layer has been removed; components have to run against Vue 3. Second, Pinia replaces the state management Vuex — Shopware.State.get() becomes Shopware.Store.get(), and your own stores are registered again in a new way. Third, the administration builds with Vite instead of Webpack; your own webpack.config.js becomes a vite.config.js. Webpack and Vite are not cross-compatible: anyone who maintains a plugin for both lines needs separate releases for 6.6 and 6.7. As a rule of thumb for the inventory, a look at the directory is enough — every extension with files under src/Resources/app/administration/ is affected.
On the PHP side and in the storefront, the second block is added. 6.7 raises DBAL to 4, PHPUnit to 11, Dompdf to 3 and league/oauth2-server to 9, and moves the Symfony components up to 7.3; the jump to Symfony 7 itself was already made by 6.6, so it is no longer pending. The payment handlers have been merged into a single AbstractPaymentHandler class, the Store API route caching including all Cached*Route classes has been removed, delayed cache invalidation is active by default and the former configuration shopware.cache.invalidation.delay has been dropped. For payment and shipping methods, technicalName is mandatory, and custom field names with a hyphen or a dot are no longer accepted: field and field set names have to be valid Twig variable names. In the storefront, the header and footer load via ESI so that they can be cached independently, and the accessibility rebuild has changed markup, ARIA attributes and block structure. What was still behind the feature flag ACCESSIBILITY_TWEAKS in 6.6 is standard in 6.7 — pagination runs through anchor links instead of radio inputs, and icons from the icon helper carry aria-hidden. A custom theme is therefore affected just as much as a plugin: every overridden Twig block has to be read against the new original, because otherwise it quietly brings back an old structure.
With third-party extensions the situation is now better than it was shortly after the release. At the beginning of 2026 the large store plugins have compatible versions for 6.7 — in the first months this was different, and a good part of the fear of updating comes from that. Today the bottleneck is the custom-built extensions and the small ones without a maintainer. Shopware itself provides a first overview: under Settings, System, Shopware Updates, each active extension is shown in one of three states. This list is a start and not an approval — it does not know your own code and says nothing at all about templates.
From Shopware 5 it is a migration, not an update
There is no update path from Shopware 5 to Shopware 6, only a new build with data transfer. Shopware 6 is a different system: Twig instead of Smarty, a different data model, a different plugin architecture. Data is transferred — products, variants, categories, customers, orders, media, custom fields, SEO URLs — through the Shopware Migration Assistant. Theme, extensions and interfaces are created anew. Instead of a plugin update, this is a plugin replacement: for every function you decide whether a 6.7 extension covers it, whether it is rebuilt, or whether it is dropped because nobody used it anyway.
Two things follow from this for the planning. First, the target version is the current 6.7 level directly. An intermediate step via 6.6 brings nothing, because everything is rebuilt anyway, and it would only plan the rebuild to Vue 3, Vite and Pinia in order to repeat it later. Second, the date is not open-ended: Shopware 5 has been out of vendor maintenance since the end of July 2024, and anyone who cannot meet the date buys time with the paid safefive patches — that postpones the migration, it does not replace it. On switch-over day the redirect list then decides: the SEO URLs from Shopware 5 can be carried over, but the URL structure of Shopware 6 is a different one, and without complete redirects you lose visibility that has been built up over years. We generate the list from the existing data and check it before the cutover; there are no ranking promises attached to it, neither from us nor from anyone else.
A migration is therefore calculated differently from an update. For an update you count extensions, administration components and overridden Twig blocks and calculate the adjustment effort per item. For a migration you calculate a new build, plus data transfer, reconciliation and redirects — and for every function you decide again whether it comes along at all. Anyone who puts both in one pot gets a figure that is right for neither case. Our page on Shopware help describes the migration path in detail — Migration Assistant, mappings, data reconciliation, cutover. This page is about the path within Shopware 6.
How an update is actually run
It starts with a staging copy holding real data. Real catalogue and order data is necessary because faults in price logic, tax rates, discount rules and order documents do not show up with test articles. Four things are disconnected before the first page is loaded: mail delivery, so that nobody receives order confirmations from the test system; the payment providers, which are switched to sandbox accounts; the ERP interface, which is pointed at a test tenant; and indexing by search engines. Personal customer data is pseudonymised, or the system runs closed to the public — a staging instance with real customer data and open access is a data protection incident waiting to happen.
Updating is done from the command line, not through the updater in the browser. The documented path runs in two halves: locally, set the target version in the composer.json, then run composer update --no-scripts and composer recipes:update, then commit and deploy. On the server, sales-channel:maintenance:enable --all, system:update:prepare, system:update:finish follow, and at the end sales-channel:maintenance:disable --all. After that comes the follow-up work that is easily forgotten: the build of the administration, theme:compile, dal:refresh:index, es:index if the search is active, and cache warm-up. Shopware explicitly recommends the updater in the administration only for small instances, because it runs in the browser and hits timeouts and memory limits in larger shops. The path via the repository has the further advantage that the same change is carried out twice in an identical way: first on staging, then live.
The test list is written before the staging run and ticked off afterwards, not the other way round. It contains at least: a complete order with every active payment method, every shipping method, a voucher, a graduated price, a customer group price, net and gross display with every tax rate in use, invoice and delivery note as PDF, the order export to the ERP, the stock feedback, registration, password reset, mail delivery and each sales channel individually if there are several. The maintenance window lies outside selling hours. Which hour is the weakest in your shop is in your own analytics and not in a rule of thumb.
The way back belongs in the plan before the switch-over — with an abort criterion that is named in advance, and not with a feeling at three in the morning. With a blue-green deployment it is possible, according to Shopware, to switch back to the old environment without restoring a backup; however, this is only recommended if only Shopware and not the extensions were updated at the same time. The honest limit behind this: database migrations only run forwards. Anyone who goes back to the dump after the switch-over loses the orders that came in during that time. That is exactly why the window is short, lies in the weakest selling hour and starts with a backup of the database and the files that was taken immediately beforehand.
What goes wrong if you do it differently — and what 6.8 means for planning
Three failures occur repeatedly after unsupported updates to 6.7, and all three are inconspicuous. First, a payment method stops working: the handler has not been moved to AbstractPaymentHandler or the technicalName is missing, the method disappears from the checkout, and otherwise the shop runs normally. Second, the price logic calculates incorrectly: an extension that intervenes in discount or price calculation is no longer applied, the order goes through — with the wrong amount. This is the most expensive case, because it can go unnoticed for weeks. Third, the ERP interface goes silent: a renamed custom field or a removed endpoint no longer fits, and it only becomes apparent when the goods do not go out.
This is why monitoring that measures more than availability belongs to the period after the go-live. Four values are useful, compared with the week before: the number of completed orders, the error rate in the log, the number of orders without a receipt from the ERP and the duration of an indexing run. Anyone who only checks whether the home page responds is monitoring the value that fails last in the event of a fault.
For planning, 6.8 is the next marker: expected for 2027, without a fixed date. Shopware ties the support transitions to major releases instead of calendar dates and has four states — Maintained, Extended Support, Security fixes only, End of life. With the release of 6.7, 6.6 moved into extended support and stays there until 6.8 appears; this state was designed to last one year, and with the postponement of 6.8 to 2027 Shopware has extended it. In extended support, the last minor of the line receives selected bug fixes and security updates as a patch, and older minors receive security fixes through the security plugin, and according to Shopware a further year of security updates through this plugin follows after that. In practical terms this means: anyone who moves to 6.7 now has the Vue 3, Vite and Pinia rebuild behind them when 6.8 arrives. That 6.8 will be the smaller jump for extensions is a well-founded expectation and not a promise from Shopware.
There is a case in which we advise against an update. If the shop is going to be replaced or rebuilt in the foreseeable future anyway, the 6.7 rebuild is money spent twice — the adjusted plugins and templates end up in the bin of the new build. In that case 6.6 in extended support, with a binding date for the new build, is the cheaper answer. If a project does not add up, we say so before the quotation and not after it.