Laravel Package Scaffold Skill
Creates a complete Laravel package skeleton with proper structure and all necessary files.
Usage
When the user wants to create a Laravel package, use the scaffold script:
python3 ${SKILL_DIR}/scripts/scaffold_laravel_package.py <vendor/package-name> [--with-pest] [--with-facade] [--with-config] [--with-command]
Examples
Basic package
python3 ${SKILL_DIR}/scripts/scaffold_laravel_package.py mwguerra/my-package
Package with testing
python3 ${SKILL_DIR}/scripts/scaffold_laravel_package.py mwguerra/my-package --with-pest
Full-featured package
python3 ${SKILL_DIR}/scripts/scaffold_laravel_package.py mwguerra/my-package --with-pest --with-facade --with-config --with-command
What Gets Created
Directory Structure
packages/ └── vendor/ └── package-name/ ├── composer.json ├── README.md ├── LICENSE ├── .gitignore ├── config/ │ └── package-name.php ├── src/ │ ├── PackageNameServiceProvider.php │ ├── PackageName.php (main class) │ ├── Facades/ │ │ └── PackageName.php │ └── Commands/ │ └── InstallCommand.php └── tests/ (if --with-pest) ├── Pest.php ├── TestCase.php └── Unit/ └── ExampleTest.php
Generated Files
composer.json
-
PSR-4 autoloading for src/ and tests/
-
Laravel auto-discovery configuration
-
PHP ^8.2 requirement
-
Laravel ^11.0|^12.0 support (latest)
-
Orchestra Testbench ^10.0 (latest)
-
PestPHP ^3.8 (latest)
ServiceProvider
-
Config merging and publishing
-
Command registration
-
View/translation loading (prepared)
Facade (optional)
-
Accessor for the main service class
Config (optional)
-
Default configuration file
-
Publishable via artisan
Commands (optional)
-
Install command for post-install setup
Tests (optional)
-
PestPHP setup with Orchestra Testbench
-
Example test verifying environment
Project Integration
The script automatically updates the project's composer.json :
-
Adds path repository pointing to packages/vendor/package-name
-
Adds package to require block as @dev
-
Enables symlink for development
After Running
Install dependencies:
composer update
Verify installation:
php artisan package-name:install
Publish config (if applicable):
php artisan vendor:publish --tag=package-name-config
Run tests (if testing was added):
cd packages/vendor/package-name composer install ./vendor/bin/pest
Naming Conventions
-
Package name: kebab-case (e.g., my-awesome-package )
-
PHP namespace: PascalCase (e.g., MyAwesomePackage )
-
Config key: kebab-case (e.g., my-awesome-package )
-
Commands: kebab-case:action (e.g., my-awesome-package:install )
Laravel package integration notes
-
Configure package discovery via composer.json extra.laravel.providers (and optional aliases ).
-
In the ServiceProvider:
-
register() : mergeConfigFrom() and container bindings.
-
boot() : publishes() / publishesMigrations() plus loadRoutesFrom() , loadViewsFrom() , loadTranslationsFrom() .
-
Tag publish groups (package-config , package-migrations , package-views , public ).
-
Optionally contribute to about , and hook into optimize / reload .