# 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()`:

```php
$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

```bash
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](https://packstub.dev/docs/partisan/configuration) for registering providers and seeding the skeleton.
