Skip to content
← Blog

What Is Filament? A Guide to Laravel Admin Panels

Burak Berk Şama · · 5 min read · Software Development
What Is Filament? A Guide to Laravel Admin Panels

In short: Filament is an open-source admin panel framework for Laravel. Built on Livewire, Alpine.js and Tailwind CSS, it covers panel needs such as tables, forms, filters, authorisation and file uploads with ready-made components. It is a strong choice for content management on corporate sites, client portals and internal tools; for bespoke, customer-facing interfaces it is not the right tool on its own.

Over the past year I have shipped live projects on three major versions of Filament: v3 on a law firm website, v4 on the Sardur Engineering platform and v5 on a clinical psychologist's website. This article is my answer, from that experience, to "should I use Filament?"

What is Filament?

Filament is a family of packages for adding an admin panel to Laravel applications. It produces list, create, edit and delete screens (CRUD) for a database table in minutes — and you do it by writing PHP, with no separate JavaScript application.

Its core building blocks are:

  • Resources: the panel counterpart of an Eloquent model, defining its list, form and pages together.
  • Form components: text, select, date, rich text, markdown, file and image upload, tag input and more.
  • Tables: sorting, search, filters, bulk actions and per-column formatting.
  • Actions: one-click operations on a record, such as "notify the customer".
  • Widgets and pages: summary cards on the dashboard and custom settings pages.

What does a Filament resource look like?

The example below is simplified from the project management in this portfolio site (Filament v4 syntax):

public static function form(Schema $schema): Schema
{
    return $schema->components([
        Section::make('Details')->columns(2)->schema([
            TextInput::make('title')->label('Title')->required(),
            Select::make('category')
                ->label('Section')
                ->options(ProjectCategory::options())
                ->required(),
            TagsInput::make('stack')->label('Technologies'),
            FileUpload::make('gallery')
                ->label('Gallery')
                ->image()
                ->multiple()
                ->reorderable(),
        ]),
    ]);
}

These few lines produce a validated form, multi-image upload with drag-and-drop ordering, and tag input. Building the same screen by hand would take days.

When is Filament the right choice?

I chose Filament in these situations:

  1. When the client manages the content: service pages, blog, FAQs, settings. On corporate sites, freeing the company from depending on a developer is the most valuable outcome.
  2. When an internal tool is needed: customer records, maintenance logs, incoming messages. A handful of people use the panel; speed and consistency matter more than bespoke design.
  3. When time is tight: with CRUD, authorisation, uploads and search built in, design effort can go to the side customers see.

When is Filament not enough?

  • Branded, customer-facing interfaces: for the public face of a corporate site or the showcase of a client portal, custom design with Blade, Tailwind and Livewire where needed gives a better result. On the Sardur project the panel was built with Filament and the client portal with a custom interface.
  • Very complex, multi-step workflows: they can be built from panel components, but past a point a custom page is more readable.
  • When a separate SPA or mobile app is required: Filament is a server-side approach; its role in API-first architectures is limited.

One-click operations: Filament actions

On the Sardur Engineering project, after uploading post-cleaning photos and videos to a record, the owner can send the customer an update email with a single click. In Filament, operations like this are defined as an action. A simplified example showing the idea:

Action::make('notifyCustomer')
    ->label('Notify customer')
    ->icon('heroicon-o-envelope')
    ->requiresConfirmation()
    ->visible(fn (Record $record) => $record->media()->exists())
    ->action(function (Record $record) {
        Mail::to($record->customer->email)
            ->queue(new ServiceCompleted($record));

        Notification::make()->title('Email sent')->success()->send();
    });

Two decisions matter here: the button appears only once content has been added to the record, and sending is triggered by the person who did the work, not automatically.

Mind the version differences: v3, v4 and v5

Working across three versions, the most time-consuming part was reading the differences correctly:

  • v3 → v4: forms and infolists moved to a shared Schema structure. Schema $schema replaces Form $form, and layout components such as Section and Tabs moved under Filament\Schemas\Components. Table row actions are defined with recordActions().
  • v4 → v5: the core concepts carry over; reading the official upgrade guide and checking package compatibility before upgrading is usually enough.

Practical advice: start new projects on the latest stable version, and check the version of any example you find online before copying it.

Authorisation: who sees the panel?

Filament uses Laravel policies directly. Rules such as viewAny, update and delete in a model's policy automatically show or hide buttons and pages in the panel. Who may enter the panel at all is defined on the user model. The rule is simple: authorisation belongs in policies and the query layer, not in the interface.

Frequently asked questions

Is Filament free?

Yes. Filament is open source and free to use under the MIT licence. Community and commercial plugins are also available.

What is the difference between Filament and Laravel Nova?

Both are admin panel solutions for Laravel. Nova is a paid product from the Laravel team built on Vue; Filament is open source and built on Livewire, Alpine.js and Tailwind CSS.

Can you build a client portal with Filament?

Yes; Filament supports multiple panels, so a client-specific panel can be set up. If a branded experience is needed, designing the portal's visible face with Blade and Livewire gives a better result.

What do you need to know to learn Filament?

Laravel fundamentals — Eloquent models, relationships, validation and policies — are enough. Livewire knowledge helps when writing custom components but is not required to start.

Is upgrading from Filament v3 to v4 difficult?

The concepts stay the same, but code needs updating because the namespaces of form and layout components changed. The official upgrade guide and automated upgrade tooling make most of the work easier.

Laravel PHP Web Full-stack