hexadog/laravel-theme-installer
Composer installer for Laravel theme packages that automatically places themes in the correct themes directory. Integrates with hexadog/laravel-themes, simplifying theme distribution and installation without manual publishing or path configuration.
Architecture fit
hexadog/laravel-theme-installer is a Composer plugin whose sole job is to relocate laravel-theme-type packages from vendor/ into a project-controlled themes directory (e.g., resources/themes or themes/). Architecturally it is a thin, event-driven hook on Composer's post-install-cmd / post-update-cmd lifecycle. It is a good fit only if the project (a) already standardizes on the hexadog/laravel-theme family for theme resolution, and (b) has a hard requirement that theme packages live outside vendor/ — typically to allow designer editing, per-environment overrides, or asset publishing via Blade/Vite. It is not a general-purpose theming solution and adds no value if themes are consumed as ordinary Laravel packages.
Integration feasibility
Integration is low-ceremony: a single composer require hexadog/laravel-theme-installer, an allow-plugins entry in composer.json (required since Composer 2.2), and a config block defining the target install path. The main friction is that Composer plugins execute arbitrary code at install time, so they traverse the same approval path as any build-time dependency. In enterprise settings this means a security review and a locked-down config.allow-plugins policy before it can land.
Technical risk
allow-plugins gate is a mitigation, not a substitute for pinning and review.allow-plugins prompt auto-declined in CI), themes silently remain in vendor/ and the application may still boot if a fallback path exists — a class of bug that only manifests on clean deploys.Key questions for the maintainer/vendor
hexadog/laravel-theme itself actively maintained, and what is the theme-resolution contract the installer depends on?Stack fit
Best fit is a Laravel 9–11 application already using Blade-based theming with hexadog/laravel-theme, running Composer 2.2+ on PHP 8.1+. Poor fit for teams using npm/Vite asset pipelines exclusively, or for applications that treat themes as ordinary Composer packages and have no need for a non-vendor install path. Evaluate as a paired dependency, not standalone.
Migration path
allow-plugins explicitly set to true in composer.json (avoid interactive prompts in CI).vendor/ in a single change to avoid split state.rm -rf vendor && composer install --no-dev) — this is where install-path bugs surface.Compatibility
Confirm the PHP/Laravel/Composer matrix against the project's build images, and confirm the plugin coexists with any other Composer plugins already installed (asset installers, patch plugins, etc.). Check that the allow-plugins policy in CI and in developer tooling is consistent — divergence here produces "works on my machine" installs.
Sequencing Treat this as a low-risk, reversible dependency change: proof-of-concept in a sandbox app → CI/build-pipeline validation → staging with a full clean deploy → production. Do not bundle it with a broader theming refactor; isolate it so failures are attributable.
Maintenance
Ongoing maintenance is negligible in steady state but non-zero in risk: single-maintainer projects require the team to track upstream releases and be prepared to fork. Budget a periodic review (quarterly) of plugin version, Composer version, and upstream commit activity. Pin the version in composer.json and let Renovate/Dependabot surface updates rather than floating.
Support
No commercial support or SLA. Internal ownership must be assigned — realistically the platform/DevOps team, since the failure mode is build-pipeline, not application runtime. Document the allow-plugins requirement prominently; it is the single most common onboarding papercut.
Scaling
The plugin runs at install time, so cost scales with build frequency, not request volume — effectively free at runtime. The scaling concern is organizational: every build image, container layer, and CI runner must carry the allow-plugins configuration and writable theme path. Container builds must ensure the theme directory is writable during composer install and that themes are included in the deploy artifact rather than regenerated per pod.
Failure modes
composer install blocked by an unapproved plugin prompt.vendor/ instead of the configured path; app boots but renders unstyled or falls back to a default theme.Ramp-up
Developer ramp-up is hours, not days: the concept is one sentence ("it moves theme packages out of vendor/"), and the only non-obvious step is allow-plugins. Document three things in the onboarding runbook: the plugin approval policy, the configured theme path, and the clean-deploy verification command. Given the small footprint and reversible nature, this is a reasonable adoption for teams already inside the hexadog theming ecosystem — but it should be gated on confirming active upstream maintenance and Composer compatibility, and treated as a knowingly low-maturity dependency rather than a strategic foundation.
How can I help you explore Laravel packages today?