cocouvi / xn-orchestrator
Installs and configures Laravel packages from a community-driven catalog
Fund package maintenance!
Requires
- php: ^8.3
- composer/semver: ^3.4
- illuminate/contracts: ^10.0||^11.0||^12.0||^13.0
- spatie/laravel-package-tools: ^1.16
- symfony/process: ^7.0||^8.0
- symfony/yaml: ^7.0||^8.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^11.0.0||^10.0.0||^9.0.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- spatie/laravel-ray: ^1.35
This package is auto-updated.
Last update: 2026-08-26 18:05:40 UTC
README
Install and configure Laravel packages from a community-driven catalog directly from the CLI.
Browse categories, search packages, build an installation cart, resolve dependencies automatically, check Laravel/PHP compatibility, then install everything with a recap of each command.
Features
- Interactive installer — browse by category or search by name/tags, accumulate packages in a cart across selections
- YAML-driven catalog — one file per package, easy to read and contribute; no PHP required to add entries
- Dependency resolution — missing
depends_onpackages are offered before installation,conflicts_withblocks incompatible combinations, circular dependencies are detected - Compatibility checks — packages are tagged
⚠ incompatiblewhen they do not support your current Laravel or PHP version (or hidden entirely via config), with an explicit confirmation before forcing the install - Dry run & rollback — preview every command without executing it (
--dry-run); a failing step stops the run instead of leaving a half-installed state - Install logging — installations are recorded in a dedicated log channel for auditing what was run and when
Installation
You can install the package via composer:
composer require cocouvi/xn-orchestrator --dev
Usage
Start the interactive installer:
php artisan x:install
Preview the full plan without executing anything:
php artisan x:install --dry-run
The main menu lets you:
- Browse the catalog — pick a category, multi-select packages
- Search packages — find packages by composer name or tag keywords
- View cart — review and remove selected packages
- Finish and install — resolve dependencies, display the ordered installation plan, confirm, execute
Before running, missing dependencies are offered automatically, conflicting packages block the installation, and incompatible packages require explicit confirmation.
The catalog
The bundled catalog ships 24 essential packages across 15 categories:
| Category | Packages |
|---|---|
| Admin Panels | filament/filament |
| Authentication | laravel/sanctum, laravel/breeze, laravel/jetstream, laravel/socialite |
| Authorization | spatie/laravel-permission |
| Backups | spatie/laravel-backup |
| Billing | laravel/cashier |
| Debugging | laravel/telescope, barryvdh/laravel-debugbar, laravel/pulse |
| Development | barryvdh/laravel-ide-helper, reliese/laravel, mrpunyapal/laravel-auditor |
| Exports | maatwebsite/excel, barryvdh/laravel-dompdf |
| Frontend | livewire/livewire |
| Media | spatie/laravel-medialibrary |
| Queues | laravel/horizon |
| Real-Time | laravel/reverb |
| Scaffolding | devalade/crudify |
| Search | laravel/scout |
| Testing | pestphp/pest, laravel/dusk |
Overriding the catalog
Publish the catalog files into your application to customize them or hide entries you never use:
php artisan vendor:publish --tag=package-catalog
Then point the package to your own directory (see Configuration).
Contributing packages
Adding a package to the catalog is a single YAML file. Schema:
name: spatie/laravel-permission # composer package name (required) category: Authorization # category shown in the menu (required) tags: [roles, permissions, acl] # search keywords install: # commands executed in order (required) - 'composer require spatie/laravel-permission' - 'php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"' - 'php artisan migrate' supported: laravel: ['^11.0', '^12.0', '^13.0'] # version constraints checked against app()->version() php: '^8.3' # constraint checked against PHP_VERSION depends_on: [] # composer names installed first conflicts_with: [] # composer names that cannot coexist
Validate your entry before submitting a PR:
php artisan x:catalog:validate
# or validate a specific directory
php artisan x:catalog:validate resources/catalog
Invalid or malformed files are skipped with a warning at load time, so one broken entry never breaks the whole catalog — but they will be reported by the validator.
Configuration
Publish the config file:
php artisan vendor:publish --tag="xn-orchestrator-config"
return [ // Directory holding the YAML catalog. Null = the package's own copy. 'catalog_path' => null, // true = incompatible packages are hidden from menus. // false (default) = shown with an "⚠ incompatible" marker + confirmation. 'compatibility' => [ 'hide_incompatible' => false, ], // Dedicated log channel for installation runs. 'logging' => [ 'channel' => 'package-orchestrator', ], ];
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.