Subscribe
11 June, 2026 8 min read Aigars Silkalns

How to Integrate AdminLTE with Laravel (2026 Guide)

AdminLTE 4 for Laravel — dashboard with stat boxes, ApexCharts and vector map (light theme)

AdminLTE is one of the most popular open-source admin dashboard templates, and Laravel remains the leading PHP framework. Combining them used to mean either a community package or a manual setup — but that changed: AdminLTE 4 now has an official Laravel package, colorlibhq/adminlte-laravel, built and maintained by Colorlib, the team behind AdminLTE itself.

The official package goes far beyond styling: it ships 40 Blade components, a config-driven sidebar menu, a scaffolding system that generates 18 complete database-backed app sections, dependency-free roles & permissions (RBAC), auth scaffolding, 9 complete translations, and a Vite-first asset pipeline. Everything runs on Bootstrap 5.3 with vanilla JavaScript — no jQuery.

This guide walks you through the official package step by step, and also covers the manual integration route if you want full control. You can explore everything shown here in the live demo at laravel.adminlte.io.

AdminLTE 4 for Laravel — dashboard with stat boxes, ApexCharts and vector map (light theme)

Prerequisites

Before we begin, make sure you have:

  • PHP 8.3+
  • Composer 2.x
  • Laravel 13 (the current release)
  • Node.js 18+ and npm (for the Vite asset pipeline)
  • A database (MySQL, PostgreSQL, or SQLite)
  • Basic familiarity with Laravel’s MVC structure and Blade templating

Step 1: Create a Fresh Laravel Project

Install the Laravel installer globally (if you haven’t already) and create a new project:

composer global require laravel/installer

laravel new admin-panel

Alternatively, create the project directly with Composer:

composer create-project laravel/laravel admin-panel

Navigate into your project and verify it runs:

cd admin-panel
php artisan serve

Visit http://localhost:8000 and you should see the Laravel welcome page.

Step 2: Install the Official AdminLTE Package

Two commands get you a fully wired AdminLTE 4 install:

composer require colorlibhq/adminlte-laravel
php artisan adminlte:install

Unlike older AdminLTE packages that copied precompiled assets into public/vendor, this package is Vite-first. The adminlte:install command publishes the config file to config/adminlte.php, drops two Vite entry stubs into resources/js/adminlte.js and resources/css/adminlte.css, and offers to npm install the frontend dependencies pinned to tested versions (admin-lte@^4.0, bootstrap@^5.3, @popperjs/core, bootstrap-icons, apexcharts, and friends).

Add the two entry files to your vite.config.js:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'resources/css/adminlte.css',
                'resources/js/adminlte.js',
            ],
            refresh: true,
        }),
    ],
});

Then build the assets:

# Development (with hot reload)
npm run dev

# Production build
npm run build

You can check the state of your installation at any time with:

php artisan adminlte:status

Step 3: Create Your First Admin Page

Every page extends the package’s adminlte::page layout, which gives you the navbar, sidebar, footer, dark-mode toggle, and a ⌘K command palette for free. Create resources/views/admin/dashboard.blade.php:

@extends('adminlte::page')

@section('title', 'Dashboard')

@section('content_header')
    <div class="row">
        <div class="col-sm-6"><h3 class="mb-0">Dashboard</h3></div>
    </div>
@stop

@section('content')
    <div class="row g-3">
        <div class="col-lg-3 col-6">
            <x-adminlte-small-box title="150" text="New Orders"
                icon="bi bi-cart" theme="primary" url="#" />
        </div>
        <div class="col-lg-3 col-6">
            <x-adminlte-info-box title="44" text="Registrations"
                icon="bi bi-person-plus" theme="success" />
        </div>
    </div>

    <x-adminlte-card title="Quick form" icon="bi bi-pencil"
        theme="primary" outline collapsible>
        <x-adminlte-input name="email" label="Email" type="email"
            placeholder="[email protected]" />
        <x-adminlte-button type="submit" theme="primary"
            icon="bi bi-check-lg" label="Save" />
    </x-adminlte-card>
@stop

Notice there’s no hand-written widget markup — stat boxes, cards, inputs, and buttons are all Blade components. Add a route in routes/web.php:

Route::get('/dashboard', fn () => view('admin.dashboard'))->name('dashboard');

Step 4: Configure the Sidebar Menu

The sidebar is config-driven. Open config/adminlte.php and define your navigation under the menu key:

