flagbit/shopware-maintenance
A Shopware plugin for managing maintenance mode with configurable templates, IP allowlisting, and easy toggling. Take your store offline for updates or emergencies while keeping trusted users and staff access.
Premise check (read first). flagbit/shopware-maintenance is not a Laravel package. It is a Shopware 6 plugin (Composer package of type shopware-platform-plugin) built against the Shopware Core, which is Symfony-based — not Laravel. There is no service provider in the Laravel sense, no config/app.php registration, and no Artisan surface. If the intent was "evaluate a PHP package for a Laravel estate," the answer is that this is out of scope and should be rejected at triage. The remainder of this assessment assumes the realistic case: the consuming stack is Shopware 6, and we are deciding whether to adopt this plugin rather than hand-roll maintenance behavior.
Architecture fit. The plugin's job is narrow and well-bounded: present a maintenance/storefront-closed experience with operator controls (typically IP allowlisting, a maintenance page/template, and scheduling) layered on Shopware's storefront request lifecycle. That is a peripheral concern — it does not touch catalog, checkout, or order state — so architectural blast radius is small. Fit is good only where we already run Shopware 6 and want richer maintenance UX than the platform default. Shopware ships native levers here (sales_channel.maintenance and the MAINTENANCE_MODE env flag); the plugin's value is therefore incremental convenience, not capability we cannot otherwise obtain. That framing matters for the buy-vs-build call.
Integration feasibility. Mechanically still straightforward — composer require flagbit/shopware-maintenance, bin/console plugin:install --activate, configure via Admin — with a schema migration step in the deploy runbook and no external services, credentials, or queue workers. Two changes since the prior assessment. First, v4.0.0 is a major version bump from v3.0.0 with a changelog that lists only a bug fix and a docs addition; a major bump with no documented breaking changes is itself a signal to read the diff rather than trust the notes. Second, the headline fix is a plugin-sync crash under New Relic, which means the plugin's install/activation path has known interactions with APM instrumentation. If New Relic (or a comparable PHP agent) is present in our stack, the install path is no longer a purely mechanical step and must be exercised in an environment that mirrors production instrumentation.
Technical risk. The dominant risk remains lifecycle dependency: a maintenance plugin must track Shopware 6 minor releases (6.5 → 6.6 → 6.7) because it hooks storefront request handling and Admin UI, both of which churn. Field evidence is still effectively nil — 19 stars, 0 dependents, no downstream consumers to observe for breakage — though v4.0.0 does show two first-time contributors, a mildly positive signal on bus factor that does not offset the thin adoption. The v4.0.0 release adds a second, narrower risk: observability-tooling coupling. A maintenance plugin crashing during plugin sync when an APM agent is loaded tells us the plugin's lifecycle hooks are sensitive to the runtime environment in ways its authors discovered via a user report, not via their own test matrix. Assume other agent/CGI/proxy permutations are similarly untested. The May 2025 release date no longer applies; the v4.0.0 publish date should be recorded as the current liveness signal.
Key questions to resolve before committing.
Stack fit. Adopt only if the target platform is Shopware 6 and we own the plugin lifecycle (i.e. self-hosted or a PaaS where we control bin/console). If we are on Shopware Cloud, plugin installation is constrained by the vendor's allowlist process — confirm availability there first. If the estate is genuinely Laravel, do not integrate; close the evaluation.
Migration path. Low-friction and reversible, with one added gate for v4. Sequence: (1) read the v3→v4 diff and verify the composer constraint against our pinned Shopware version in a staging clone; (2) install and activate in staging with production-equivalent APM instrumentation loaded, since the v4 fix targets exactly that path; (3) migrate the current maintenance configuration — existing MAINTENANCE_MODE env usage or per-sales-channel flags — into the plugin's config so we do not run two mechanisms in parallel; (4) validate allowlist bypass from an external network, not just locally; (5) rehearse the uninstall path so we know the rollback cost.
Compatibility. Treat Shopware minor upgrades as a gating event for this plugin specifically. Add it to the upgrade checklist alongside payment and search integrations, and require a staging smoke test of maintenance activation on every Shopware bump. Pin the plugin version explicitly in composer.json; do not float it. Given the undocumented major bump, pin to v4 only after the diff review — do not treat "v4 is newest" as sufficient justification, and do not let a floating constraint pull a future v5 unexamined.
Sequencing. Still a low-priority, independent workstream with no prerequisites and no downstream dependents, so it can slot into any maintenance window. Do not bundle it with a Shopware upgrade or with an APM agent rollout — bundling makes it impossible to attribute a failure, and the v4 New Relic fix demonstrates a real interaction between those two changes. Ship it alone, then upgrade Shopware separately.
Maintenance. Near-zero steady-state effort — no daemons, no cron, no storage growth. Real effort is the recurring compatibility tax at each Shopware bump, which is small but non-zero and falls on whoever owns platform upgrades. Budget roughly a half-day of verification per Shopware minor, plus a one-off diff review for the v3→v4 transition.
Support. Supportable by our own platform team without vendor engagement for routine use; the surface is a config screen and a template. The upstream gap is unchanged: with 19 stars and no dependents, assume no community triage and a slow vendor response — though the v4 release arrived with outside contributions, which is a modest positive. Assign a named internal owner so the plugin does not become orphaned in our own inventory.
Scaling. Irrelevant in the horizontal sense — maintenance mode is a deliberate global degrade, not a load path. The one scaling-adjacent concern is cache behavior at the edge: confirm allowlisted operators bypass the CDN/reverse proxy, or the allowlist is useless under a shared cache.
Failure modes. The one that matters is still operator lockout — a misconfigured allowlist, or a maintenance response served from cache to allowlisted IPs, leaves the team unable to reach the storefront during an incident. v4.0.0 surfaces a second, now-evidenced mode: failure during plugin sync/activation when an APM agent is present, which converts a routine deploy step into a broken install — and does so precisely during the incident-adjacent windows when maintenance mode is being configured. Tertiary: silent divergence from native Shopware maintenance flags producing an inconsistent state, and an abandoned package blocking a future Shopware upgrade, forcing an emergency rip-out during a security patch window.
Ramp-up. Trivial for anyone already fluent in Shopware plugin administration — under an hour. The meaningful ramp is not skill but documentation: write a one-page runbook covering activation, allowlist changes, the external-verification step, the instrumentation-present install check, and uninstall. That runbook, not the plugin, is the durable artifact.
Recommendation. Approve as a low-risk, low-value convenience layer contingent on the platform being Shopware 6, a staging verification of the cache/allowlist interaction, and — new for v4 — a diff review plus an install test with our real APM stack loaded. Do not adopt it as a strategic dependency, do not let it become the sole path to maintenance mode, and gate every Shopware minor upgrade on a smoke test. If the stack is Laravel, or if we cannot accept an unproven single-vendor dependency whose major releases ship without a breaking-change note, reject and use the platform-native maintenance flag.
How can I help you explore Laravel packages today?