Filament plugins
Filament's resource generator produces a whole cluster of files — the resource, its pages, a schema class, a table class. Partisan points all of it at your plugin's src/ directory, under your namespace.
Declare discovery paths with app_path()
Partisan remaps app_path() to your package's src/, so Filament's generators (and runtime discovery) follow along. In the panel provider your plugin registers via extra.laravel.providers, declare discovery paths with app_path():
$panel
->discoverResources(
in: app_path('Filament/Resources'),
for: 'Acme\\Widget\\Filament\\Resources',
)
->discoverPages(
in: app_path('Filament/Pages'),
for: 'Acme\\Widget\\Filament\\Pages',
);
Generate the resource
vendor/bin/partisan make:filament-resource Invoice --generate
This produces the complete resource under src/Filament/Resources with your namespace:
src/Filament/Resources/Invoices/
├── InvoiceResource.php
├── Pages/
│ ├── CreateInvoice.php
│ ├── EditInvoice.php
│ └── ListInvoices.php
├── Schemas/
│ └── InvoiceForm.php
└── Tables/
└── InvoicesTable.php
Every class carries namespace Acme\Widget\Filament\Resources\… — ready to ship in your plugin, no find-and-replace pass.
The rest of the Filament suite
The other Filament generators work the same way — make:filament-page, make:filament-widget, make:filament-relation-manager, and friends all land in src/Filament/… under your namespace.
Previewing your plugin
Testbench's Workbench gives you a demo app for manual testing. vendor/bin/partisan serve boots the skeleton with your plugin's providers registered, so you can open the panel and click through the resources you just generated. See Configuration for registering providers and seeding the skeleton.