'menu' => [
    ['header' => 'MAIN'],
    ['text' => 'Dashboard', 'route' => 'dashboard', 'icon' => 'bi bi-speedometer'],
    ['text' => 'Users', 'url' => 'users', 'icon' => 'bi bi-people',
     'can' => 'view-users', 'label' => 5, 'label_color' => 'danger'],
    ['header' => 'CONTENT'],
    [
        'text' => 'Posts',
        'icon' => 'bi bi-file-post',
        'submenu' => [
            ['text' => 'All posts', 'url' => 'posts'],
            ['text' => 'New post', 'url' => 'posts/create'],
        ],
    ],
],

Supported keys include header, text, route, url, icon, label (badges), can (authorization gates), and nested submenu arrays. Active states and permission filtering are resolved automatically by the menu filter pipeline — items a user isn’t allowed to see simply never render. You can also add items at runtime with addAfter() and add() from a service provider.

What’s in the Box: 40 Blade Components

AdminLTE Laravel Blade widget components — small boxes and info boxes

The package registers 40 components under the adminlte- prefix, grouped into three categories:

  • Widgets (21) — cards, small boxes, info boxes, alerts, callouts, progress bars, timelines, ratings, direct chat, toasts, tabs, accordions, breadcrumbs, and navbar dropdowns for notifications, messages, and tasks.
  • Forms (9) — inputs, selects, textareas, switches, color pickers, file uploads, a Flatpickr date picker, and a Tom Select searchable dropdown. Form components automatically display validation errors from the session and repopulate with old() input.
  • Tools (10) — Bootstrap 5 modals, Tabulator data tables, a Quill rich-text editor, ApexCharts charts, jsVectorMap world maps, a FullCalendar event calendar, drag-and-drop kanban boards (SortableJS), and multi-step form wizards.

Heavy JavaScript libraries are lazy-loaded through a plugin system: rendering <x-adminlte-chart> is what triggers ApexCharts to load. Pages that don’t use a chart never ship the library — no configuration required.

Scaffold Complete App Sections in One Command

This is the feature that sets the official package apart. The adminlte:scaffold command generates complete, working application sections — migrations, models, factories, controllers, Form Requests, policies, seeders, feature tests, routes, and data-driven views:

php artisan adminlte:scaffold              # interactive multi-select
php artisan adminlte:scaffold mailbox      # a single section
php artisan adminlte:scaffold --all --seed # everything, with demo data

There are 18 sections to choose from. A few highlights:

SectionWhat you get
mailboxMessages table, model, inbox/read/compose UI, seeder
chatConversations + messages with a threaded chat UI
kanbanBoards, lanes, and cards with drag-to-reorder persistence
calendarEvents table, FullCalendar UI with a JSON feed (full CRUD)
projectsProjects with status/progress and a CRUD index
file-managerLaravel Storage browser with upload/delete
notificationsDatabase notifications wired into the navbar bell
activity-logAudit log with automatic auth-event logging + user impersonation
apiSanctum personal access tokens with a management UI
rbacRoles & permissions with a Users/Roles management UI

The rest: dashboard (data-driven stats), profile, settings, invoice, pricing, faq, impersonation, and realtime (live chat and notifications over Laravel Reverb/Echo). Routes land in an auth-protected /admin group — run php artisan migrate and visit /admin/kanban:

Scaffolded drag-and-drop kanban board in AdminLTE 4 for Laravel

Or /admin/mailbox for a complete database-backed inbox:

Scaffolded database-backed mailbox section in AdminLTE 4 for Laravel

Authentication and Authorization

The package ships AdminLTE-styled auth views (login, register, lockscreen, forgot/reset password) and a command that wires them up:

php artisan adminlte:make-auth                 # plain (default)
php artisan adminlte:make-auth --type=breeze   # Laravel Breeze integration
php artisan adminlte:make-auth --type=fortify  # Laravel Fortify integration

The plain type publishes Login / Register / ForgotPassword / ResetPassword controllers with hardening built in: login throttling, email verification, and password confirmation.

For roles and permissions, scaffold the dependency-free RBAC system — no third-party permission package needed:

php artisan adminlte:scaffold rbac
php artisan migrate --seed

You get roles, permissions, a HasRoles trait for your User model, role and permission middleware, a permission-aware Gate (which the sidebar’s can keys respect automatically), and a ready-made Users & Roles management UI.

Dark Mode, Theming, and Extras

Dark mode works out of the box via Bootstrap 5’s data-bs-theme — users can toggle it from the navbar and the choice persists:

AdminLTE 4 for Laravel — dashboard in dark mode

Layout switches (fixed sidebar, fixed navbar, sidebar mini), the logo, the title, and custom element classes are all plain config keys in config/adminlte.php. The bundled demo pages even include a theme generator for experimenting with sidebar and navbar color schemes:

