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.
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):
^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.Key questions for the maintainer (or the changelog, before we commit):
composer-plugin-api: ^1.1 || ^2.0)? This determines whether it is breaking or additive.php and illuminate/* minimums, and which Laravel majors are in scope?UPGRADE.md / changelog diff between v2.x and v3.0.0?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:
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).composer.json between v2.x and v3.0.0. Treat the require block as the authoritative changelog until a written one exists.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.
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:
^3.0 pins plus a CI image that declares its Composer version.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.
How can I help you explore Laravel packages today?