alp-develop/laravel-livewire-panel
Laravel admin panel framework powered by Livewire (v3/v4). Supports Bootstrap 4/5 and Tailwind CSS, with an installer for URL prefix, navigation mode, auth/gates, registration, optional CDN libs, and publishable views. Compatible with Laravel 10–13.
A complete admin panel framework for Laravel. Supports Bootstrap 4, Bootstrap 5, and Tailwind CSS. Compatible with Livewire 3 and Livewire 4.
| Requirement | Version |
|---|---|
| PHP | 8.1 / 8.2 / 8.3 / 8.4 / 8.5 |
| Laravel | 10 / 11 / 12 / 13 |
| Livewire | 3.x / 4.x |
composer require alp-develop/laravel-livewire-panel
php artisan panel:install
The installer runs an interactive menu:
admin)config or modulesUse --defaults to skip prompts.
In config mode, create a Livewire component with the panel layout and register the route manually:
namespace App\Livewire;
use Livewire\Attributes\Layout;
use Livewire\Component;
#[Layout('panel::layouts.app')]
class Dashboard extends Component
{
public function render()
{
return view('livewire.dashboard');
}
}
Register the route in routes/web.php with PanelAuthMiddleware. The prefix must match the panel prefix and the name must follow the pattern panel.{panelId}.:
use App\Livewire\Dashboard;
use AlpDevelop\LivewirePanel\Http\Middleware\PanelAuthMiddleware;
Route::middleware(['web', PanelAuthMiddleware::class])
->prefix('prefix')
->name('panel.admin.')
->group(function () {
Route::get('/', Dashboard::class)->name('home');
});
Visit http://yourapp.test/prefix/login — after login you land on /prefix where your page renders inside the panel layout.
The prefix determines the base URL of the panel. For example, 'prefix' => 'admin' means all panel routes live under /admin/*. After login, the user is redirected to /{prefix}. Route names must follow panel.{panelId}.{name} so the sidebar can resolve them.
See Installation for the full interactive menu, modules mode, and all options.
| Guide | Description |
|---|---|
| Installation | Interactive installer, navigation modes, getting started |
| Commands | All panel:* artisan commands |
| Configuration | Panels, guards, modes, CDN, multi-panel, helpers |
| Components | Login, register, sidebar, navbar per panel |
| Navigation | Config mode, modules mode, groups, permissions, user menu |
| Modules | Dashboard, Users, Auth + custom modules |
| Widgets | StatsCard, Chart, RecentTable + custom widgets |
| Themes | Bootstrap 4/5, Tailwind + custom themes |
| Customization | CSS variables, sidebar, navbar, dark mode, layout |
| Icons | Heroicons + custom icon libraries |
| Localization | Language selector, translations, i18n |
| Plugins | Cross-panel extensions with navigation and widgets |
| Notifications | Navbar bell icon, badge, polling, notification providers |
| Events | Audit events for login, registration, CRUD, access control |
| Security | Rate limiting, CSS sanitization, gate drivers, recommendations |
| API Reference | Interfaces, classes, registries, events |
--panel-*).localStorage, collapsible toggle control, and icons-only mode when collapsed. Zero-flash persistence across SPA navigations via livewire:navigating onSwap.localStorage persistence. Optional toggle on auth pages via dark_mode_show_on_auth.panel:make-module.panel:make-widget.Ctrl+K) with pluggable providers and permission filtering.panel:make-component forgot-password-notification.#[Locked] on Livewire properties, locale whitelist in LocaleController. See Security.PanelGate/PanelRenderer/CdnPluginResolver, O(1) route lookups via buildRouteMap(), identical query caching in PanelSearch, Octane-safe scoped() bindings.CdnManagerInterface, ThemeInterface, ModuleInterface, WidgetInterface, NotificationProviderInterface, SearchProviderInterface — all injectable and replaceable via the container.data-navigate-once (load once, stay in memory). Configurable favicon. Page transitions trigger after Livewire hydration.<x-panel::locale-selector />, <x-panel::dark-mode-toggle />, <x-panel::alert />, <x-panel::button />, <x-panel::card />, <x-panel::icon />, <x-panel::portal />../vendor/bin/pest
MIT
How can I help you explore Laravel packages today?