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

Laminas Dependency Plugin Laravel Package

laminas/laminas-dependency-plugin

Composer plugin that eases migration from Zend Framework to Laminas by transparently replacing zendframework/* dependencies with their laminas/* equivalents during install and update, helping existing projects adopt Laminas without manual composer.json edits.

Deep Wiki
Context7

Technical Evaluation

Architecture fit. Effectively nil for a Laravel codebase. laminas-dependency-plugin is a Composer plugin whose sole job is to rewrite zendframework/* and zfcampus/* requirements in the dependency graph to their laminas/* equivalents at install time. Laravel, Symfony components, and the mainstream Laravel ecosystem do not depend on Zend Framework packages, so the plugin has no work to do in a typical Laravel stack. The narrow case where it matters is a Laravel app that transitively pulls a stale package still requiring zendframework/zend-* (historically common with older HTTP/PSR-7, hydrator, or code-generation libraries). Even then, the plugin is a shim masking an upstream that has not migrated — a code smell rather than an architectural solution.

Integration feasibility. Trivial mechanically: one composer require --dev (or runtime) entry plus an allow-plugins entry in composer.json. The real friction is governance, not engineering. Composer 2.2+ blocks plugins by default, so the allow-list change must go through review. Because the plugin mutates requirements during resolution, it must live wherever composer install runs — including CI, container builds, and production image pipelines — which widens the blast radius beyond a dev-only convenience.

Technical risk.

  • Supply chain / execution surface. Composer plugins run arbitrary PHP at install time. A 31-star package with an unverified repository field warrants a manual source review and a pinned, hash-locked version rather than a floating constraint.
  • Provenance gap. The repository is reported as "unknown," which blocks standard OSS intake checks (upstream commit history, maintainer identity, release signing). The BSD-3-Clause license and Laminas namespace suggest legitimacy, but TPM should not assume it without verification against the Laminas org.
  • Silent graph rewriting. The plugin changes what Composer resolves. Failures surface as confusing "package not found" or version-conflict errors rather than clear diagnostics, raising mean-time-to-diagnosis for the platform team.
  • Obsolescence. This is a transitional artifact for the Zend→Laminas rename. Its useful life is bounded; long-term reliance is a liability.
  • Composer 1 incompatibility and PHP constraint drift relative to our runtime matrix.

Key questions.

  1. Does composer.lock (including transitive deps) contain any zendframework/* or zfcampus/* entries today? If no, stop here — the package is not needed.
  2. If yes, can we upgrade the offending dependency to a Laminas-native release instead of shimming?
  3. Who owns the security review of install-time plugin code, and can we pin to an exact version with a committed lockfile?
  4. Is the plugin acceptable in production image builds, or dev/CI only?
  5. What is the exit plan and timeline to remove it?

Integration Approach

Stack fit. Poor-to-conditional. Laravel's own dependency tree is Composer 2-native and Zend-free; the package only earns a place as a temporary compatibility bridge for a specific legacy dependency. Treat it as a scoped remediation tool, not a platform dependency.

Migration path.

  1. Audit first. Run composer why zendframework/zend-* and grep composer.lock for zendframework/ and zfcampus/. Quantify how many packages and which direct dependencies are implicated.
  2. Prefer upstream upgrade. For each hit, check whether a newer release of the requiring package already targets laminas/*. Upgrading one dependency is strictly better than installing a graph-rewriting plugin.
  3. Fallback shim. Only where no upgrade path exists, add the plugin pinned to an exact version, with allow-plugins entries scoped in composer.json and a documented expiry date.
  4. Container parity. Ensure the same composer.json/allow-plugins config is used in CI and runtime images so behavior does not diverge between environments.

Compatibility. Requires Composer 2.x and the plugin API; verify against our pinned Composer version and the PHP runtime matrix (7.4–8.x range per Laminas conventions). Validate in a throwaway branch with a full composer update --dry-run before touching main.

Sequencing. Audit → attempt dependency upgrades → introduce plugin only for the residual set → verify composer install on a clean cache in CI → ship → schedule removal once upstreams migrate. Do not introduce the plugin and other Composer-level changes (repository additions, platform config, autoloader changes) in the same release; isolate the variable so regressions are attributable.

Operational Impact

Maintenance. Near-zero ongoing effort if used — the plugin is passive. The burden is the removal ticket and the diligence of not letting a "temporary" shim calcify. Budget an explicit owner and a review date.

Support. Low call volume expected; when issues occur they will present as opaque dependency-resolution errors, so the platform team should document the plugin's presence in the repo README and in the Composer troubleshooting runbook. First-line support will otherwise misattribute failures to Laravel or CI.

Scaling. Irrelevant at the application layer — the plugin does not affect runtime performance, request throughput, or horizontal scaling. The only scaling concern is organizational: every new service that copies the template inherits the shim unless the audit is done per-repo.

Failure modes.

  • Plugin blocked by allow-plugins policy → install fails with a security-advisory-style error; recovery is a one-line config change but requires a release.
  • Composer major-version drift → plugin incompatible, install breaks across the fleet at once.
  • Upstream package adds a genuine laminas/* requirement that conflicts with the rewritten one → resolution errors that look unrelated to the plugin.
  • Plugin abandoned upstream → no fix path for future Composer changes; forces an emergency removal.
  • Silent rewrite hides a vulnerable, unmaintained Zend package that would otherwise have been flagged by dependency scanning, since the resolved tree no longer shows the original name to some SCA tools.

Ramp-up. Minutes for an engineer who knows Composer; the plugin is declarative and has no API to learn. The real ramp-up cost is contextual: understanding why it is present, which requires the audit notes above. Onboarding documentation is the difference between a 5-minute and a 2-hour investigation.

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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator