cakephp/plugin-installer
Composer installer for CakePHP plugins that automatically places packages into the app's plugins directory. It simplifies plugin dependency management and removes manual copying, helping CakePHP projects install and organize plugins consistently.
Architecture fit. cakephp/plugin-installer is a Composer installer plugin, not a runtime library. It registers a custom package type (cakephp-plugin) and redirects package installation into CakePHP's plugins/ directory instead of vendor/. This places it strictly in the dependency-management tooling layer — a layer Laravel shares (Composer), but the domain semantics (CakePHP plugin conventions, path resolution, bootstrap expectations) do not map to Laravel modules, packages, or service providers. Direct architectural fit for a Laravel application is effectively zero unless the team is running or migrating a CakePHP codebase alongside Laravel.
Integration feasibility. Two viable angles:
Composer\Plugin\PluginInterface + custom InstallerInterface usage. composer/installers is the more standard, better-maintained choice for that purpose.Technical risk.
NOASSERTION — legal must confirm actual terms before any dependency inclusion; treat as a hard gate.allow-plugins opt-in, which is a governance and security decision.Key questions.
NOASSERTION license?composer/installers with a custom type satisfy the same need with better maintenance and community coverage?allow-plugins policy, and can it be scoped per-repository rather than globally?Stack fit. Composer is shared infrastructure between the two ecosystems, so the package can be installed in a Laravel-adjacent composer.json without breaking anything — but it will be inert unless a dependency declares "type": "cakephp-plugin". It contributes nothing to the Laravel runtime (no service provider, no config merge, no middleware). Position it as build-time tooling only, and only for legacy-scoped repositories.
Migration path.
cakephp-plugin-typed dependencies leak into the main Laravel application's composer.json.composer install where possible; assert plugin paths via a CI smoke test.plugins/ directory once the last CakePHP plugin is decommissioned; remove allow-plugins entries in the same change.Compatibility. Verify: PHP constraint against the org's supported runtime matrix; Composer 2.2+ allow-plugins behavior (including non-interactive CI installs); interaction with composer config vendor-dir, installer-paths, and monorepo/path-repository setups. Test in a clean CI container, not a developer machine with a warm Composer cache.
Sequencing. (a) License/legal clearance → (b) security review of install-time code → (c) 1-day timeboxed spike in a throwaway branch against a real or synthetic CakePHP plugin → (d) go/no-go with explicit exit criteria → (e) if no, evaluate composer/installers or an internal 100-line installer as the reference pattern.
Maintenance. Low code surface, stable problem domain, but very low upstream activity proxies to a bus-factor risk. Pin a specific version, avoid floating constraints, and record the rationale for the pin. Budget a periodic review (quarterly) to check Composer compatibility.
Support. Community-only, no SLA, no vendor. If it breaks during a Composer upgrade, the team owns the fix. Confirm the team can read and modify the installer's ~5 classes before adopting; if not, do not take the dependency.
Scaling. Runtime impact is nil — it only affects install/update. The scaling concern is organizational: every repository needing it must declare allow-plugins, and that config must be templated and audited. Broad proliferation of Composer plugins across many repos increases supply-chain surface and slows clean-room builds.
Failure modes.
allow-plugins entry → plugin silently doesn't install, dependency lands in vendor/, autoload breaks at runtime with a confusing error.vendor-dir or installer-paths is customized.InstallerInterface usage.plugins/ and vendor/, producing duplicate class definitions.Ramp-up. A Composer-literate engineer can understand the plugin in under a day; the learning cost is not the code but the ecosystem conventions (CakePHP plugin naming, bootstrap discovery). For a Laravel-only team with no CakePHP surface, ramp-up is effectively irrelevant because the package should not be adopted. For teams using it as an installer template, budget 2–3 days to build and test an internal equivalent.
How can I help you explore Laravel packages today?