Spiggle Dynamic Fields plugin screenshot
Dark mode ready
Multilingual support
Supports v5.x

Spiggle Dynamic Fields

Community

A plug-and-play Filament package that attaches custom fields and validation rules to any Eloquent model.

Tags: Form Field Forms Form Editor Field Infolist Entry Table Column Developer Tool
Supported versions:
5.x
Spiggle avatar Author: Spiggle

Package health

Beta

Automated checks of this plugin's Composer package

73 / 100
Security 52
Maintenance 100
Ecosystem 100
15 checks
Third-party plugin. This is built by the community, not the Filament team. Filament does not review, endorse, or vet the security of plugins outside the filament/ namespace. Review the source and install at your own risk. Found malware or an unresolved security issue the author won't address? Report it .
Powered by Plumb Last scanned 5 hours ago

Documentation

License: MIT PHP Laravel Filament

Custom fields for Laravel + Filament — no migrations per field, no redeploy.

Create and manage fields from the admin panel. Values live in indexed EAV tables and appear on forms, table columns, and infolists automatically.

Create a custom field in the Filament Field Manager

Watch the demo on YouTube →

Package spiggle/dynamic-fields-core v2.0.0
License MIT (Community Edition)
GitHub skillbobby/Spiggle-Dynamic-Fields-Core
Docs Product site & guide

#Why use Dynamic Fields?

  • No-code field creation — define labels, types, validation, and options in the Filament panel
  • No migration per field — add fields without schema changes or redeploys
  • Filament-native — maps to standard Filament form inputs, table columns, and infolist entries
  • EAV storage — indexed custom_fields, custom_field_options, and custom_field_values tables (not a bloated JSON column)
  • Built-in validation — Laravel rules (required, email, min/max, regex, etc.) configured in the UI
  • Table columns included — toggleable, searchable columns for every saved field
  • Model-agnostic — attach fields to Users, Products, or any Eloquent model
  • Export / import — move field definitions between environments as JSON
  • Pro-ready — registry hooks let the licensed add-on register advanced field drivers

#Community Edition field types

These 12 types are included free in Core:

text email phone
url number textarea
select radio date
datetime boolean toggle

#Pro field types & features

Need file uploads, rich text, tags, or conditional logic? Upgrade to Dynamic Fields Pro — a separate licensed add-on that installs alongside Core.

Pro-only
File uploads Spatie Media Library collections
Tags Colored badge tags
Multi-select Searchable multi-choice fields
Rich textarea WYSIWYG editor (RichEditor)
Conditional visibility Show/hide fields with visible_when rules
Clone Duplicate field definitions in one click
License management Activate and manage your Pro license in Filament

Get Pro license

Business / unlimited-site licensing: Get Business license.


#Requirements

  • PHP 8.3+
  • Laravel 13
  • Filament ^5

#Installation

#1. Require the package

composer require spiggle/dynamic-fields-core

#2. Publish config & migrations, then migrate

php artisan vendor:publish --tag=dynamic-fields-config
php artisan vendor:publish --tag=dynamic-fields-migrations
php artisan migrate

#3. Register the Filament plugin

In your panel provider (e.g. app/Providers/Filament/AdminPanelProvider.php):

use Spiggle\DynamicFields\Filament\DynamicFieldsPlugin;

$panel->plugin(DynamicFieldsPlugin::make());

This adds the Custom Fields resource under System in your panel navigation.

#4. Add HasCustomFields to your model

use Spiggle\DynamicFields\Traits\HasCustomFields;

class User extends Authenticatable
{
    use HasCustomFields;
}

Include custom_fields in your model's $fillable (or use syncCustomFields() in a page hook) so Filament can persist nested field state.

#5. Wire CustomFieldMapper in your Filament resource

Form:

use Filament\Schemas\Components\Section;
use Spiggle\DynamicFields\Facades\CustomFieldMapper;

Section::make('Custom Profile Data')
    ->schema(CustomFieldMapper::makeFormFields(User::class));

Table (eager-load to avoid N+1):

User::query()->withCustomFields()
// ...
...CustomFieldMapper::makeTableColumns(User::class)

Infolist:

CustomFieldMapper::makeInfolistEntries(User::class)

#Quick start

  1. Sign in to your Filament panel.
  2. Go to System → Custom Fields.
  3. Click New Custom Field, choose a target model, set label + type, add validation rules.
  4. Save — the field appears on that model's resource form and is available as a table column.

Seed 23 standard User profile fields:

php artisan dynamic-fields:seed-user-fields

#Artisan commands

Command Description
dynamic-fields:seed-user-fields Seed standard User profile fields
dynamic-fields:export Export definitions to JSON
dynamic-fields:import {path} Import definitions from JSON
dynamic-fields:verify Health-check tables, mapper, and persistence

#Related


#License

MIT — see LICENSE. Community Edition is free and open source. Pro is a separate commercial add-on.