
April 12, 2026
7 min read
Table of Contents
By Kokil Thapa | Last reviewed: April 2026
Building admin panels from scratch is one of the most time-consuming parts of Laravel development — creating CRUD interfaces, data tables, form validation, file uploads, and role-based access takes days or weeks of repetitive work. Laravel Filament eliminates that problem entirely. It generates production-ready admin panels from your Eloquent models with minimal code. As a web developer in Nepal who has built admin panels for dozens of client projects, I consider Filament the single biggest productivity multiplier in the Laravel ecosystem today. This tutorial walks you through everything from installation to building a complete admin panel in 2026 AD (2083 BS).
Why Choose Filament Over Other Admin Panels?
| Feature | Filament 3 | Nova | Backpack | Custom Built |
|---|---|---|---|---|
| Price | Free (open source) | $199/site | Free core, paid add-ons | Development time |
| Stack | Livewire + Alpine.js | Vue.js + Inertia | jQuery + Bootstrap | Any |
| Learning curve | Low | Medium | Medium | High |
| Customizability | Excellent | Good | Good | Unlimited |
| CRUD generation | Artisan commands | CLI commands | CLI commands | Manual |
| Real-time features | Built-in (Livewire) | Limited | Limited | Manual |
| Community | Very active, growing fast | Established | Established | N/A |
Filament's key advantage: it is completely free, built on Livewire (so everything is PHP — no JavaScript build step), and generates beautiful, functional admin interfaces faster than any alternative.
How to Install Filament 3 in Laravel
Prerequisites
- Laravel 10, 11, or 12
- PHP 8.1+
- A database with at least a users table (standard Laravel migration)
Installation Steps
# Install Filament via Composer composer require filament/filament:"^3.0" # Install the admin panel plugin php artisan filament:install --panels # Create an admin user php artisan make:filament-userThe install command creates a AdminPanelProvider at app/Providers/Filament/AdminPanelProvider.php and sets up the admin panel at /admin. Visit yoursite.test/admin and log in with the user you just created.
That is it — you have a working admin panel with login, dashboard, and user management ready. Now let us add resources for your models.
How to Create CRUD Resources
Resources are the core of Filament — each resource represents a model and generates list, create, edit, and view pages automatically.
Step 1: Generate a Resource
# Generate a resource for the Blog model php artisan make:filament-resource Blog # Generate with all form fields auto-detected from the database php artisan make:filament-resource Blog --generateThis creates files in app/Filament/Resources/BlogResource/:
BlogResource.php— defines the form and tablePages/ListBlogs.php— list pagePages/CreateBlog.php— create pagePages/EditBlog.php— edit page
Step 2: Define Form Fields
use Filament\Forms; use Filament\Forms\Form; public static function form(Form $form): Form { return $form->schema([ Forms\Components\TextInput::make('name') ->required() ->maxLength(255), Forms\Components\TextInput::make('slug') ->required() ->unique(ignoreRecord: true), Forms\Components\Select::make('category_id') ->relationship('category', 'name') ->searchable() ->preload(), Forms\Components\RichEditor::make('description') ->required() ->columnSpanFull(), Forms\Components\FileUpload::make('image') ->image() ->directory('blogs') ->maxSize(2048), Forms\Components\Toggle::make('is_published') ->default(true), Forms\Components\DateTimePicker::make('published_at') ->default(now()), ]); }Step 3: Define Table Columns
use Filament\Tables; use Filament\Tables\Table; public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('category.name') ->sortable(), Tables\Columns\IconColumn::make('is_published') ->boolean(), Tables\Columns\TextColumn::make('published_at') ->dateTime() ->sortable(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('category') ->relationship('category', 'name'), Tables\Filters\TernaryFilter::make('is_published'), ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); }With just these two methods, you get a fully functional CRUD interface — searchable, sortable, filterable data table with create, edit, and delete functionality. No Blade templates, no JavaScript, no HTML to write.
Essential Filament Features
Relation Managers
Handle related models (HasMany, BelongsToMany) directly within a resource page:
# Generate a relation manager php artisan make:filament-relation-manager BlogResource comments content # This creates a panel within the Blog edit page # where you can manage all comments for that blogRelation managers embed a full CRUD table for the related model inside the parent resource's edit page — no navigating to separate pages.
Dashboard Widgets
Build custom dashboard widgets showing key metrics:
use Filament\Widgets\StatsOverviewWidget; use Filament\Widgets\StatsOverviewWidget\Stat; class BlogStatsWidget extends StatsOverviewWidget { protected function getStats(): array { return [ Stat::make('Total Blogs', Blog::count()) ->description('All published articles') ->color('success'), Stat::make('This Month', Blog::whereMonth('created_at', now()->month)->count()) ->description('Published this month'), Stat::make('Views Today', BlogView::whereDate('created_at', today())->sum('views')) ->description('Total page views'), ]; } }Global Search
Filament includes a powerful global search that searches across all resources. Enable it by adding $recordTitleAttribute to your resource:
protected static ?string $recordTitleAttribute = 'name'; // Users can press Ctrl+K to search across all resourcesNotifications
Built-in notification system for user feedback:
use Filament\Notifications\Notification; Notification::make() ->title('Article published successfully') ->success() ->send();Advanced Filament Patterns
Custom Pages
Add custom pages beyond standard CRUD:
php artisan make:filament-page Settings // Use this for settings pages, analytics dashboards, // import/export tools, or any custom functionalityAuthorization and Policies
Filament integrates with Laravel's authorization policies automatically:
// app/Policies/BlogPolicy.php public function viewAny(User $user): bool { return $user->hasRole('admin') || $user->hasRole('editor'); } public function delete(User $user, Blog $blog): bool { return $user->hasRole('admin'); } // Filament automatically hides buttons and restricts access // based on your policy methodsThis works seamlessly with packages like Spatie Permission for multi-tenant SaaS applications.
Soft Deletes Support
// In your table method, add soft delete actions: ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), Tables\Actions\ForceDeleteAction::make(), Tables\Actions\RestoreAction::make(), ]) ->filters([ Tables\Filters\TrashedFilter::make(), ])Real-World Use Cases for Filament in Nepal Projects
Based on projects I have built and maintained, here are common Filament applications:
- CMS admin panels — manage blogs, pages, services, portfolios with media uploads and SEO fields
- Ecommerce backends — product management, order processing, inventory tracking, coupon management
- School management systems — student records, attendance, fee management, grade reporting
- HR and payroll — employee records, leave management, salary processing with the Nepal salary calculator logic built in
- Booking systems — appointment scheduling, hotel reservations, event ticketing
- Client portals — project tracking, invoice management, document sharing
For any Laravel project that needs an admin interface, Filament saves 40–60% of development time compared to building from scratch.
Filament vs Building Custom Admin Panels
| Scenario | Use Filament | Build Custom |
|---|---|---|
| Standard CRUD operations | Always | Never |
| Data tables with search/filter/sort | Always | Rarely |
| File and image management | Always | Only for unique requirements |
| Highly custom UI requirements | Possible with customization | When Filament's design does not fit |
| Complex multi-step workflows | Possible with custom pages | When workflow is very unique |
| Public-facing interfaces | Not recommended | Yes — Filament is for admin use |
Getting Started — Your Action Plan
- Install Filament on a fresh or existing Laravel project
- Generate a resource for your most-used model using
--generate - Customize the form and table — add fields, filters, and actions specific to your needs
- Add relation managers for related models (comments, tags, categories)
- Build dashboard widgets showing key business metrics
- Read the official docs at filamentphp.com — they are comprehensive and example-rich
- Follow Laravel best practices — clean models, proper relationships, and service patterns make Filament resources cleaner
Filament has become the default admin panel choice in the Laravel community. Its Livewire foundation means everything stays in PHP — perfect for Laravel developers who want powerful admin interfaces without switching to JavaScript. Whether you are building a simple blog CMS or a complex enterprise application, Filament accelerates development significantly.

