rikudou/installer
rikudou/installer provides installation tooling for Laravel and PHP projects, helping streamline setup and package integration through Composer. It is aimed at developers who want a straightforward way to automate common installation steps and reduce manual configuration.
The minimum viable setup for a Laravel project:
# Composer 2.x requires explicit opt-in for plugins
composer global require rikudou/installer
If you need it project-scoped (recommended for reproducibility in CI):
composer require --dev rikudou/installer
Then, in composer.json, allow the plugin to execute (Composer 2.2+ security default):
{
"config": {
"allow-plugins": {
"rikudou/installer": true
}
}
}
Re-run composer install (or composer update <package>) so the plugin activates.
Where to look first: The repository README and the package's composer.json — the archive status means the documentation has not been maintained, so the source (typically src/Plugin.php and any Installer/ subfolder) is the authoritative reference. Grep the package for PluginInterface, EventSubscriberInterface, and event names (post-package-install, post-package-update) to see which lifecycle hooks it wires into and what install-rule files (commonly installer.yaml, rikudou.yaml, or similar in a package root) it looks for.
First use case: installing a third-party package that ships its own install manifest (e.g. config files to copy into config/, service providers to register, service aliases to add). When you composer require that package, the plugin fires after install and applies the manifest automatically — no manual copy/registration step.
If you are evaluating it for a new Laravel codebase: don't. Laravel 5.5+ already has package discovery via extra.laravel.providers and extra.laravel.aliases in a package's composer.json, and php artisan vendor:publish handles config/asset copying. This plugin is only worth considering if you have a legacy vendor that ships an installer manifest, or you maintain packages where you can't rely on Laravel's discovery.
Legacy package provider registration. For an older package that requires manual provider registration in config/app.php, a manifest-based installer can add the provider entry automatically on post-package-install. Keep a hand-written backup of config/app.php in version control so you can diff what the plugin wrote.
Config file scaffolding. The typical pattern: your project requires a package, its manifest lists config_files: { 'publish/foo.php': 'config/foo.php' }, and the plugin copies the file only if the destination doesn't already exist (check the plugin source — behavior on existing files matters, especially for updates).
Wrapping it in a monorepo workflow. If you maintain multiple internal packages under packages/* with "type": "path", composer post-package-install events still fire, so the installer can scaffold each package's config into the host app during development. This is the most defensible use case in 2024/2025 — internal tooling where you control both sides.
Skipping install on specific packages. Look for an option like require's --no-scripts (scripts run before the plugin's hook, so this is coarse) or the plugin's own config key (commonly extra.rikudou.installer.ignore). Test on a throwaway project before relying on it.
Combining with your own post-install scripts. Since the plugin fires in the same event loop as composer scripts, avoid duplicating work. If you have post-install-cmd scripts that already run php artisan vendor:publish, disable the plugin's config-copy step for those packages or you'll get "file already exists" churn.
CI/CD integration. Because the package is archived, pin it by commit hash in composer.json ("rikudou/installer": "dev-main#abc1234") rather than a branch reference, and add config.allow-plugins to the repo's composer.json so CI doesn't accidentally block the plugin. Prefer a --no-plugins install in the dependencies stage of your pipeline and only allow the plugin in the build stage if you actually need it.
Using it with Docker builds. Composer plugins run during composer install inside the image. Ensure COMPOSER_ALLOW_PLUGINS=1 is set or the allow-plugins entry is present in the image's composer.json, otherwise the plugin silently won't run and you'll get packages that require the manifest but never applied it.
type: path rather than pulling from Packagist if it's load-bearing for your build.composer install succeeds, but the plugin never fires because it's not allowlisted. Check composer diagnose output — it warns about non-allowed plugins.extra.laravel.providers and ships a RikudouInstaller manifest, you may end up with the provider registered twice. Inspect bootstrap/providers.php (Laravel 11+) or config/app.php after install and remove the duplicate entry the plugin added.git diff after every composer update that touched a manifest-carrying package. Commit the plugin's edits as a separate, reviewable commit so behavior changes are auditable.composer update of a package that already had its config published. If the plugin overwrites, that's data loss — always back up config/*.php and config/app.php before updates in a package that uses this plugin.tests/ fixture that asserts the post-install output. That test is the only thing standing between you and a silent regression when Composer bumps its plugin API.composer install -vvv shows plugin event dispatch. If a manifest is being ignored, check: (a) the manifest filename and path root, (b) the package's type field (usually must not be metapackage), (c) whether the manifest references paths that don't exist in the installed package — most naive parsers fail silently on missing source files.extra.laravel), vendor:publish for config assets, and a post-create-project-cmd script for the rest. The plugin is only worth keeping for the specific case of a vendor package whose manifest you can't rewrite — and even then, patching that vendor package via composer patch (cweagans/composer-patches) or a private fork is usually the lower-risk option.How can I help you explore Laravel packages today?