Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Shopware Plugin Management Laravel Package

ntzrbtr/shopware-plugin-management

Simplify Shopware plugin management with a PHP package for listing, installing, activating, deactivating, updating, and removing plugins. Provides a clean programmatic interface to automate plugin lifecycle tasks in Shopware projects and Laravel apps.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The framing needs one correction before anything else: this is not a Laravel package. It is a Shopware 6 (Symfony-based) plugin-lifecycle wrapper that happens to be callable from Laravel console commands, queued jobs, or deploy scripts. That distinction drives the entire evaluation. There are two possible internal designs and they carry very different risk:

  • Process-wrapper design — the package shells out to bin/console plugin:install|activate|deactivate|update, parses exit codes and output, and normalizes errors. Portable, upgrade-tolerant, low blast radius, testable with a fake process runner. This is what we want.
  • In-process design — the package resolves Shopware\Core\Framework\Plugin\PluginManager from the Shopware DI container and calls it directly. Faster and richer (structured exceptions, no shell parsing), but it binds us to Shopware internals that carry no stability contract, and it requires co-residency inside the Shopware kernel — which means a Laravel app cannot host it without bootstrapping Shopware, which is not a realistic ask.

Confirm which one it is before anything else; it changes the effort estimate by an order of magnitude. The stated "consistent error handling for safer automation workflows" hints at the wrapper design, but that is an inference from marketing copy, not evidence.

Integration feasibility. High, with conditions. The capability itself is genuinely valuable: plugin install/activate/deactivate/uninstall/update/list is exactly the class of toil that should not be a human clicking through the admin panel on a release night. The work is well-bounded (one CLI invocation per verb), it is inherently idempotent-adjacent, and it does not touch customer-facing request paths. The constraints are environmental rather than architectural: the package must run against a Shopware installation whose filesystem, database, and var/cache it can reach, which effectively means it runs on a shop node or an identical clone — not from a separate Laravel control plane over the network.

Technical risk.

  • Adoption signal is the dominant risk. Zero stars on a public repo with a 2025-10-28 release is not proof of poor quality, but it is proof of an unvalidated dependency. Assume one maintainer, no external users, and no one else has hit the edge cases before us. Treat fork-and-maintain as the base case, not the contingency.
  • Dual version coupling. The package is constrained by both PHP and Shopware 6 minor versions, and Shopware ships minors frequently with internal API reshuffles. A ^1.7 pin protects us from the package's own churn; it does not protect us from Shopware's.
  • Stateful, destructive operations. Uninstall drops plugin data. Deactivate can leave schema migrations applied. There is no rollback primitive in Shopware's plugin model, so any automation we build inherits that irreversibility. Updates that run migrations are the sharpest edge.
  • Hidden side-effects are the real failure surface. A plugin activation is not complete until assets are copied/symlinked, the theme is recompiled, the container cache is cleared, and the plugin's own Composer dependencies are installed. If the wrapper does not orchestrate these, we will build a green CI pipeline that produces a broken shop. This is the single highest-value thing to verify in a spike.
  • Zero-star provenance. Even MIT-licensed and dependency-light, this needs a source read and a security-advisory check before it enters a lockfile on a revenue system.

Key questions to answer in a one-day spike, on a staging clone of production:

  1. Does it drive bin/console as a subprocess, or call PluginManager in-process?
  2. Which Shopware 6 minors and PHP versions are declared, and is shopware/core a hard Composer dependency (and therefore a version-pin collision with the host shop)?
  3. After install/activate, does it handle asset publishing, theme compilation, cache clearing, and plugin-level composer install — or does it hand those back to us?
  4. What is the behavior on a partial failure (exception mid-activation)? Does it surface the underlying console error, or swallow it?
  5. Are operations safe to re-run? Activating an already-active plugin — no-op or exception?
  6. Is the bin/console path / Shopware root configurable, or hardcoded?
  7. Is there real test coverage and CI, or is the repo nominal?
  8. Does it support multi-instance / multi-shop setups in one installation?
  9. Can it list plugin state as machine-readable output (JSON) for drift detection, or only human-readable?
  10. Licence chain of transitive dependencies — anything copyleft that conflicts with the shop's distribution model?

Integration Approach

Stack fit. Only adopt if the target is a Shopware 6 installation we operate and deploy ourselves. Laravel is relevant purely as the host for orchestration: an Artisan command, a queued job, or a step in a deploy pipeline. If we do not already run a Laravel-based ops layer, do not introduce one to reach this package — write the equivalent Symfony console command or shell script and skip the wrapper. If we do have one, the package converts a bespoke script into a versioned, upgradable dependency, which is the actual buy-vs-build case here.

