{"id":29571057,"url":"https://github.com/quix-labs/filament-extendable","last_synced_at":"2026-05-21T05:02:26.902Z","repository":{"id":301731523,"uuid":"1010146652","full_name":"quix-labs/filament-extendable","owner":"quix-labs","description":"Extend Filament's form, table and infolist builders dynamically using a modular and composable system.","archived":false,"fork":false,"pushed_at":"2025-06-28T13:12:46.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-28T13:49:00.744Z","etag":null,"topics":["extendable","filamentphp","laravel","modular"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quix-labs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"alancolant"}},"created_at":"2025-06-28T12:55:44.000Z","updated_at":"2025-06-28T13:17:02.000Z","dependencies_parsed_at":"2025-06-28T13:49:04.100Z","dependency_job_id":"0e26195c-36ff-466c-833b-9118c3939711","html_url":"https://github.com/quix-labs/filament-extendable","commit_stats":null,"previous_names":["quix-labs/filament-extendable"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/quix-labs/filament-extendable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quix-labs%2Ffilament-extendable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quix-labs%2Ffilament-extendable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quix-labs%2Ffilament-extendable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quix-labs%2Ffilament-extendable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quix-labs","download_url":"https://codeload.github.com/quix-labs/filament-extendable/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quix-labs%2Ffilament-extendable/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265883799,"owners_count":23843802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extendable","filamentphp","laravel","modular"],"created_at":"2025-07-19T03:40:54.902Z","updated_at":"2026-05-21T05:02:21.868Z","avatar_url":"https://github.com/quix-labs.png","language":"PHP","funding_links":["https://github.com/sponsors/alancolant"],"categories":[],"sub_categories":[],"readme":"# 🧩 Filament Extendable\r\n\r\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/quix-labs/filament-extendable.svg?style=flat-square)](https://packagist.org/packages/quix-labs/filament-extendable)\r\n[![GitHub Tests Action Status](https://img.shields.io/github/actions/workflow/status/quix-labs/filament-extendable/run-tests.yml?branch=main\u0026label=tests\u0026style=flat-square)](https://github.com/quix-labs/filament-extendable/actions?query=workflow%3Arun-tests+branch%3Amain)\r\n[![Total Downloads](https://img.shields.io/packagist/dt/quix-labs/filament-extendable.svg?style=flat-square)](https://packagist.org/packages/quix-labs/filament-extendable)\r\n\r\n**Filament Extendable** is a powerful extension toolkit for [FilamentPHP](https://filamentphp.com/), enabling highly\r\ncomposable and dynamic customization of tables, forms, and infolists — all without touching core logic.\r\n\r\n## 🚩 Important Notice\r\n\r\n\u003e This library is under active development.\r\n\u003e APIs and features may evolve.\r\n\u003e Contributions and feedback are highly appreciated.\r\n\r\n## Features\r\n\r\n* Dynamic registration of modifiers for **forms**, **tables**, and **infolists**\r\n* Insert components **before** or **after** existing ones\r\n* Remove components by key\r\n* Full compatibility with `filament:make-*` commands\r\n* Minimal interference with native Filament lifecycle\r\n\r\n## Requirements\r\n\r\n- PHP `^8.2`\r\n- Laravel `^11.x || ^12.x`\r\n- Filament `^4.0`\r\n\r\n## 📦 Installation\r\n\r\n```bash\r\ncomposer require quix-labs/filament-extendable\r\n```\r\n\r\nIf needed, register the service provider (usually auto-discovered):\r\n\r\n```php\r\n// config/app.php\r\n'providers' =\u003e [\r\n    // ...\r\n    QuixLabs\\FilamentExtendable\\FilamentExtendableServiceProvider::class,\r\n],\r\n```\r\n\r\n## Usage\r\n\r\n### 1. Enable Extensibility in Your Resource\r\n\r\nWrap your resource schema and tables with the builders:\r\n\r\n```php\r\nuse QuixLabs\\FilamentExtendable\\Facades\\FilamentExtendable;\r\n\r\nclass UserResource extends Resource\r\n{\r\n    public static function form(Schema $schema): Schema\r\n    {\r\n        return FilamentExtendable::processSchema($schema, 'user-form');\r\n    }\r\n\r\n    public static function infolist(Schema $schema): Schema\r\n    {\r\n        return FilamentExtendable::processSchema($schema, 'user-infolist');\r\n    }\r\n\r\n    public static function table(Table $table): Table\r\n    {\r\n        return FilamentExtendable::processTable($table, 'user-table');\r\n    }\r\n}\r\n```\r\n\r\n### 2. Register Modifiers\r\n\r\nDefine dynamic modifiers in the `boot` function of your service provider:\r\n\r\n```php\r\nuse QuixLabs\\FilamentExtendable\\Builders\\TableBuilder;\r\nuse QuixLabs\\FilamentExtendable\\Builders\\SchemaBuilder;\r\nuse QuixLabs\\FilamentExtendable\\Facades\\FilamentExtendable;\r\nuse Filament\\Tables\\Columns\\TextColumn;\r\nuse Filament\\Forms\\Components\\TextInput;\r\nuse Filament\\Infolists\\Components\\TextEntry;\r\n\r\nclass FilamentExtendServiceProvider extends ServiceProvider\r\n{\r\n    public function boot(): void\r\n    {\r\n        // Insert a column after 'email' in the user table\r\n        FilamentExtendable::addTableModifier('user-table', function (TableBuilder $tableBuilder) {\r\n            $tableBuilder-\u003einsertAfter('email', [\r\n                TextColumn::make('lastname')-\u003elabel('Last Name'),\r\n            ]);\r\n        });\r\n\r\n        // Add a field to the user infolist\r\n        FilamentExtendable::addSchemaModifier('user-infolist', function (SchemaBuilder $schemaBuilder) {\r\n            $schemaBuilder-\u003epushComponents([\r\n                TextEntry::make('lastname')-\u003elabel('Last Name'),\r\n            ]);\r\n        });\r\n    }\r\n}\r\n```\r\n\r\n### 3. Schema Manipulations\r\n\r\n#### Insert component in schema\r\n\r\nPush components at root or inside nested groups via dot notation:\r\n\r\nControl insertion with:\r\n\r\n* `position` — `'before'` or `'after'` relative to a target key\r\n* `targetKey` — component key near which to insert\r\n* `targetGroup` — dot notation path to nested group\r\n\r\n```php\r\n// Append at root level (default behavior)\r\n$schemaBuilder-\u003epushComponents([\r\n    TextInput::make('nickname')-\u003elabel('Nickname'),\r\n]);\r\n\r\n// After 'bio' at root level\r\n$schemaBuilder-\u003epushComponents([\r\n    TextArea::make('additional_notes'),\r\n], position: InsertPosition::AFTER, targetKey: 'bio');\r\n\r\n// Before 'email' at root level\r\n$schemaBuilder-\u003epushComponents([\r\n    Select::make('preferred_contact_method'),\r\n], position: InsertPosition::BEFORE, targetKey: 'email');\r\n\r\n// After 'last_login' in 'tabs.activity' nested tab/section/group/...\r\n$schemaBuilder-\u003epushComponents([\r\n    TextEntry::make('last_login_ip')-\u003elabel('Last Login IP'),\r\n], position: InsertPosition::AFTER, targetKey: 'last_login', targetGroup: 'tabs.activity');\r\n```\r\n\r\n#### Delete Components from Schema\r\n\r\nYou can remove components from both the root level and nested groups using their keys.\r\n\r\n**If a specified key is not found, the operation is silently skipped (no error thrown).**\r\n\r\n```php\r\n$schemaBuilder-\u003eremoveComponents([\r\n    'email', // Removes 'email' field from the root level\r\n    'tabs.seo.meta_title', // Dot notation is supported for nested paths.\r\n]);\r\n```\r\n\r\n## Integration with Filament Artisan Commands\r\n\r\nFilament Extendable patches the following commands to scaffold extendable resources automatically:\r\n\r\n```bash\r\nphp artisan make:filament-resource User\r\nphp artisan make:filament-table UserTable\r\nphp artisan make:filament-form UserForm\r\nphp artisan make:filament-schema UserSchema\r\n```\r\n\r\nThey generate boilerplate code that includes calls to `FilamentExtendable::processSchema()`\r\nand `FilamentExtendable::processTable()`, ready\r\nfor modifier registration.\r\n\r\n\u003e 💡 This allows you to plug in modifiers immediately, without writing boilerplate.\r\n\r\n## Why this exists\r\n\r\nFilament is an exceptional tool, but there are scenarios where additional dynamic control is needed:\r\n\r\n* Modular package systems needing to inject UI logic\r\n* Enterprise-grade systems with conditional rendering needs\r\n* Reusable and declarative customizations across multiple resources\r\n\r\n**Filament Extendable** solves this with a non-intrusive, declarative API.\r\n\r\n## Changelog\r\n\r\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\r\n\r\n## 🤝 Contributing\r\n\r\nWe welcome your contributions!\r\n\r\n1. Fork the repository.\r\n2. Create a new branch for your feature or bugfix.\r\n3. Commit your changes.\r\n4. Push your branch.\r\n5. Create a pull request.\r\n\r\n## Credits\r\n\r\n- [COLANT Alan](https://github.com/alancolant)\r\n- [Uni-Deal](https://github.com/uni-deal)\r\n- [All Contributors](../../contributors)\r\n\r\n## License\r\n\r\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\r\n\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquix-labs%2Ffilament-extendable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquix-labs%2Ffilament-extendable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquix-labs%2Ffilament-extendable/lists"}