AdminLTE 4 theme generator page running in Laravel

Other niceties worth knowing about:

  • ⌘K command palette — searches your sidebar menu; opens with Cmd/Ctrl+K or the navbar search pill.
  • 9 complete locales — English, German, Spanish, French, Italian, Japanese, Portuguese, Russian, and Chinese, plus RTL layout support.
  • In-app documentation — the full docs are served inside your app at /docs, rendered with the AdminLTE layout.
  • Accessibility built in — ARIA-labelled controls, screen-reader-tracked submenu state, and error messages linked to their form fields.

Manual Integration (Without the Package)

Prefer to wire everything yourself? AdminLTE 4 is a plain npm package, so manual integration with Vite is straightforward — you just give up the menu builder, Blade components, and scaffolding.

npm install admin-lte@^4.0 @popperjs/core bootstrap@^5.3

Import the styles in resources/css/app.css and the JavaScript in resources/js/app.js:

/* resources/css/app.css */
@import 'admin-lte/dist/css/adminlte.css';

// resources/js/app.js
import 'admin-lte/dist/js/adminlte.js';

Then build a master layout at resources/views/layouts/admin.blade.php using AdminLTE 4’s wrapper classes:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>@yield('title', 'Admin Panel')</title>
    @vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
    <div class="app-wrapper">
        @include('layouts.partials.navbar')
        @include('layouts.partials.sidebar')

        <main class="app-main">
            <div class="app-content-header">
                <div class="container-fluid">
                    @yield('content_header')
                </div>
            </div>
            <div class="app-content">
                <div class="container-fluid">
                    @yield('content')
                </div>
            </div>
        </main>

        @include('layouts.partials.footer')
    </div>
</body>
</html>

From there you write the navbar and sidebar partials by hand following the AdminLTE 4 documentation. This route makes sense for heavily customized designs; for everything else, the official package gets you further, faster.

AdminLTE 4 vs. AdminLTE 3 (and the Legacy Package)

If you’ve used AdminLTE with Laravel before, you probably used jeroennoten/laravel-adminlte — a great community package, but one that targets AdminLTE 3 (Bootstrap 4 + jQuery). The official colorlibhq/adminlte-laravel package is the AdminLTE 4 successor: Bootstrap 5.3, vanilla JS, Laravel 13, PHP 8.3+, and Vite instead of precompiled assets. The migration-friendly part: the @extends('adminlte::page') layout convention and the config-driven menu array work the same way, so existing views need surprisingly few changes.

What changed in AdminLTE 4 itself:

  • Bootstrap 5 — no more jQuery dependency; data attributes use the data-bs- prefix.
  • CSS variables — theme customization uses CSS custom properties for runtime changes.
  • Dark mode — built-in via Bootstrap 5’s data-bs-theme="dark".
  • New layout classes.app-wrapper, .app-sidebar, .app-main, and .app-footer replace the old wrapper names.
  • Bootstrap Icons — the default icon set changed from Font Awesome to Bootstrap Icons (Font Awesome still works).

Production Tips

  • Run npm run build to generate optimized, versioned assets with Vite.
  • Cache everythingphp artisan config:cache, route:cache, and view:cache.
  • Protect admin routes — the scaffolded /admin group is auth-protected out of the box; add the package’s role or permission middleware for finer control.
  • Let plugins stay lazy — optional libraries (Flatpickr, Tom Select, Tabulator, Quill) only load on pages that render the matching component, so don’t bundle them globally.
  • Disable the demo pages — set 'demo' => false in config/adminlte.php before going live.

Useful Resources

Not a Laravel shop? AdminLTE 4 also ships official React/Next.js, Vue/Nuxt, and Django editions.

Conclusion

Integrating AdminLTE with Laravel in 2026 comes down to two commands: composer require colorlibhq/adminlte-laravel and php artisan adminlte:install. From there, the official package gives you 40 Blade components, a config-driven sidebar, hardened authentication, dependency-free roles & permissions, and a scaffolding system that can generate a mailbox, kanban board, calendar, or a full RBAC setup in seconds — all on Bootstrap 5.3 and vanilla JavaScript, with no jQuery anywhere.

Start with the live demo to see what you’re getting, then run the install in a fresh Laravel 13 project — you can have a professional, database-backed admin panel running in well under an hour.

Aigars Silkalns
Aigars Silkalns

Frontend web developer and founder of AdminLTE, the most popular open-source admin dashboard template on GitHub with 45,000+ stars. Over 10 years of experience building web applications with Bootstrap, React, Vue, Angular, Tailwind CSS, and WordPress. Creator of Colorlib and DashboardPack.