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

Composer Downloads Plugin Laravel Package

civicrm/composer-downloads-plugin

Composer plugin for CiviCRM projects that downloads extension archives and other remote packages during install or update. It brings external CiviCRM downloads into Composer dependency management, reducing manual steps and helping keep site builds reproducible.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What changed: v3.0.0's sole stated change is Composer 2.x support. On the surface this is tooling, not application behavior — but for a PHP package it is a dependency-resolution and CI-surface change, and it is shipped as a major version bump, which is the strongest available signal that the maintainer considers it breaking.

Architecture fit: Neutral. Composer compatibility sits below the package's runtime contract; it changes how the package is installed and resolved, not how it behaves inside a Laravel application. However, Composer 2 support almost always travels with a composer.json constraint rewrite (composer-plugin-api, composer/installers, php, and framework version floors). Those constraints are architectural: they determine which Laravel and PHP versions your estate can still install this package on.

Integration feasibility: High in isolation — composer update on a Composer 2.2+ codebase with a modern Laravel version should be uneventful. The risk is entirely in the exception paths: pinned Composer 1 build agents, legacy Laravel majors, and any project relying on Composer 1-only plugins (notably hirak/prestissimo and older composer/installers v1 trees) that will now fail to resolve alongside this package.

Technical risk (medium, concentrated):

  • Silent floor raising. A Composer 2 requirement typically implies PHP ≥ 7.2.5 and often drags a minimum Laravel major. Services on EOL PHP/Laravel cannot take v3.0.0 at all, and a ^2.0 || ^3.0 constraint would let Composer pick v3.0.0 on an environment that then fails at install time rather than at runtime — a noisier, later failure.
  • CI/CD and image drift. Hosted CI images, Dockerfiles, and internal base images pinned to Composer 1 are the most likely first breakage. This is an infrastructure ticket, not a code ticket, but it blocks the upgrade.
  • Plugin/API surface. If the package ships a Composer plugin or installer, Composer 2's plugin API is not backward compatible; confirm whether that surface exists at all before scoping.
  • Unknown breaking-change scope. "Adds support for Composer 2.x" may be the headline for a release that also drops Composer 1, drops old PHP/Laravel, and removes deprecated APIs. The release note as given does not say. This is the single most important open question.

Key questions for the maintainer (or the changelog, before we commit):

  1. Does v3.0.0 drop Composer 1, or support both (composer-plugin-api: ^1.1 || ^2.0)? This determines whether it is breaking or additive.
  2. What are the new php and illuminate/* minimums, and which Laravel majors are in scope?
  3. Are there runtime API changes bundled in, beyond dependency metadata? Is there a UPGRADE.md / changelog diff between v2.x and v3.0.0?
  4. Is v2.x still receiving security fixes, and for how long? (Determines whether staying put is a viable holding position.)
  5. Does the package register a Composer plugin or custom installer that needed porting?

Integration Approach

Stack fit: Good, conditional on the estate already being on Composer 2. Composer 2 has been the default since Composer 2.0 GA in late 2020 and is what every current Laravel skeleton and CI template ships, so for a greenfield or recently-provisioned estate this release is a housekeeping upgrade. For an estate with long-lived services on older Laravel majors, v3.0.0 is effectively not available until those services are moved — plan for a split-version fleet.

Migration path:

  1. Inventory first, don't upgrade first. Grep composer.lock and CI configs across all consuming services for composer/composer version and composer-plugin-api. Produce a two-column list: services on Composer 2 (fast lane) and services on Composer 1 (blocked).
  2. Pull the real constraint diff. Compare composer.json between v2.x and v3.0.0. Treat the require block as the authoritative changelog until a written one exists.
  3. Pilot on one low-blast-radius service in the fast lane. Upgrade the package alone, run the full test suite, and specifically exercise any package-provided service providers, config publishing, and Artisan commands — those are what a dependency bump can quietly disturb.
  4. Then broaden across the fast lane, one PR per service, so failures are attributable.
  5. Treat the blocked lane as separate roadmap work — either the Laravel/PHP upgrade that unblocks them, or a documented decision to leave them pinned to v2.x.

Compatibility: Pin ^3.0 only where the Composer 2 + PHP + Laravel floors are provably met. Elsewhere, hold an explicit ^2.0 constraint rather than an open >= — an unbounded constraint on a package that just raised its floors is how you get a build that fails months later for no apparent reason.

Sequencing: Composer/CI tooling upgrade → package v3.0.0 → dependent services. Do not invert this; upgrading the package first on a Composer 1 agent produces a confusing resolution error that reads like a package defect.

Operational Impact

Maintenance: Net positive if the estate is on Composer 2 — the package stops being the thing that pins you to a deprecated dependency manager. Composer 1 has been unsupported by the Composer project for years, so a package tracking Composer 2 is signalling it intends to stay maintained. That is a good mid-term bet on the dependency.

Support: Low ongoing support load expected; this change should be adopted once and then forgotten. Real support risk is version sprawl — a fleet where some services are on v2.x and some on v3.0.0 means two answer sets for every future question. Set a target date by which the blocked lane is either upgraded or formally frozen, or sprawl becomes permanent.

Scaling: Essentially unaffected. Composer resolves at build time; runtime throughput, queue behavior, and query patterns are untouched. Scaling considerations are confined to build minutes and CI image maintenance, which are noise at normal fleet sizes.

Failure modes to watch:

  • Late resolution failure. An open constraint resolves v3.0.0 on an incompatible environment; the build breaks on an unrelated PR and gets misattributed to that PR's author. Mitigation: explicit ^3.0 pins plus a CI image that declares its Composer version.
  • Plugin conflict. A Composer 1-only plugin in the same project makes the whole dependency graph unresolvable, not just this package. Mitigation: audit Composer plugins during inventory, not during the upgrade PR.
  • Bundled breaking changes. If v3.0.0 also removed deprecated runtime APIs, the failure appears in application code, not install output, and lands on whoever runs the upgrade. Mitigation: read the diff before the pilot, not after.
  • Orphaned lane. Services left on v2.x stop receiving fixes silently. Mitigation: track them as an explicit, dated backlog item with an owner.

Ramp-up: Half a day for a TPM to complete the inventory and constraint diff; one to two engineer-days for the pilot and fast-lane rollout. The blocked lane is the only unbounded item, and its cost is really the cost of the underlying Laravel/PHP upgrade, not of this package. Recommendation: adopt in the Composer 2 lane now; do not schedule the upgrade until questions 1–3 are answered, since a major bump on a one-line changelog is exactly the case where the changelog is understating the change.

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.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox