catchadmin/plugin-installer
Installer for CatchAdmin plugins that simplifies fetching, installing, and registering plugin packages in your Laravel admin application. It handles routine setup steps so you can add new modules and features without manual configuration or file copying.
Architecture fit. catchadmin/plugin-installer is a Composer plugin, not a conventional Laravel package. Its purpose is to hook Composer's install/update lifecycle and redirect packages of a CatchAdmin-specific type into the framework's plugins/ tree, likely with publish/migration side effects on install. That makes it non-composable with a generic Laravel application: it presumes the host app already speaks CatchAdmin's module contract — directory layout, manifest format, service-provider registration, and admin UI wiring. Fit is therefore binary. Inside an existing CatchAdmin deployment it is the intended mechanism; in any other Laravel codebase the fit is effectively zero. Adopting it is a framework selection decision, not a dependency selection decision, and should be scoped and approved as such.
Integration feasibility. Mechanically trivial — a composer require, an allow-plugins entry in composer.json (required since Composer 2.2), and the host app must already expose the expected plugin root and bootstrap path. The real gate is governance, not effort: allowing a third-party Composer plugin means granting arbitrary code execution inside the build process. That requires a security review, a pinning policy, and CI allow-listing before it can touch a production pipeline.
Technical risk. High, concentrated in four areas:
install/update. A zero-star, zero-dependent package from a single maintainer is not a vetted artifact; a compromised or abandoned release flows straight into the build.Key questions for the maintainer / due diligence.
type it intercepts, and what is the install path resolution rule (configurable or hardcoded)?composer-plugin-api constraint does it declare? Does it handle Composer 2.2+ allow-plugins interaction correctly?composer/installers or original code?Stack fit. Viable only where the target is PHP 8.x + Laravel 9/10/11 + Composer 2.2+ and the application is built on a CatchAdmin base. For any other Laravel product, treat this as out of scope and solve the underlying need with a standard mechanism instead.
Migration path. Three options, in descending order of preference:
composer/installers with a custom package type plus Laravel's package auto-discovery, or nwidart/laravel-modules for module scaffolding. This gets you the same "drop a package in, it lands in the right place" behavior from a maintained dependency with real adoption. Cost: a few days of scaffolding work.allow-plugins entry to an allow-list, and set a review date before any production exposure.Compatibility. Verify three things before sequencing: the allow-plugins entry is committed and enforced in CI (not just locally), the composer.lock pins an exact version with no floating constraints, and container builds are reproducible — plugin install side effects should be baked into the image at build time, never executed at container start or in a read-only filesystem.
Sequencing.
Maintenance. Assume zero upstream maintenance and plan accordingly. With no stars, no dependents, and a single maintainer, the plugin is effectively an orphan the moment you depend on it. Budget ~10–15% of one engineer's time for the first two quarters to keep the fork alive across CatchAdmin and Composer upgrades, then reassess. Do not let it become an untracked transitive dependency.
Support. There is no support channel with an SLA, minimal English-language documentation, and no issue corpus to search when something breaks. Internal ownership of the fork must be explicit and named, with a documented escalation path. If the team cannot absorb that, the package is not viable regardless of technical merit.
Scaling. The plugin's model — resolve plugins at Composer install time — does not scale well across a fleet. Every service instance must be built with plugins present, so plugin resolution becomes part of the image build contract. At a handful of plugins this is fine; at dozens, or with per-tenant plugin sets, you will need a plugin registry, version locking per environment, and a deterministic build artifact. Install-time side effects also fight horizontal scaling and blue/green deploys, since plugin state lives in the filesystem rather than in versioned config.
Failure modes to design against.
type installs to vendor/ instead of the plugin root, and the app starts with the plugin "installed" but unregistered. Add an assertion that expected plugin paths exist post-install.allow-plugins drift. Local installs succeed, CI fails (or vice versa) because the allow-list lives only in a developer's global Composer config. Commit it and enforce it.Ramp-up. The team needs working knowledge of Composer's plugin API and event lifecycle, plus CatchAdmin's plugin manifest and bootstrap conventions — realistically 1–2 weeks for one engineer to reach competence, longer if that engineer is also the fork owner. Factor this into the estimate: the package itself takes an hour to install and considerably longer to operate safely.
Bottom line. The package solves a real problem (deterministic module distribution for a Laravel admin framework) but arrives with no adoption, no maintenance signal, and a build-time code-execution footprint. It is defensible only inside an existing CatchAdmin estate, and only as an internally forked, pinned, CI-tested asset. For any other Laravel product, the correct TPM recommendation is to adopt a maintained equivalent and treat this repository as a reference implementation.
How can I help you explore Laravel packages today?