tapp/filament-form-builder
Filament plugin for building forms in the admin panel and collecting user data on the front end. Supports Filament field components, Laravel validation rules, response rendering, CSV export, sorting, and multi-tenancy-aware migrations.
Architecture fit
FilamentFormBuilderPlugin for admin, FilamentFormBuilderGuestPlugin for unauthenticated users, FilamentFormBuilderFrontendPlugin for authenticated users). This is a genuine architectural constraint: public form delivery is implemented as Filament pages, not as a controller/view layer. Teams that want forms embedded in an existing marketing site or SPA need to evaluate the configurable routes (/forms/{form}, /entries/{entry}) and the blockRedirect Livewire prop as the only embedding surface.spatie/eloquent-sortable), and entries (FilamentFormUser). Submissions are first-class Eloquent records with events — good for downstream automation, but it means your app inherits a schema you did not design.Integration feasibility
repositories entry in composer.json, a ^4.0 constraint against git tags, and acceptance that composer require/composer update semantics are weaker than a Packagist package (no metadata mirroring, no composer audit posture).maatwebsite/excel (pulls PhpSpreadsheet, which has its own PHP extension expectations — zip, gd, mbstring) and spatie/eloquent-sortable. Both are mainstream and well-maintained, which reduces risk considerably.EntrySaved event, Livewire entrySaved listener, overridable ShowForm/ShowEntry page classes, overridable SetFormPanel middleware, configurable route URIs, configurable options editor. That is a reasonable seam set for a package of this size../vendor/tapp/**/*.blade.php to the Tailwind content array or Filament's classes get purged. Minor, but a classic day-one support ticket.Technical risk
1.x line. Every Filament major will likely require a package major and a migration on your side.viewEntries(User $user, FilamentForm $form). If the method is missing, the package does not restrict entries or export. Fail-open authorization is a genuine security concern that needs a test, not a code review.locked flag exists precisely to prevent apples-to-oranges entries. It is opt-in per form and defaults to false, so integrity depends on operator discipline. The changelog history (v1.2 introducing locking, v1.21 adding a locked column) suggests this was retrofitted rather than designed in.Key questions
FilamentFormPolicy::viewEntries implementation and its test coverage? Without it, private entries are decorative.FilamentForm / FilamentFormUser models and the EntrySaved event?Stack fit
guest-panel-id / app-panel-id.Migration path
composer require tapp/filament-form-builder:"^4.0", and commit the lockfile. Pin an exact tag in production-critical environments rather than floating ^4.0.filament-form-builder-config and make the tenancy decision before publishing migrations. This is the irreversible step../vendor/tapp/**/*.blade.php to Tailwind content, rebuild.FilamentFormPolicy::viewEntries and the FilamentFormUser::view() delegation, with tests.EntrySaved listeners for notifications/CRM sync; use the Livewire entrySaved event only where a parent component genuinely needs it (note: it dispatches the entry id, not the model).Compatibility
maatwebsite/excel and PhpSpreadsheet bring extension requirements; verify against the production container image, not just local dev.content/@source semantics differ — confirm which your build uses before copying the README snippet verbatim.filament-form-uri, filament-form-user-uri) — check for collisions with existing /forms/{slug} or /entries/{id} routes early.Sequencing
Maintenance
Support
Scaling
maatwebsite/excel in-request will exhaust memory on large exports. Move to queued exports with notification-on-completion and stream downloads; consider disabling the bulk export action on large forms.Failure modes
viewEntries policy silently exposes private entries and enables export. Mitigate with an explicit test asserting a non-admin receives 403.Ramp-up
How can I help you explore Laravel packages today?