PHPackages                             timo-de-winter/filament-modifiable-plugins - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. timo-de-winter/filament-modifiable-plugins

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

timo-de-winter/filament-modifiable-plugins
==========================================

A helper package for when creating packages that provide filament resources.

v3.1.1(2mo ago)12.7k↓50%1[2 PRs](https://github.com/timo-de-winter/filament-modifiable-plugins/pulls)1MITPHPPHP ^8.3CI passing

Since Apr 19Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/timo-de-winter/filament-modifiable-plugins)[ Packagist](https://packagist.org/packages/timo-de-winter/filament-modifiable-plugins)[ Docs](https://github.com/timo-de-winter/filament-modifiable-plugins)[ GitHub Sponsors](https://github.com/timo-de-winter)[ RSS](/packages/timo-de-winter-filament-modifiable-plugins/feed)WikiDiscussions v3.x Synced 1mo ago

READMEChangelog (10)Dependencies (9)Versions (17)Used By (1)

Filament Modifiable Plugins
===========================

[](#filament-modifiable-plugins)

[![Latest Version on Packagist](https://camo.githubusercontent.com/b0ccca50ccb2d28c930aea7ae1640a93e0061ad779da8a0b296e0d04b5115974/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f74696d6f2d64652d77696e7465722f66696c616d656e742d6d6f6469666961626c652d706c7567696e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/timo-de-winter/filament-modifiable-plugins)[![GitHub Tests Action Status](https://camo.githubusercontent.com/01947d44d603f3989b372f94a550cb6b563e0ed14bbf7731438733281eab6790/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f74696d6f2d64652d77696e7465722f66696c616d656e742d6d6f6469666961626c652d706c7567696e732f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/timo-de-winter/filament-modifiable-plugins/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/a6a6433ac32a350cdac92ff54261416e9ef5df18f00e7ea9f57d2aec1184b582/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f74696d6f2d64652d77696e7465722f66696c616d656e742d6d6f6469666961626c652d706c7567696e732f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/timo-de-winter/filament-modifiable-plugins/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/634a424b18740f8519b75ce242992fcfe74ae0d2c3861a9b7cf0b4f262c7fa5d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f74696d6f2d64652d77696e7465722f66696c616d656e742d6d6f6469666961626c652d706c7567696e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/timo-de-winter/filament-modifiable-plugins)

A powerful package for creating highly customizable Filament plugins. This package empowers plugin developers to provide end-users with extensive customization options for resources, including navigation, forms, tables, clusters, and more.

Why Use This Package?
---------------------

[](#why-use-this-package)

When building Filament plugins that provide resources or pages, you often want to give developers using your plugin the flexibility to customize various aspects such as:

- Navigation properties (labels, icons, groups, sorting)
- Page features (titles, slugs, schemas/forms)
- Table components (columns, filters, actions)
- Resource organization (clusters, parent items)
- Tenant ownership relationships
- And much more!

This package provides a clean, fluent API to make all of these customizations possible without requiring plugin users to override entire resource classes.

Requirements
------------

[](#requirements)

- PHP 8.3+
- Laravel 11.x or 12.x
- Filament 4.1+ or 5.0+

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require timo-de-winter/filament-modifiable-plugins
```

No additional configuration or publishing is required. The package will auto-register via Laravel's package discovery.

Table of Contents
-----------------

[](#table-of-contents)

- [For Plugin Users](#for-plugin-users)
    - [Basic Customization](#basic-customization)
    - [Navigation Customization](#navigation-customization)
    - [Page Customization](#page-customization)
    - [Form/Schema Customization](#formschema-customization)
    - [Table Customization](#table-customization)
    - [Targeting Specific Resources](#targeting-specific-resources)
- [For Plugin Developers](#for-plugin-developers)
    - [Setting Up Your Plugin](#setting-up-your-plugin)
    - [Implementing Modifiable Resources](#implementing-modifiable-resources)
    - [Best Practices](#best-practices)

---

For Plugin Users
----------------

[](#for-plugin-users)

If you've installed a Filament plugin that uses this package, you can easily customize the plugin's resources without modifying the plugin's source code.

### Basic Customization

[](#basic-customization)

Here's a comprehensive example showing all available customization options:

```
use Filament\Panel;
use YourVendor\YourPlugin\YourPlugin;
use YourVendor\YourPlugin\Resources\UserResource;
use App\Filament\Clusters\Settings;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            YourPlugin::make()
                // Navigation customization
                ->navigationGroup('Settings', UserResource::class)
                ->label('System Users', UserResource::class)
                ->sort(10, UserResource::class)
                ->icon('heroicon-o-users', UserResource::class)
                ->activeIcon('heroicon-s-users', UserResource::class)
                ->badge('New', UserResource::class)
                ->badgeColor('success', UserResource::class)
                ->badgeTooltip('Recently added users', UserResource::class)

                // Cluster and organization
                ->cluster(Settings::class, UserResource::class)
                ->parentItem('user-management', UserResource::class)

                // Page customization
                ->title('Manage Users', UserResource::class)
                ->slug('system-users', UserResource::class)

                // Multi-tenancy
                ->tenantOwnershipRelationshipName('organization', UserResource::class)
        ]);
}
```

### Navigation Customization

[](#navigation-customization)

Control how resources appear in your Filament panel's navigation:

```
YourPlugin::make()
    ->navigationGroup('Settings', UserResource::class)
    ->label('Users', UserResource::class)
    ->sort(5, UserResource::class)
    ->icon('heroicon-o-users', UserResource::class)
    ->activeIcon('heroicon-s-users', UserResource::class)
    ->badge('12', UserResource::class)
    ->badgeColor('warning', UserResource::class)
```

All navigation methods support closures for dynamic values:

```
YourPlugin::make()
    ->badge(fn () => User::count(), UserResource::class)
    ->badgeColor(fn () => User::count() > 100 ? 'danger' : 'success', UserResource::class)
```

### Page Customization

[](#page-customization)

Customize page titles, slugs, and organization:

```
YourPlugin::make()
    ->title('User Management', UserResource::class)
    ->slug('manage-users', UserResource::class)
    ->cluster(Settings::class, UserResource::class)
    ->parentItem('system', UserResource::class)
```

### Form/Schema Customization

[](#formschema-customization)

Customize the form schema used in your resource's create and edit pages:

```
use Filament\Schemas\Schema;
use Filament\Schemas\Components\TextInput;
use Filament\Schemas\Components\Select;

YourPlugin::make()
    ->schema(function (Schema $schema) {
        return $schema
            ->components([
                TextInput::make('name')
                    ->required()
                    ->maxLength(255),
                TextInput::make('email')
                    ->email()
                    ->required(),
                Select::make('role')
                    ->options([
                        'admin' => 'Administrator',
                        'user' => 'User',
                    ])
                    ->required(),
            ]);
    }, UserResource::class)
```

### Table Customization

[](#table-customization)

Customize table columns, filters, and actions:

```
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\DeleteAction;

YourPlugin::make()
    // Customize specific table elements
    ->columns([
        TextColumn::make('name')->searchable(),
        TextColumn::make('email')->searchable(),
        TextColumn::make('created_at')->dateTime(),
    ], UserResource::class)
    ->filters([
        SelectFilter::make('role')
            ->options([
                'admin' => 'Admin',
                'user' => 'User',
            ]),
    ], UserResource::class)
    ->recordActions([
        EditAction::make(),
        DeleteAction::make(),
    ], UserResource::class)
    ->toolbarActions([
        // Your toolbar/bulk actions here
    ], UserResource::class)
```

Alternatively, override the entire table configuration:

```
use Filament\Tables\Table;

YourPlugin::make()
    ->customTable(function (Table $table) {
        return $table
            ->columns([
                // Your columns
            ])
            ->filters([
                // Your filters
            ])
            ->recordActions([
                // Your actions
            ])
            ->toolbarActions([
                // Your toolbar actions
            ]);
    }, UserResource::class)
```

### Targeting Specific Resources

[](#targeting-specific-resources)

When a plugin provides multiple resources, you can target specific ones by passing the resource class as the second parameter:

```
use YourVendor\YourPlugin\Resources\UserResource;
use YourVendor\YourPlugin\Resources\RoleResource;

YourPlugin::make()
    // Customize UserResource
    ->navigationGroup('User Management', UserResource::class)
    ->icon('heroicon-o-users', UserResource::class)

    // Customize RoleResource
    ->navigationGroup('User Management', RoleResource::class)
    ->icon('heroicon-o-shield-check', RoleResource::class)

    // This applies to all resources without specific customization
    ->sort(10)
```

### Custom Relations and Pages

[](#custom-relations-and-pages)

Override the relations and pages for a resource:

```
use YourVendor\YourPlugin\Resources\UserResource\RelationManagers\RolesRelationManager;
use YourVendor\YourPlugin\Resources\UserResource\Pages;

YourPlugin::make()
    ->customRelations([
        RolesRelationManager::class,
        // Your custom relation managers
    ], UserResource::class)
    ->customPages([
        'index' => Pages\ListUsers::class,
        'create' => Pages\CreateUser::class,
        'edit' => Pages\EditUser::class,
        // Your custom pages
    ], UserResource::class)
```

---

For Plugin Developers
---------------------

[](#for-plugin-developers)

If you're developing a Filament plugin and want to make your resources customizable, follow these steps.

### Setting Up Your Plugin

[](#setting-up-your-plugin)

#### 1. Add the Trait to Your Plugin Class

[](#1-add-the-trait-to-your-plugin-class)

Add the `CanModifyResources` trait to your plugin class:

```
