laravilt/panel
| Install | |
|---|---|
composer require laravilt/panel |
|
| Latest Version: | 1.1.0 |
| PHP: | ^8.3|^8.4 |
| License: | MIT |
| Last Updated: | Sep 17, 2026 |
| Links: | GitHub · Packagist |

Laravilt Panel
A powerful admin panel framework for Laravel with Vue.js (Inertia.js) frontend. Build beautiful, reactive admin panels with minimal effort.
Features
- 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
Installation
composer require laravilt/panel
The package will automatically register its service provider.
Configuration
Publish the config file:
php artisan vendor:publish --tag="laravilt-panel-config"
Quick Start
1. Create a Panel
php artisan laravilt:panel admin
This creates a new admin panel at app/Providers/Laravilt/AdminPanelProvider.php.
2. Create a Resource
php artisan laravilt:resource admin
Follow the interactive prompts to:
- Select a database table
- Choose which columns to include
- Enable API endpoints (optional)
- Enable API Tester interface (optional)
3. Create a Page
php artisan laravilt:page admin Dashboard
Creates a standalone page with both PHP controller and Vue component.
4. Create a Cluster
php artisan laravilt:cluster admin Settings --icon=Settings
Creates 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;
}
API Generation
Resources can automatically generate RESTful API endpoints.
Enable API on a Resource
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);
}
}
API Configuration Class
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
}
}
API Tester Interface
Enable the API Tester UI to allow interactive API testing directly from the panel:
$api->useAPITester(); // Enable
$api->useAPITester(false); // Disable (default)
Available API Methods
$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 interface
Multi-Tenancy
Laravilt Panel supports two tenancy modes for building SaaS applications:
Single Database Mode
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
Multi-Database Mode
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
Tenant Model
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 status
Configuration
Publish the tenancy configuration:
php artisan vendor:publish --tag=laravilt-tenancy-config
Key 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,
],
];
Migrating from Filament PHP
Laravilt provides an automated migration tool to convert your existing Filament PHP v3/v4 resources to Laravilt.
Quick Migration
php artisan laravilt:filament
This 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
Migration Options
# 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
What Gets Migrated
| 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 |
Third-Party Package Mappings
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
Post-Migration Steps
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
Commands
| 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 |
Cluster Command Options
php artisan laravilt:cluster admin Settings \
--icon=Settings \
--sort=10 \
--group="System"
Resource Structure
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
Testing
composer test
Code Style
composer format
Static Analysis
composer analyse
License
The MIT License (MIT). Please see License File for more information.
Related Packages
Filament admin panel for Laravel Email Tracker - dashboards, resources, and stat...