Filament Plugin Scaffold Skill
Creates a complete Filament plugin skeleton (panel or standalone) following Filament's official plugin development guidelines.
Usage
When the user wants to create a Filament plugin, use the scaffold script:
python3 ${SKILL_DIR}/scripts/scaffold_filament_plugin.py <vendor/plugin-name> [options]Options
--with-resource <name>- Include a sample Resource--with-page- Include a sample custom Page--with-widget- Include a sample Widget--with-livewire- Include Livewire component structure--with-pest- Include PestPHP testing (default: yes)--no-pest- Exclude PestPHP testing
Examples
Basic Filament plugin
python3 ${SKILL_DIR}/scripts/scaffold_filament_plugin.py mwguerra/filament-blogPlugin with Resource
python3 ${SKILL_DIR}/scripts/scaffold_filament_plugin.py mwguerra/filament-blog --with-resource PostFull-featured plugin
python3 ${SKILL_DIR}/scripts/scaffold_filament_plugin.py mwguerra/filament-blog --with-resource Post --with-page --with-widgetWhat Gets Created
Directory Structure
packages/
└── vendor/
└── filament-plugin-name/
├── composer.json
├── README.md
├── LICENSE
├── .gitignore
├── phpunit.xml
├── config/
│ └── filament-plugin-name.php
├── database/
│ └── migrations/
│ └── .gitkeep
├── resources/
│ ├── lang/
│ │ └── en/
│ │ └── messages.php
│ └── views/
│ └── .gitkeep
├── src/
│ ├── PluginNamePlugin.php
│ ├── PluginNameServiceProvider.php
│ ├── Facades/
│ │ └── PluginName.php
│ ├── Resources/
│ │ └── .gitkeep (or generated Resource)
│ ├── Pages/
│ │ └── .gitkeep (or generated Page)
│ ├── Widgets/
│ │ └── .gitkeep (or generated Widget)
│ ├── Livewire/
│ │ └── .gitkeep
│ └── Commands/
│ └── .gitkeep
└── tests/
├── Pest.php
├── TestCase.php
├── Unit/
│ └── ExampleTest.php
└── Feature/
└── .gitkeepGenerated Files
- composer.json
- Filament ^3.3 (latest) - Livewire ^3.6 (latest) - Laravel ^11.0|^12.0 support - Orchestra Testbench ^10.0 (latest) - PestPHP ^3.8 (latest) - PSR-4 autoloading - Laravel auto-discovery
- Plugin Class (
PluginNamePlugin.php)
- Implements Filament\Contracts\Plugin - Resource, Page, Widget registration - Panel configuration hooks
- ServiceProvider
- View namespace registration - Translation loading - Migration publishing - Config merging
- Resource (if
--with-resource)
- Form schema - Table configuration - Resource pages (List, Create, Edit)
- Page (if
--with-page)
- Custom Filament page - View and logic
- Widget (if
--with-widget)
- Dashboard widget - Stats or chart example
- Testing Setup
- PestPHP configuration - Orchestra Testbench - Livewire testing utilities
After Running
- Install dependencies:
composer update - Register plugin in Panel Provider:
use Vendor\PluginName\PluginNamePlugin; public function panel(Panel $panel): Panel {return $panel ->plugins([PluginNamePlugin::make(),]);} - Publish assets (if needed):
php artisan vendor:publish --tag=filament-plugin-name-config php artisan vendor:publish --tag=filament-plugin-name-migrations - Run tests:
cd packages/vendor/filament-plugin-name composer install./vendor/bin/pest
Filament Plugin Best Practices
- Use the Plugin Contract: Always implement
Filament\Contracts\Plugin - Register in boot(): Register resources/pages/widgets in
boot()method - Support Panel Configuration: Allow users to customize via
->plugin() - Translations: Use translation keys for all user-facing strings
- Views: Use namespaced views (
filament-plugin-name::view-name) - Testing: Test Livewire components with
Livewire::test()