alp-develop / laravel-livewire-panel
Admin panel framework for Laravel and Livewire. Modular architecture with widgets, plugins, search, notifications, gate authorization, dark mode, i18n and multi-theme support (Bootstrap 4, Bootstrap 5, Tailwind CSS). Compatible with Laravel 10-13, Livewire 3-4, PHP 8.1-8.5.
Package info
github.com/alp-develop/laravel-livewire-panel
pkg:composer/alp-develop/laravel-livewire-panel
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0|^12.0|^13.0
- illuminate/database: ^10.0|^11.0|^12.0|^13.0
- illuminate/http: ^10.0|^11.0|^12.0|^13.0
- illuminate/routing: ^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
- livewire/livewire: ^3.0|^4.0
Requires (Dev)
- infection/infection: ^0.32.6
- larastan/larastan: ^2.0|^3.0
- orchestra/testbench: ^8.0|^9.0|^10.0|^11.0
- pestphp/pest: ^2.0|^3.0|^4.0
- pestphp/pest-plugin-laravel: ^2.0|^3.0|^4.0
- rector/rector: ^2.4
README
A complete admin panel framework for Laravel. Supports Bootstrap 4, Bootstrap 5, and Tailwind CSS. Compatible with Livewire 3 and Livewire 4.
Requirements
| Requirement | Version |
|---|---|
| PHP | 8.1 / 8.2 / 8.3 / 8.4 / 8.5 |
| Laravel | 10 / 11 / 12 / 13 |
| Livewire | 3.x / 4.x |
Installation
composer require alp-develop/laravel-livewire-panel php artisan panel:install
The installer runs an interactive menu:
- URL prefix (default:
admin) - Navigation mode —
configormodules - CSS Theme — Bootstrap 5, Bootstrap 4, or Tailwind CSS
- Gate driver — None, Spatie, or Laravel Gate
- Registration — enable/disable
- CDN libraries — Chart.js, SweetAlert2, Select2, Flatpickr
- Publish views — optional
Use --defaults to skip prompts.
Quick Start
Create your first page
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.
Documentation
| 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 |
Features
- Multi-panel -- Multiple independent panels in a single app with separate config, theme, guard and navigation per panel.
- 3 CSS themes -- Bootstrap 4, Bootstrap 5 and Tailwind CSS with full CSS variable theming (
--panel-*). - Sidebar state management -- Configurable initial state (expanded/collapsed), persistent or session-only state via
localStorage, collapsible toggle control, and icons-only mode when collapsed. Zero-flash persistence across SPA navigations vialivewire:navigatingonSwap. - Dark mode -- Toggle in navbar with
localStoragepersistence. Optional toggle on auth pages viadark_mode_show_on_auth. - Localization -- Built-in translations for 10 languages (en, es, fr, pt, zh, hi, ar, bn, ru, ja). Language selector in navbar and auth pages. Sidebar labels support translation keys automatically. See Localization.
- Module system -- Built-in Dashboard, Users and Auth modules. Create custom modules with
panel:make-module. - Widget system -- StatsCard, Chart and RecentTable widgets. Create custom widgets with
panel:make-widget. - Plugin system -- Cross-panel extensions with lifecycle hooks, navigation and widgets.
- Search -- Global search (
Ctrl+K) with pluggable providers and permission filtering. - Notifications -- Polling notification system with count badge and provider interface. See Notifications.
- Gate authorization -- PanelGate with Spatie, Laravel Gate or custom drivers.
- Password reset -- Full forgot-password -> email -> reset-password flow out of the box. Customizable notification class and email template via
panel:make-component forgot-password-notification. - Audit events -- 8 event classes for login, logout, registration, CRUD operations and access denial. See Events.
- Security hardening -- Rate limiting on login (5/60s), CSS injection prevention, SQL wildcard sanitization,
#[Locked]on Livewire properties, locale whitelist inLocaleController. See Security. - Performance -- ETag + HTTP 304 on asset serving, memoization in
PanelGate/PanelRenderer/CdnPluginResolver, O(1) route lookups viabuildRouteMap(), identical query caching inPanelSearch, Octane-safescoped()bindings. - Extensibility --
CdnManagerInterface,ThemeInterface,ModuleInterface,WidgetInterface,NotificationProviderInterface,SearchProviderInterface— all injectable and replaceable via the container. - SPA performance -- CDN and theme scripts use
data-navigate-once(load once, stay in memory). Configurable favicon. Page transitions trigger after Livewire hydration. - Reusable components --
<x-panel::locale-selector />,<x-panel::dark-mode-toggle />,<x-panel::alert />,<x-panel::button />,<x-panel::card />,<x-panel::icon />,<x-panel::portal />.
Testing
./vendor/bin/pest
License
MIT