What ongoing Shopware maintenance actually covers
Shopware maintenance consists of four kinds of work that have little to do with each other technically. The first is security and bugfix releases within the current line: check whether the installation is affected, install it on staging, go through the back end, the checkout, the payment methods, mail delivery and order documents, then deploy. Not on release day and not blindly — an x.x.x.0 release does not go straight into live operation with us, because Shopware has withdrawn individual releases after publishing them. The most recent case was 6.7.12.0 of 7 July 2026, which could not be installed because of an incompatibility with Twig 3.28 and was replaced by 6.7.12.1. We wait for a reliable patch level and then catch up, instead of skipping a version and letting the gap grow. We run updates from the command line, not through the graphical updater, because that is the only way to keep a clear record of what happened.
The second kind of work is plugin compatibility, and it is the most thankless. Every update raises the question of which extension has a matching version, which one still has a maintainer and which one sits in the shop without being used. Store plugins, purchased extensions and your own code have three different life cycles here. We keep the Composer state clean instead of pinning versions until nothing can be resolved any more, and we keep a list that says: this extension is maintained, this one will be replaced at the next major version, this one will be uninstalled. We build our own plugins against the extension points of Shopware, not into the core — core hacks are the most common reason why a shop falls several versions behind.
The third kind of work is the underlying stack, the fourth is watching. The stack includes the PHP and database version, the object cache in Redis or Valkey, the HTTP cache, the search index, the message queue, cron jobs, certificates, the deployment path and backups with a restore test that has actually been carried out. A backup that has never been restored is an assumption. Watching includes the logs, the backlog in the queue, the run time of the nightly import, the error rate in the checkout and the growth of the tables that quietly get bigger. We also read the deprecation messages, because they announce the breaking points of the next major version while there is still time. At the end there is a record of the work carried out — ready to present, without anyone having to search for it first.
"It works" is not a state of maintenance
A Shopware shop that nobody has touched for two years still functions. It accepts orders, sends invoices, shows stock levels — until it stops doing so. The difference between "it works" and "it is maintained" is not a state of the shop but the length of the way back to the current version. In a maintained shop, the next update is a maintenance window. In an unmaintained shop it is a chain: core jump, plugins without a successor, PHP version, database, and in between custom code that nobody has documented. Every step depends on the previous one, and the date is not set by your calendar but by whatever breaks first.
Shopware 6.7 is the current textbook example. The move from 6.6 to 6.7 is the largest technical rebuild since Shopware 6 started — Vue 3, Vite and Pinia in the administration — and the effort therefore resembles a major version jump rather than a point release. Anyone who maintained their shop continuously had a manageable list of custom adjustments and a clear plugin landscape at that point. Compatible versions of the large store plugins have been available since the beginning of 2026, unlike in the first months after the release of 6.7 in June 2025. Anyone who did not maintain their shop has the same work on top of everything else that has accumulated in the meantime. Shopware 6.8 is expected for 2027. The next date is therefore already fixed, even though the exact day is missing.
What a maintenance contract cannot do: prevent a break-in or guarantee availability. It shortens the window between a published fault and the installed patch, keeps the underlying stack on a supported version, makes faults visible earlier and documents when action was taken. We do not quote availability percentages, because in a self-hosted shop they depend on things that are not all within our control. And if a monthly flat fee does not add up for your shop — a small product range, four extensions, no ERP — we say so and propose planned update assignments at a fixed interval instead. A contract that costs more than it prevents is a bad deal for both sides.
Why a shop needs more care than a website
On a website, a fault is a display problem. In a shop it is a closed till, and usually one that cannot be seen from outside: the shop loads, the catalogue works, only the order has not gone through since this morning. This is why the monitoring of a shop needs different values from the monitoring of a website — not only availability and certificate, but the number of incoming orders in relation to the usual daily pattern, the error rate in the checkout process, the state of the queue and the run time of the indexing. A shop that has not taken an order for an hour is either on a public holiday or has a problem.
The second difference is the payment providers. A shop depends on third parties who change their interfaces on their own schedule: a new API version, a changed webhook payload, expiring certificates, an adjusted flow for customer authentication, deprecated endpoints with a deadline. These changes arrive regardless of whether you currently have a project, and they hit exactly the point where money flows. On top of that, Shopware 6.7 moved the payment handlers to the single AbstractPaymentHandler base class — so payment extensions are in motion from two sides at this point. Maintenance here means reading the providers' announcements and testing the payment method after every update with a real test purchase, not with a look at the home page.
The third difference is the ERP. An ERP integration breaks on updates on both sides, and nobody announces the updates on the ERP side to you through the shop. Added to this are the questions that are not technical ones: which system owns the price, which one owns the stock, which one owns the description? What happens if the import stops halfway through — does half the data stay as it is? May the same record be written twice without causing damage? And who reads the error log? Since Shopware 6.6, stock has been a real-time value: product.stock is updated through the order events, and the former available stock is only a read-only mirror of the same field. Differences from the ERP are therefore almost always a synchronisation or reservation problem. Without ongoing checks, such differences only become apparent when a customer buys something that is no longer there.
Taking over a third-party shop: look first, then commit
The most common reason for a maintenance enquiry is a shop that someone else built. We do take over such shops, but not unseen. Before we commit, there is a survey of the starting point, and the list is always the same: Shopware version and patch level, the Composer setup or the lack of it, the plugin list with origin and licence situation, the scope and state of the custom code, changes to the core, theme and Twig adjustments, interfaces to ERP, PIM, shipping and payment. Added to this is the hosting: PHP and database version, cache and search services, deployment path, whether a staging environment exists, what the backups look like and whether one has ever been restored. We need shell and database access, the repository, the Shopware account and administrator rights in the shop. Without SSH, a Shopware project cannot be supported in any meaningful way.
The survey includes data processing, because a shop holds personal data: a data processing agreement under Article 28 GDPR, the chain of sub-processors, the server location, the retention of the backups, who has which access and which accounts should have been blocked long ago. In takeovers we regularly find open points there: no contract with the previous service provider, plugins licensed in the name of the old agency, the Shopware account not issued to your company, access still held by people who no longer work there. We document the state we find and have it confirmed in writing, so that later it remains possible to tell what we found and what we caused.
And we do decline. Not often, but it happens: changes right across the core that turn every update into new development; central custom development that was delivered without source code; a checkout process whose behaviour nobody can explain any more; traces of a compromise in the file system or in the administrator accounts. In that case it is not a maintenance job but a rebuild or a new build with its own quotation — and we say so before the contract, not in the third month. We do not sign a response time for a state we cannot stand behind. A promised deadline on a shop that you do not understand is a promise that will not hold when it matters.
Service level tiers, availability and operating model
Our response times come in tiers, four levels per shop: BASIC with 24 hours for systems where an outage delays work but does not cost revenue. STANDARD with 8 hours for shops that are needed in day-to-day business. ADVANCED with 4 hours for shops with an ongoing order volume and connected systems. PREMIUM with 2 hours for systems where every hour of standstill costs money immediately. Billing is a monthly flat fee net per shop. The response time says when someone starts working on the issue — not when the system runs again; we keep these two values separate in the contract. Without an agreement, the following still applies: processing in order of receipt within 48 hours during business hours, Monday to Friday 9:00 to 16:00.
You do not choose the tier by which number sounds reassuring, but by a calculation you can do yourself: what does an hour of standstill cost? Revenue divided by the hours in which it is generated is the starting point. Add the orders that are not made up later because the customer buys from a competitor, the service load on the phone, the delay in the warehouse and shipping, and with a connected ERP the effort of cleaning up half-transferred data. Anyone who knows this total usually places themselves in the right tier without help. Two things are independent of the tier: outside Monday to Friday 9:00 to 16:00, nobody here answers the phone unless on-call duty has been agreed — and that costs money in the months when nothing happens as well. We quote the monthly flat fee after the survey, not on the phone: it depends on the number of extensions, the scope of the custom code, the interfaces and the chosen tier.
The operating model comes in two equally valid forms. Either the shop runs on our own servers in Germany, on Proxmox PVE clusters, with a suitable PHP version, object cache and search index — then operation and maintenance are in one hand and the boundary of responsibility disappears. Or we support it on your existing hosting; for that we need SSH access, a clean deployment path, a staging system and sufficient PHP and database versions. If any of this is missing, we set it up there or weigh it against the cost of a move, instead of making every maintenance job more expensive than it needs to be. Where hosting and application are separate, we put the boundary of responsibility in writing before we start, so that in the event of a fault nobody has to search for who is responsible. And we set up the ongoing support so that you can end it: source code in your repository, licences and access issued to your company, domains in your name, installation documented.