ezsystems/ezpublish-legacy-installer
Composer installer for eZ Publish Legacy that automatically places legacy extensions and packages into the correct eZ Publish directory structure, simplifying dependency management and deployment for older eZ Publish projects.
What this package is. ezsystems/ezpublish-legacy-installer is a Composer plugin (type: composer-plugin) that registers a custom installer so that packages of type: ezpublish-legacy-extension land in the legacy eZ Publish extension directory rather than vendor/. It is not a Laravel package: there is no service provider, config publish, facade, or framework coupling. Any Laravel relevance is incidental — it exists to keep a Composer build working for teams whose stack still includes eZ Publish Legacy (4.x/5.x).
Architecture fit.
composer.json across both is not advisable.Integration feasibility. High, and materially improved by this release. Composer 2 support was the single blocking constraint for any team that had modernized its Composer toolchain; without it, the legacy tree pinned the whole build to Composer 1. Two caveats to confirm on the diff:
composer-plugin-api ^2.0 (or ^1.1 || ^2.0) in extra. If the constraint was replaced rather than widened, v2.1.0 is effectively a Composer-1 drop, and mixed estates must pin v2.0.x for Composer 1 roots. A minor version bump doing this is a real (if intentional) break for some consumers.allow-plugins. Composer 2.2+ blocks plugins unless allowlisted. Any project upgrading will also need config.allow-plugins entries, or installs will be skipped with a warning. This is an operational step, not a package defect, but it is the most common way this upgrade will appear to "fail."Technical risk. Low in code surface (the plugin is small and event-driven), high in ecosystem context:
Key questions.
composer-plugin-api constraint or replace it? Determines whether Composer 1 roots must pin.composer update risk orphaning previously installed extensions?Stack fit. PHP 7.x is the realistic floor for a Composer 2 toolchain; the host eZ Publish Legacy application is the binding constraint, not this plugin. Treat the legacy tree as a bounded context: its own composer.json, its own lockfile, its own CI job. Laravel and legacy roots should not share a lockfile.
Migration path (per legacy root).
composer-plugin packages and all Composer scripts/patchers in the legacy root; confirm which declare Composer 2 support.config.allow-plugins entries for every required plugin, including ezsystems/ezpublish-legacy-installer.ezsystems/ezpublish-legacy-installer:^2.1; run composer update in a scratch clone with a warm cache.ezpublish-legacy-extension packages; diff the resulting extension/ tree against the Composer 1 baseline.Compatibility. Confirm the composer-plugin-api constraint (see question 1). Check composer/installers coexistence if both are present, since overlapping installer priorities are the usual cause of extensions landing in vendor/ instead of extension/. Plugin event ordering changed subtly in Composer 2 — the post-autoload-dump/install lifecycle is fine, but anything hooking pre-package-install should be smoke-tested.
Sequencing. Inventory → allowlist config → toolchain bump in CI → package bump → path verification → developer machine rollout → remove Composer 1 from the legacy build path. Do not combine the Composer binary bump with unrelated dependency updates in the same change; the failure signature (plugins silently skipped) is otherwise hard to attribute. Keep v2.0.x pinned in any root that must stay on Composer 1.
Maintenance. Low ongoing effort for the plugin itself; effectively zero if the legacy tree is in maintenance-only mode. The real cost is the EOL host application: unscheduled work when a PHP runtime, base image, or CI runner drops support. Budget for a maintained fork rather than upstream responsiveness.
Support. Upstream is community-maintained around an EOL product; expect slow review on future PRs and no security guarantee. Internal ownership should be explicit — one named maintainer with commit rights to a vendored patch, or an accepted-risk note in the register.
Scaling. Negligible. This is a build-time installer; it does not touch request-path performance. The only scale dimension is CI: Composer 2 is materially faster and more memory-efficient than 1.x, so this upgrade is a small net win for large legacy dependency graphs.
Failure modes.
allow-plugins → extensions not installed, build appears to succeed, deploy fails at runtime. Add a post-install assertion that the expected extension directories exist.vendor/ rather than extension/; application boots with missing modules.composer update across the major toolchain may leave stale extension directories; prefer clean installs in CI.Ramp-up. Low for anyone familiar with Composer plugins; the concepts (installer paths, plugin allowlisting) are standard. The learning curve is domain-specific, not technical: engineers need to understand that eZ Publish Legacy has a non-PSR-4, non-vendor/ layout and that this plugin is the adapter. That knowledge is scarce and mostly tribal — document the Composer root layout and the allowlist rationale before the person who set it up moves on.
Recommendation. Adopt v2.1.0 for the legacy root only. It removes the last common blocker to a Composer 2 toolchain and is worth taking, but scope it as an isolated maintenance change with path verification, not as a modernization milestone. Confirm the plugin-API constraint before rollout, and keep a v2.0.x pin documented for any Composer 1 consumer.
How can I help you explore Laravel packages today?