Skip to main content
This walkthrough creates acme/summary inside an application that already has FLEX and a Filament panel. Run the first command from the application directory containing artisan and composer.json. Replace acme with your vendor name before distributing it. For a private application extension, keep using your applicable FLEX grant. Before distributing a package or reusable kit, confirm its licensing scope. Generating a starter does not grant rights to redistribute FLEX itself.
1

Generate the family

The parent directory must exist. The destination must be new.
You now have a field, column, entry, provider, views, shared CSS and build script. The command does not install dependencies or change your application’s Composer configuration. To inspect the plan first, append --dry-run --json.
2

Build the package

Use the FLEX installation already present in the application. This avoids requiring a second Composer installation merely to run the starter’s build.
If your Composer vendor directory is different, set FLEX_FIELDS_ROOT to the installed FLEX package directory. Build before Composer discovery boots your new provider. The resulting manifest references the complete resources/dist/<release> directory.
3

Install the local Composer package

Add a path repository in the application’s Composer configuration, then require the package.
Composer discovers SummaryServiceProvider. Keep your application’s existing FLEX package repository and license access configuration. The local development constraint is not a release version for a distributed package.Keep the main FLEX plugin enabled in the panel that will use your extension. If it is already enabled, no panel change is needed. Otherwise, add it to the panel’s existing plugins in AdminPanelProvider:
The generated Summary family does not need its own ->plugin() call. Its Laravel service provider registers its definitions with FLEX. For an application-local provider that is not installed through Composer, register that provider in bootstrap/providers.php instead; do not register the same provider twice.
4

Add the field

Add this component to the form schema of your resource or Livewire form:
This is the real FLEX input inside your field. Its state, validation and assets remain owned by the child. You can change its supported fluent options without copying its view.
5

Store the value and show it elsewhere

The generated field stores ['text' => 'Example']. Add a JSON attribute and an Eloquent array cast to the model used by your form:
Import Illuminate\Support\Facades\Schema and Illuminate\Database\Schema\Blueprint in that migration, and run your normal migration workflow.
Use the matching surface in a table or infolist:

Confirm the result

Enter a summary, submit the form and reopen the record. The same value should appear in the field, table and infolist. The column and entry use shared display CSS without loading the field’s interactive JavaScript. Two fields on the same page must keep independent values and consumer identities.

Understand the package

Learn which generated files to change and which build outputs to distribute.

Configure an existing child

Add relationships, queries and callback configuration through trusted PHP.
Last modified on October 17, 2026