PHPackages                             tapp/filament-form-builder - 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. tapp/filament-form-builder

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

tapp/filament-form-builder
==========================

User facing form builder using Filament components

v4.3.4(1mo ago)132.4k↓51.7%5[1 issues](https://github.com/TappNetwork/Filament-Form-Builder/issues)[3 PRs](https://github.com/TappNetwork/Filament-Form-Builder/pulls)1MITPHPPHP ^8.3CI passing

Since Aug 5Pushed 2w ago4 watchersCompare

[ Source](https://github.com/TappNetwork/Filament-Form-Builder)[ Packagist](https://packagist.org/packages/tapp/filament-form-builder)[ Docs](https://github.com/TappNetwork/filament-form-builder)[ GitHub Sponsors](https://github.com/TappNetwork)[ RSS](/packages/tapp-filament-form-builder/feed)WikiDiscussions 4.x Synced 2d ago

READMEChangelog (10)Dependencies (64)Versions (61)Used By (1)

Filament Forms
==============

[](#filament-forms)

[![Latest Version on Packagist](https://camo.githubusercontent.com/45323060936ab9211fe15aa18acb40fc07e558dfb74034b95fd9915f3292b7cc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f746170702f66696c616d656e742d666f726d2d6275696c6465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tapp/filament-form-builder)[![GitHub Tests Action Status](https://github.com/TappNetwork/Filament-Form-Builder/actions/workflows/run-tests.yml/badge.svg)](https://github.com/TappNetwork/Filament-Form-Builder/actions/workflows/run-tests.yml/badge.svg)[![GitHub Code Style Action Status](https://github.com/TappNetwork/Filament-Form-Builder/actions/workflows/fix-php-code-style-issues.yml/badge.svg)](https://github.com/TappNetwork/Filament-Form-Builder/actions/workflows/fix-php-code-style-issues.yml/badge.svg)[![Total Downloads](https://camo.githubusercontent.com/2768022aac645d879e60e8983f3c3a3a6bbe2211ae027e63234a47c45a6c4d88/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f746170702f66696c616d656e742d666f726d2d6275696c6465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tapp/filament-form-builder)

A Filament plugin and package that allows the creation of forms via the admin panel for collecting user data on the front end. Forms are composed of filament field components and support all Laravel validation rules. Form responses can be rendered on the front end or exported to .csv.

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

[](#requirements)

- PHP 8.2+
- Laravel 11.0+
- [Filament 4.x / 5.x](https://github.com/laravel-filament/filament)

Dependencies
------------

[](#dependencies)

- [maatwebsite/excel](https://github.com/SpartnerNL/Laravel-Excel)
- [spatie/eloquent-sortable](https://github.com/spatie/eloquent-sortable)

Version Compatibility
---------------------

[](#version-compatibility)

FilamentFilament Form BuilderDocumentation4.x/5.x4.xCurrent3.x1.x[Check the docs](https://github.com/TappNetwork/Filament-Form-Builder/tree/1.x)### Installing the Filament Forms Package

[](#installing-the-filament-forms-package)

Install the plugin via Composer:

This package is not yet on Packagist. Add the repository to your composer.json

```
{
"repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/TappNetwork/Filament-Form-Builder"
        }
    ],
}
```

```
composer require tapp/filament-form-builder:"^4.0"
```

You can publish the migrations with:

```
php artisan vendor:publish --tag="filament-form-builder-migrations"
```

Warning

If you are using multi-tenancy please see the "Multi-Tenancy Support" instructions below **before** publishing and running migrations.

You can run the migrations with:

```
php artisan migrate
```

#### Optional: Publish the package's views, translations, and config

[](#optional-publish-the-packages-views-translations-and-config)

You can publish the view file with:

```
php artisan vendor:publish --tag="filament-form-builder-views"
```

You can publish the config file with:

```
php artisan vendor:publish --tag="filament-form-builder-config"
```

### Adding the plugins to panels

[](#adding-the-plugins-to-panels)

The package provides three plugins for different panel types:

#### 1. Admin Panel Plugin (`FilamentFormBuilderPlugin`)

[](#1-admin-panel-plugin-filamentformbuilderplugin)

Add this plugin to your **admin panel** to manage forms, fields, and entries. This plugin registers the `FilamentFormResource` which provides CRUD operations for forms.

```
use Tapp\FilamentFormBuilder\FilamentFormBuilderPlugin;

// In app/Providers/Filament/AdminPanelProvider.php
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugins([
            FilamentFormBuilderPlugin::make(),
            //...
        ]);
}
```

#### 2. Guest Panel Plugin (`FilamentFormBuilderGuestPlugin`)

[](#2-guest-panel-plugin-filamentformbuilderguestplugin)

Add this plugin to your **guest panel** (for unauthenticated users) to display forms and form entries. This plugin registers the `ShowForm` and `ShowEntry` pages for public access.

```
use Tapp\FilamentFormBuilder\FilamentFormBuilderGuestPlugin;

// In app/Providers/Filament/GuestPanelProvider.php
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugins([
            FilamentFormBuilderGuestPlugin::make(),
            //...
        ]);
}
```

#### 3. Frontend/App Panel Plugin (`FilamentFormBuilderFrontendPlugin`)

[](#3-frontendapp-panel-plugin-filamentformbuilderfrontendplugin)

Add this plugin to your **app/frontend panel** (for authenticated users) to display forms and form entries. This plugin registers the `ShowForm` and `ShowEntry` pages for authenticated access.

```
use Tapp\FilamentFormBuilder\FilamentFormBuilderFrontendPlugin;

// In app/Providers/Filament/AppPanelProvider.php
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugins([
            FilamentFormBuilderFrontendPlugin::make(),
            //...
        ]);
}
```

### Public Form Access

[](#public-form-access)

Forms can be accessed via the following routes (configured in `config/filament-form-builder.php`):

- **Form View**: `/forms/{form}` - Displays a form for submission
- **Entry View**: `/entries/{entry}` - Displays a submitted form entry

The routes automatically use the appropriate panel (guest or app) based on authentication status. Forms with `permit_guest_entries` enabled can be viewed by unauthenticated users in the guest panel, while authenticated users will be redirected to the app panel.

### Configuration

[](#configuration)

You can customize the package behavior by publishing and editing the config file:

```
php artisan vendor:publish --tag="filament-form-builder-config"
```

Key configuration options include:

- **Panel IDs**: Configure which panel IDs are used for guest and app panels (`guest-panel-id`, `app-panel-id`)
- **Login Route**: Set the login route for redirecting unauthenticated users (`login-route`)
- **Custom Page Classes**: Override the default `ShowForm` and `ShowEntry` pages for guest and app panels
- **Custom Middleware**: Override the default `SetFormPanel` middleware for panel context switching
- **Route URIs**: Customize the form and entry route paths (`filament-form-uri`, `filament-form-user-uri`)

See `config/filament-form-builder.php` for all available configuration options.

### Private entries

[](#private-entries)

You can restrict who can view or export form entries on a per-form basis. When **Private entries** is enabled for a form, the package uses your application’s policy to decide visibility.

#### App setup (required for private entries)

[](#app-setup-required-for-private-entries)

1. **Register a policy** for `Tapp\FilamentFormBuilder\Models\FilamentForm` (e.g. `FilamentFormPolicy`).
2. **Implement `viewEntries`** on that policy with this **exact method name** and signature. Put all your logic here (e.g. “Admin only”); no gate is required:

    ```
    // e.g. app/Policies/FilamentFormPolicy.php
    public function viewEntries(User $user, FilamentForm $form): bool
    {
        if (! (bool) $form->private_entries) {
            return true;
        }
        return $user->hasRole('Admin'); // or your own rules
    }
    ```

    The package calls `$user->can('viewEntries', $ownerRecord)` when:

    - Deciding whether to show the **Entries** relation manager for a form (edit page).
    - Deciding whether to show the **Export Selected** bulk action.

    If your policy does not define `viewEntries`, the package does not restrict the Entries tab or export (all users who can view the form see them).
3. **Entry-level visibility**: In your `FilamentFormUser` policy `view()` method, when the entry’s form has `private_entries`, delegate to the same policy so individual entry view links are restricted:

    ```
    if ($entry->filamentForm && (bool) $entry->filamentForm->private_entries) {
        return $user->can('viewEntries', $entry->filamentForm);
    }
    ```
4. **Form edit UI**: The **Private entries** toggle on the form is disabled when the form is private and the current user fails `viewEntries`, so they cannot turn the setting off to gain access.

No gate and no extended relation manager are required—the package’s relation manager and resource use the policy when `viewEntries` is present.

### Configuring Tailwind:

[](#configuring-tailwind)

Add this to your tailwind.config.js content section:

```
    content: [
        ...
        "./vendor/tapp/**/*.blade.php",
    ],

```

### Disabling Redirect

[](#disabling-redirect)

You can disable the redirect when including the Form/Show component inside of another component by passing the 'blockRedirect' prop as follows

```
    @livewire('tapp.filament-form-builder.livewire.filament-form.show', ['form' => $test->form, 'blockRedirect' => true])

```

Multi-Tenancy Support
---------------------

[](#multi-tenancy-support)

This plugin includes comprehensive support for multi-tenancy, allowing you to scope forms, form fields, and entries to specific tenants (e.g., Teams, Organizations, Companies).

### ⚠️ Important: Configure Before Migration

[](#️-important-configure-before-migration)

**You MUST enable and configure tenancy BEFORE running migrations!** The migrations check the tenancy configuration to determine whether to add tenant columns to the database tables. Enabling tenancy after running migrations will require manual database modifications.

### Configuration

[](#configuration-1)

Update your `config/filament-form-builder.php` configuration file:

```
'tenancy' => [
    // Enable tenancy support
    'enabled' => true,

    // The Tenant model class
    'model' => \App\Models\Team::class,

    // Optional: Override the tenant relationship name
    // (defaults to snake_case of tenant model class name: Team -> 'team')
    'relationship_name' => null,

    // Optional: Override the tenant foreign key column name
    // (defaults to relationship_name + '_id': 'team' -> 'team_id')
    'column' => null,
],
```

### Setup Steps

[](#setup-steps)

1. **Configure tenancy** in `config/filament-form-builder.php` (set `enabled` to `true` and specify your tenant model)
2. **Publish migrations**: `php artisan vendor:publish --tag="filament-form-builder-migrations"`
3. **Run migrations**: `php artisan migrate`
4. **Configure your Filament Panel** with tenancy:

```
use Filament\Panel;
use App\Models\Team;
use Tapp\FilamentFormBuilder\FilamentFormBuilderPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->tenant(Team::class)
        ->plugins([
            FilamentFormBuilderPlugin::make(),
        ]);
}
```

### How It Works

[](#how-it-works)

When tenancy is enabled:

- **Automatic Scoping**: All queries within Filament panels are automatically scoped to the current tenant
- **URL Structure**: Forms are accessed via tenant-specific URLs: `/admin/{tenant-slug}/filament-forms`
- **Data Isolation**: Each tenant can only access their own forms, fields, and entries
- **Cascade Deletion**: Deleting a tenant automatically removes all associated form data

### Disabling Tenancy

[](#disabling-tenancy)

To disable tenancy, set `enabled` to `false` in your configuration:

```
'tenancy' => [
    'enabled' => false,
    'model' => null,
],
```

Events
------

[](#events)

### Livewire

[](#livewire)

The FilamentForm/Show component emits an 'entrySaved' event when a form entry is saved. You can handle this event in a parent component to as follows.

```
class ParentComponent extends Component
{
    protected $listeners = ['entrySaved'];

    public function entrySaved(FilamentFormUser $survey)
    {
        // custom logic you would like to add to form entry saving logic
    }
}

```

### Laravel

[](#laravel)

The component also emits a Laravel event that you can listen to in your event service provider

```
// In your EventServiceProvider.php
protected $listen = [
    \Tapp\FilamentFormBuilder\Events\EntrySaved::class => [
        \App\Listeners\HandleFormSubmission::class,
    ],
];

// Create a listener class
namespace App\Listeners;

use Tapp\FilamentFormBuilder\Events\EntrySaved;

class HandleFormSubmission
{
    public function handle(EntrySaved $event): void
    {
        // Access the form entry
        $entry = $event->entry;

        // Perform actions with the form data
        // For example, send notifications, update other records, etc.
    }
}
```

###  Health Score

57

—

FairBetter than 97% of packages

Maintenance93

Actively maintained with recent releases

Popularity31

Limited adoption so far

Community22

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor3

3 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~19 days

Total

37

Last Release

15d ago

Major Versions

1.4.0 → v4.0.42025-10-29

v1.55 → v4.0.52025-11-13

1.x-dev → v4.1.02026-01-23

PHP version history (2 changes)v1.2PHP ^8.2

v4.0.6PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7796074?v=4)[Scott Grayson](/maintainers/scottgrayson)[@scottgrayson](https://github.com/scottgrayson)

---

Top Contributors

[![swilla](https://avatars.githubusercontent.com/u/304159?v=4)](https://github.com/swilla "swilla (50 commits)")[![scottgrayson](https://avatars.githubusercontent.com/u/7796074?v=4)](https://github.com/scottgrayson "scottgrayson (40 commits)")[![johnwesely](https://avatars.githubusercontent.com/u/29612767?v=4)](https://github.com/johnwesely "johnwesely (39 commits)")[![andreia](https://avatars.githubusercontent.com/u/38911?v=4)](https://github.com/andreia "andreia (35 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (14 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (7 commits)")

---

Tags

laravelFormsfilamentsurveyform-buildertapp networkcall to action

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/tapp-filament-form-builder/health.svg)

```
[![Health](https://phpackages.com/badges/tapp-filament-form-builder/health.svg)](https://phpackages.com/packages/tapp-filament-form-builder)
```

###  Alternatives

[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k3](/packages/stephenjude-filament-jetstream)[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

329530.5k29](/packages/codewithdennis-filament-select-tree)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

274327.0k8](/packages/croustibat-filament-jobs-monitor)[stephenjude/filament-debugger

About

104162.2k2](/packages/stephenjude-filament-debugger)[tapp/filament-google-autocomplete-field

Filament plugin that provides a Google Autocomplete field

30136.4k](/packages/tapp-filament-google-autocomplete-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