Migration path. Do not cut over. Sequence it:

  1. Read-only first. Wrap only list and status/version inspection behind the package, run it in staging and then production read-only, and compare its output against the admin panel. This validates the wrapper design, error semantics, and output format at zero risk.
  2. Additive operations next. New-plugin install + activate in a CI/deploy context, still gated behind a manual approval on production.
  3. Updates third, on staging only, for at least one full Shopware release cycle.
  4. Deactivate/uninstall last, and arguably never automate. These are one-way doors; keep them as a documented runbook step with a human in the loop and a DB snapshot beforehand, even if the package can technically do it.

Compatibility. Pin the package to ^1.7 and let patches flow; pin Shopware's minor separately and treat Shopware upgrades as the real compatibility event. Verify the declared PHP constraint against our runtime and confirm shopware/core is either absent from the dependency tree or satisfiable by our installed version — a Composer constraint conflict here is the most likely reason this evaluation ends in "no." Run the entire spike against a production-derived staging clone with the same plugin set, because plugin interactions (shared services, migration ordering, theme inheritance) are where this breaks.

Sequencing inside a deploy. The ordering is non-negotiable and is the main thing the package does not solve for us:

  1. Deploy application code.
  2. composer install for the shop, then for each plugin that vendors its own deps.
  3. Plugin install (new plugins only; this runs migrations).
  4. Plugin activate.
  5. Plugin update (existing plugins, again running migrations).
  6. Cache clear / container rebuild, asset publish, theme compile.
  7. Smoke test the storefront and admin before releasing traffic.

Wrap all plugin operations in a single exclusive lock (DB advisory lock or filesystem lock) and a single-runner constraint — a queued job with concurrency 1, not a horizontally scaled worker pool. Take a database snapshot before step 3 and do not proceed past a failed plugin without halting the pipeline; partial plugin state is worse than an aborted deploy.

Operational Impact

Maintenance. The package itself should be near-zero-maintenance — MIT, narrow scope, patch releases are docs/changelog hygiene. The real recurring cost is the Shopware upgrade tax: budget roughly half a day to a day per Shopware minor upgrade to re-verify plugin operations against a staging clone. The dependency is cheap; the environment it operates in is not.

Support. Community-only, no SLA, effectively one maintainer on an unadopted repo. Plan explicitly for fork-and-maintain: keep our usage confined to the package's public surface (do not reach into its internals from our code), which keeps the fork cost at "vendor the repo, patch a method" rather than a rewrite. Do not build product differentiation on this capability — it is infrastructure plumbing, and it is the right shape for a dependency.

Scaling. Poorly, by design, and that is fine. Plugin lifecycle operations mutate shared filesystem and database state, so they do not parallelize across nodes and must not be run concurrently. In practice: seconds for a list/status call, tens of seconds for install/activate, and potentially minutes for an update carrying schema migrations — with a real risk of exceeding default job timeouts. Set generous timeouts, use a dedicated queue or lock, and never schedule plugin operations to overlap with a code deploy, a cache warm, or another plugin operation.

Failure modes to plan for.

  • Silent partial success — plugin activates but assets/theme are not rebuilt; shop looks fine in admin and broken on storefront. Mitigated only by an explicit post-step and a storefront smoke test.
  • Irreversible migration — a failed plugin update leaves schema half-applied with no rollback. Only mitigation is a pre-deploy DB snapshot and a halt-on-error pipeline.
  • Non-idempotent verbs — re-running activate or install may throw rather than no-op; our wrapper must treat "already in desired state" as success.
  • Filesystem/DB skew in multi-node setups — if the operation runs on node A but traffic hits node B before asset sync, the deploy is inconsistent. Requires a deploy-time sync step or single-node deploys.
  • Data loss on uninstall — no guardrail in the package. Keep this manual.
  • Stale cache masking failure — a plugin that fails to load may appear healthy until cache is cleared. Always clear before verifying.
  • Dependency rot — a Shopware minor lands and the package has not shipped support; operations break or, worse, silently no-op. Detection requires running the staging rehearsal, not reading a changelog.
  • Bus factor — repo goes quiet and issues go unanswered. Mitigated by the fork path, not by any contractual mechanism.

Ramp-up. Low for a PHP engineer with Shopware exposure: one to two days to read the source, run the spike, and write the runbook. The docs depth is unverified (v1.7.1 was a docs fix, which tells us docs exist and are being tended, not that they cover failure modes). Expect to learn the error semantics from source and from staging failures, not from documentation. The heavier ramp-up is organizational, not technical: getting release management to accept that plugin lifecycle is now a pipeline step with a halt-on-failure gate, and that uninstall remains deliberately manual.

Recommendation. Proceed to a one-day spike, not a decision. Adopt read-only (list/status) on the strength of that spike; adopt install/activate/update behind a manual production approval once the hidden-side-effects question is answered and staging rehearsals pass across one Shopware release cycle. Keep uninstall manual indefinitely. Refresh this assessment at the next Shopware minor upgrade or any package release carrying Added / Changed / Deprecated / Removed / Security entries.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle