eckinox/installer-plugin
Composer plugin that installs eckinox-metapackage packages by replicating a package’s replicate/ directory into your project, merging folders and overwriting same-named files. Supports custom handler classes to control behavior for new and existing files.
.env.example, phpunit.xml, webpack.mix.js) into internal metapackages to ensure consistency across all Laravel projects. Reduces "works on my machine" issues by eliminating manual setup.composer install, cutting onboarding time by 20–40% for new hires or open-source contributors.docker-compose.ci.yml, homestead.json) as metapackages, enabling zero-config environment switching via Composer commands.app/Console/Kernel.php → app/Console/CommandScheduler.php).Look elsewhere if:
laravel/envoy or git merge for complex conflicts.vendor:publish suffices for your needs (e.g., publishing config files). This plugin is for non-publishable files (e.g., scripts, Docker configs).storage/ permissions).Adopt if:
tailwind.config.js across projects).vendor:publish is insufficient for your use case (e.g., replicating non-config files like Dockerfile or Makefile).For Executives:
"This plugin lets us automate Laravel project setup—like a ‘starter kit’—directly via Composer. Instead of developers manually copying .env files or Docker configs, we bundle them in reusable packages. This cuts onboarding time by 30% and ensures every project starts with the same, secure baseline. It’s low-risk (MIT-licensed) and integrates with our existing Composer workflows, so no new tools are needed. For example, we could create a ‘Company Template’ metapackage that all new projects inherit from, reducing errors and speeding up development."
For Engineering: *"The plugin extends Composer to replicate files from metapackages into our project root. Key benefits for Laravel:
app/Console/Kernel.php during upgrades).tailwind.config.js when upgrading a dependency).composer.json scripts to trigger artisan config:clear or cache:clear post-install.
Tradeoffs:config/ or resources/. Mitigate with handlers or by restricting to non-conflicting files (e.g., Dockerfile, README.md).
Ideal for: Internal tools, project templates, or environments where scaffolding is repetitive. Not for core Laravel files (use vendor:publish instead)."*For Developers: *"Think of this as Composer for files. Instead of:
cp -r ~/templates/.env.example ./ # Manual and error-prone
We define a metapackage in composer.json:
{
"require": {
"company/template-metapackage": "1.0.0"
}
}
And boom—all your .env, docker-compose.yml, and scripts are installed automatically. Handlers let you add logic, like:
// Rename a deprecated file during updates
public function postFileCreationCallback(string $projectFilename) {
if (str_contains($projectFilename, 'old-script.php')) {
rename($projectFilename, str_replace('old-', '', $projectFilename));
}
}
Pro tip: Use this for non-Laravel files (e.g., Docker, CI configs) and pair with vendor:publish for Laravel configs."*
How can I help you explore Laravel packages today?