A powerful admin panel framework for Laravel with Vue.js (Inertia.js) frontend. Build beautiful, reactive admin panels with minimal effort.
- Resources: Auto-generate CRUD interfaces from database tables
- Pages: Custom standalone pages with full control
- Clusters: Group related pages under a common navigation section
- API Generation: RESTful API endpoints with interactive API Tester
- Forms: Dynamic form builder with 30+ field types
- Tables: Feature-rich data tables with filtering, sorting, and bulk actions
- Infolists: Display record details in elegant layouts
- Actions: Customizable actions with modal support
- Navigation: Auto-generated navigation with groups and badges
- Multi-Tenancy: Single-database or multi-database SaaS architecture
composer require laravilt/panelThe package will automatically register its service provider.
Publish the config file:
php artisan vendor:publish --tag="laravilt-panel-config"php artisan laravilt:panel adminThis creates a new admin panel at app/Providers/Laravilt/AdminPanelProvider.php.
php artisan laravilt:resource adminFollow the interactive prompts to:
- Select a database table
- Choose which columns to include
- Enable API endpoints (optional)
- Enable API Tester interface (optional)
php artisan laravilt:page admin DashboardCreates a standalone page with both PHP controller and Vue component.
php artisan laravilt:cluster admin Settings --icon=SettingsCreates a cluster to group related pages:
// app/Laravilt/Admin/Clusters/Settings.php
class Settings extends Cluster
{
protected static ?string $navigationIcon = 'Settings';
protected static ?string $navigationLabel = 'Settings';
}Assign pages to a cluster:
class ProfilePage extends Page
{
protected static ?string $cluster = Settings::class;
}Resources can automatically generate RESTful API endpoints.
Simply define an api() method on your resource - the API will be auto-detected:
class ProductResource extends Resource
{
public static function api(ApiResource $api): ApiResource
{
return ProductApi::configure($api);
}
}class ProductApi
{
public static function configure(ApiResource $api): ApiResource
{
return $api
->columns([
ApiColumn::make('id')->type('integer')->sortable(),
ApiColumn::make('name')->searchable()->sortable(),
ApiColumn::make('price')->type('decimal'),
ApiColumn::make('created_at')->type('datetime'),
])
->useAPITester(); // Enable interactive API tester UI
}
}Enable the API Tester UI to allow interactive API testing directly from the panel:
$api->useAPITester(); // Enable
$api->useAPITester(false); // Disable (default)$api
->columns([...]) // Define API columns
->endpoint('/api/products') // Custom endpoint
->perPage(25) // Items per page
->authenticated() // Require authentication
->list(enabled: true) // Enable/disable list operation
->show(enabled: true) // Enable/disable show operation
->create(enabled: true) // Enable/disable create operation
->update(enabled: true) // Enable/disable update operation
->delete(enabled: true) // Enable/disable delete operation
->useAPITester(); // Enable API Tester interfaceLaravilt Panel supports two tenancy modes for building SaaS applications:
All tenants share the same database with tenant_id scoping. Uses path-based routing.
use Laravilt\Panel\Panel;
use App\Models\Team;
Panel::make('admin')
->path('admin')
->tenant(Team::class, 'team', 'slug');URL Pattern: /admin/{team}/dashboard
Each tenant has their own database with complete data isolation. Uses subdomain-based routing.
use Laravilt\Panel\Panel;
use Laravilt\Panel\Models\Tenant;
Panel::make('admin')
->path('admin')
->multiDatabaseTenancy(Tenant::class, 'myapp.com')
->tenantRegistration() // Allow new tenant signup
->tenantProfile() // Enable team settings page
->tenantModels([
\App\Models\Customer::class,
\App\Models\Product::class,
]);URL Pattern: acme.myapp.com/admin/dashboard
The built-in Tenant model provides:
- ULID primary keys
- Automatic slug and database name generation
- User membership management (owner, admin, member roles)
- Settings and data storage
- Trial period support
- Domain management
use Laravilt\Panel\Models\Tenant;
$tenant = Tenant::create([
'name' => 'Acme Corp',
'owner_id' => $user->id,
]);
// Auto-generated: id, slug, database name
$tenant->addUser($user, 'admin');
$tenant->setSetting('feature.enabled', true);
$tenant->onTrial(); // Check trial statusPublish the tenancy configuration:
php artisan vendor:publish --tag=laravilt-tenancy-configKey configuration options:
// config/laravilt-tenancy.php
return [
'mode' => env('TENANCY_MODE', 'single'),
'subdomain' => [
'domain' => env('APP_DOMAIN', 'localhost'),
'reserved' => ['www', 'api', 'admin'],
],
'tenant' => [
'database_prefix' => 'tenant_',
'auto_migrate' => true,
],
];Laravilt provides an automated migration tool to convert your existing Filament PHP v3/v4 resources to Laravilt.
php artisan laravilt:filamentThis interactive command will:
- Scan your
app/Filamentdirectory for resources, pages, and widgets - Let you select which components to migrate
- Convert namespaces, icons, and method signatures automatically
- Generate Laravilt-compatible files in
app/Laravilt
# Migrate from custom source directory
php artisan laravilt:filament --source=app/Filament/Admin
# Migrate to custom target directory
php artisan laravilt:filament --target=app/Laravilt/Backend
# Specify panel name
php artisan laravilt:filament --panel=Admin
# Preview changes without making them
php artisan laravilt:filament --dry-run
# Overwrite existing files
php artisan laravilt:filament --force
# Migrate all components without selection prompt
php artisan laravilt:filament --all| Filament | Laravilt |
|---|---|
Filament\Resources\Resource |
Laravilt\Panel\Resources\Resource |
Filament\Forms\Components\* |
Laravilt\Forms\Components\* |
Filament\Tables\Columns\* |
Laravilt\Tables\Columns\* |
Filament\Infolists\Components\* |
Laravilt\Infolists\Entries\* |
Filament\Actions\* |
Laravilt\Actions\* |
Filament\Pages\* |
Laravilt\Panel\Pages\* |
Filament\Widgets\* |
Laravilt\Widgets\* |
| Heroicon enums | Lucide icon strings |
Get/Set utilities |
Laravilt\Support\Utilities\Get/Set |
The migration tool also handles common third-party Filament packages:
RVxLab\FilamentColorPicker→Laravilt\Forms\Components\ColorPickerFilamentTiptapEditor→Laravilt\Forms\Components\RichEditorMohamedsabil83\FilamentFormsTinyeditor→Laravilt\Forms\Components\RichEditor- Spatie MediaLibrary uploads →
Laravilt\Forms\Components\FileUpload
After migration:
- Review the generated files for any manual adjustments
- Update your panel provider to register the new resources
- Run
npm run buildto compile frontend assets - Test all CRUD operations
| Command | Description |
|---|---|
laravilt:filament |
Migrate Filament resources to Laravilt |
laravilt:panel {name} |
Create a new panel |
laravilt:resource {panel} |
Create a resource with interactive prompts |
laravilt:page {panel} {name} |
Create a standalone page |
laravilt:cluster {panel} {name} |
Create a cluster for grouping pages |
laravilt:relation {panel} {resource} {name} |
Create a relation manager |
php artisan laravilt:cluster admin Settings \
--icon=Settings \
--sort=10 \
--group="System"app/Laravilt/Admin/Resources/Product/
├── ProductResource.php # Main resource class
├── Form/
│ └── ProductForm.php # Form configuration
├── Table/
│ └── ProductTable.php # Table configuration
├── InfoList/
│ └── ProductInfoList.php # Infolist configuration
├── Api/
│ └── ProductApi.php # API configuration (optional)
└── Pages/
├── ListProduct.php # List page
├── CreateProduct.php # Create page
├── EditProduct.php # Edit page
└── ViewProduct.php # View page
composer testcomposer formatcomposer analyseThe MIT License (MIT). Please see License File for more information.
