Skip to content

Releases: ColorlibHQ/AdminLTE

v4.3.1 — ribbons now fill the card corner

Choose a tag to compare

@puikinsh puikinsh released this 10 Aug 13:18

Patch release fixing a placement bug in the ribbon component introduced in 4.3.0. If you are picking up ribbons, start here rather than 4.3.0.

Fixed

Ribbons left the card corner bare. The banner was centred on its clipping square. That reads as the natural placement, but the centre of a square is the point furthest from its corner along the diagonal — so the banner sat too far into the card, left a large empty triangle at the very corner it exists to cover, and had its label cut off by the clip.

The banner's centre now sits on the corner's bisector at ~46% of the square's side, which both fills the corner and leaves the label room, and its width is the chord across the corner rather than the square's diagonal — so the ends still cut flush. RTL mirrors exactly as before.

Label length is now documented. The banner is clipped to the corner, so only about 64px of it is readable at the default size — roughly six characters. .ribbon-lg and .ribbon-xl give more room. The demo uses short labels accordingly.

Nothing else changed: no API change, no new classes, and the fix is CSS-only (+28 bytes gzip).

Install

npm install admin-lte@4.3.1
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.3.1/dist/css/adminlte.min.css">
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.3.1/dist/js/adminlte.min.js"></script>

Everything new in this line is described in the 4.3.0 release notes. Full details in the CHANGELOG.

What's Changed

  • 4.3.1 — fix ribbons leaving the card corner bare by @puikinsh in #6101

Full Changelog: v4.3.0...v4.3.1

v4.3.0 — Sidebar search, ribbons, social widgets, gallery & search results

Choose a tag to compare

@puikinsh puikinsh released this 10 Aug 12:42

AdminLTE 4.3.0 adds a new JavaScript plugin, two CSS components, three demo pages and three documentation pages — and fixes a duplicate-id bug that could affect your own code.

Sidebar search

A new SidebarSearch plugin filters the sidebar menu as you type. Drop data-lte-toggle="sidebar-search" on an input and it works:

<div class="sidebar-search" role="search">
  <label for="sidebar-search-input" class="visually-hidden">Filter menu</label>
  <input type="search" id="sidebar-search-input" class="form-control form-control-sm"
         placeholder="Filter menu…" autocomplete="off"
         data-lte-toggle="sidebar-search" data-lte-target="#navigation">
</div>

A parent survives if any descendant matches and expands to reveal it. A group whose own name matches keeps its entire subtree, so expanding it is never a dead end. Clearing the field — ESC, the native clear button, or clear() — puts every submenu back exactly as you left it. Entries are hidden with the hidden attribute rather than a class, so they leave the accessibility tree as well as the layout.

Fires filtered.lte.sidebar-search with { query, matches }. Both listeners are delegated on document, so a sidebar rendered after load — Turbo Frame, client-side router — needs no re-initialisation. Full reference →

The app header also gains a navbar search and a language menu.

Ribbons

Corner banners in three sizes:

<div class="card">
  <div class="ribbon-wrapper">
    <div class="ribbon text-bg-primary">New</div>
  </div>
  <div class="card-body"></div>
</div>

The geometry derives from one custom property, so rescaling means overriding --lte-ribbon-size and nothing else. The clip inherits the parent's corner radius, so it follows a rounded card instead of cutting a square out of it, and RTL mirrors the corner and the rotation with no extra markup.

Social & post widgets

.user-block, .post, .widget-user, .widget-user-2 and .description-block — profile cards and activity feeds. The class names match v3, so markup you are migrating works unchanged, but the implementations are grid and flex rather than floats, and colour comes from Bootstrap utilities. .user-block renders avatar, name and meta from flat markup with no wrapper element.

New pages

  • Gallery — a filterable media library that carries no image library at all. The tiles are a Bootstrap .ratio box plus .object-fit-cover; the filter is page-local script. Nothing is added to adminlte.js.
  • Search Results — typed results (page / user / file / project) over a tabbed filter, with a refine panel, related searches and a worked no-results state.
  • Ribbons — every colour, size and placement.
  • General UI Elements gains nav tabs & pills, modals and offcanvas.

Documentation

New Card and Miscellaneous component references mean every AdminLTE component that ships CSS now has a reference page: cards, callouts, ribbons, small box, info box, timeline, the social/post widgets, progress-bar sizes, themed toasts and the image-size utilities. Plus a SidebarSearch page and a recipe on wiring a language switcher to a real locale.

Fixes

  • #navigation resolved to the app header, not your menu. The accessibility module resolved its skip-link targets with a single selector list (#navigation, nav, [role="navigation"]), but a selector list resolves in document order rather than by which selector matched. On any page where a header <nav> precedes a menu already carrying id="navigation", the header was stamped with the id a second time — leaving a duplicate id, pointing "Skip to navigation" at the header, and silently redirecting document.querySelector("#navigation") in application code to the wrong element. An element the page already gave the id to now always wins.
  • Seven order links on dashboard v2 pointed at a page that does not exist.

Quality

  • Accessibility gate widened from 10 to 16 pages, zero serious/critical violations. It caught three Bootstrap-default contrast misses on the new pages, all fixed at the source rather than waived.
  • Unit tests up to 62 (from 51).
  • A Playwright pass over all 88 built pages: no console errors, no failed requests, no dead links.

Install

npm install admin-lte@4.3.0
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.3.0/dist/css/adminlte.min.css">
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.3.0/dist/js/adminlte.min.js"></script>

Full details in the CHANGELOG.

What's Changed

  • feat(select2): opt-in compatibility theme, v3→v4 plugin migration table, real remote-data demo by @puikinsh in #6098
  • chore(docs): remove the dead faq.mdx by @puikinsh in #6099
  • 4.3.0 — sidebar search, ribbons, social widgets, gallery and search results by @puikinsh in #6100

Full Changelog: v4.2.0...v4.3.0

AdminLTE 4.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 08:11

AdminLTE 4.2.0 is a focused release that mostly answers one question the community kept asking: how do I stop AdminLTE from managing my theme? It also ships the lifecycle API that client-side rendered layouts have been waiting for, plus three new demo pages.

Highlights

Color mode gets out of your way

Applications with their own theming — a custom Bootstrap theme, a per-user preference rendered by Laravel or Django, or simply your own switcher — can now turn the bundled module off with a single attribute. No JavaScript, no load-order concerns, works straight from dist:

<html data-lte-color-mode="off">

ColorMode then never writes data-bs-theme: not on load, not when a [data-bs-theme-value] toggle is clicked, not when the OS preference changes. The pre-paint snippet in <head> honours it too, so nothing touches your theme before first paint either.

And if all you need is a server-rendered default, you no longer have to opt out at all. The theme is now resolved from the visitor's stored choice → the theme your page declared → the OS preference, so this survives both page load and later OS preference changes:

<html lang="en" data-bs-theme="dark">

It stays a default: the moment a visitor picks a theme themselves, their choice wins on that device.

Thanks to @cytech for the report (#6084), and to @dfsmania (#6093) for putting markup-as-a-preference on the table in the first place.

initialize() / teardown() for client-side rendered layouts

Frameworks that build the layout after DOMContentLoaded into a persistent <body> — GWT and similar widget toolkits — used to find no sidebar and no menu when AdminLTE ran its init pass. Two new exports fix that:

import { initialize, teardown } from "admin-lte"

initialize() // re-run every plugin's init against the DOM as it stands right now
teardown()   // drop this cycle's listeners when you unmount the layout

initialize() is safe to call repeatedly — it tears the previous cycle down first, so listeners never stack. Thanks @themarioga (#6083).

New demo pages

  • forms/advanced.html — the recommended Tom Select and Flatpickr integrations
  • forms/editors.html — Quill 2 in both the snow (toolbar) and bubble (inline) themes
  • layout/top-nav.html — a sidebar-less layout with primary navigation in the app-header

Fixes

  • A sidebar rendered as <body class="sidebar-collapse"> no longer springs open on wide screens — the responsive pass was overwriting the state declared in the markup (#6076, thanks @dfsmania)
  • The Color Mode docs page no longer runs two switchers at once: it still carried the pre-4.1 inline toggler, which bound its own handlers to the same buttons as the bundled module and persisted to a different localStorage key

Maintenance

Every dev dependency refreshed to its latest release, including the eslint-plugin-astro 3 and eslint-plugin-unicorn 73 majors. TypeScript stays on 6.0.3 for now — 7.0 has shipped, but typescript-eslint and @astrojs/check both still cap the peer range, so installing it breaks npm ci outright. The unit suite grew to 51 tests, 13 of them covering the new color-mode precedence chain and the opt-out.

Install

npm install admin-lte@4.2.0
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.2.0/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.2.0/dist/js/adminlte.min.js"></script>
// Or as a module
import { PushMenu, ColorMode } from "admin-lte"

Full details in the CHANGELOG.

v4.1.0

Choose a tag to compare

@puikinsh puikinsh released this 02 Jul 12:50

AdminLTE 4.1.0 is the biggest developer-experience release of the 4.x line: the npm package finally speaks modern JavaScript (ESM + TypeScript types), the components got a real lifecycle API, the dark-mode switcher ships in the bundle, and the project has its first automated test suite — including an accessibility gate that already runs clean.

Highlights

Modern npm packaging

// This now works out of the box in Vite/webpack — with full type checking:
import { PushMenu, CardWidget, ColorMode } from "admin-lte"
  • New ESM bundle (dist/js/adminlte.esm.js + .min) alongside the UMD build
  • TypeScript declarations ship under dist/js/types/types, module, and a full exports map (with sass and style conditions) in package.json
  • bootstrap is a peer dependency, so compiling @use "admin-lte/src/scss/adminlte" works right after npm install admin-lte

Component lifecycle API

Every component now follows the Bootstrap contract: getInstance(element), getOrCreateInstance(element, config?), and dispose(), backed by a WeakMap registry (Turbo-safe by construction). The data API uses delegated document-level listeners, so cards and toggles inserted after page load — AJAX partials, Turbo Frames — work without re-initialisation. And the sidebar is finally scriptable:

PushMenu.getInstance(document.querySelector(".app-sidebar"))?.collapse()

Behavior change: all plugin events are now bubbling CustomEvents dispatched on the component's root element, animated actions have cancelable "before" events (e.g. veto remove.lte.card-widget with preventDefault()), and "after" events fire when the animation completes. If you listened for card events on the tool buttons, listen on the card or on document instead — see the CHANGELOG for the full event table.

ColorMode in the bundle

The light/dark/auto switcher is now a proper module in adminlte.js — persisted, OS-preference aware, with a changed.lte.color-mode event. No more copy-pasting the demo's inline script.

First automated tests + accessibility gate

  • 30-unit vitest suite wired into npm run production
  • npm run test-a11y runs axe-core (WCAG 2.1 A/AA) against seven built demo pages and fails on serious/critical violations — currently zero, after fixing the findings it immediately surfaced (breadcrumb link contrast, keyboard-unreachable chat pane)

New pages & slimmer CSS

  • Starter page (the blank v3 starting point, back by popular demand), a dedicated ApexCharts page with six chart types, and a Users management demo
  • Docs/FAQ styles moved to a separate adminlte-docs.css: adminlte.min.css is now ~40.4 KB gzip, down from 46.7 KB in 4.0.3
  • The 1,766-line vendored Bootstrap variables fork is gone — AdminLTE's ~10 overrides live in a small _bootstrap-overrides.scss (compiled CSS byte-identical)

Install

npm install admin-lte@4.1.0
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.1.0/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.1.0/dist/js/adminlte.min.js"></script>
// Or as a module
import { PushMenu } from "admin-lte"

Full details in the CHANGELOG.

v4.0.4

Choose a tag to compare

@puikinsh puikinsh released this 02 Jul 11:35

AdminLTE 4.0.4 is a quality patch driven by a full-code audit of the template — JavaScript, Sass, demo markup, packaging, and the accessibility layer. No breaking changes; upgrading from any 4.0.x is drop-in.

Heads-up for npm users: 4.0.3 was tagged but never published to npm, so this release moves the registry directly from 4.0.2 to 4.0.4. The npm package is also much leaner now — it ships the library (CSS/JS/Sass/TS sources) without the demo HTML, dropping from 12.7 MB to 9.0 MB unpacked.

Fixes

  • Every dist stylesheet shipped the docs-site styles twice — a duplicated Sass import cost ~23 KB in each of the four CSS bundles. Removed once and locked in with tighter bundlewatch budgets.
  • Accessibility module keyboard handling: removed a document-edge Tab wrap that acted as a page-level keyboard trap (WCAG 2.1.2); arrow keys are no longer intercepted while typing in inputs/textareas/selects; modal focus now restores to the actual triggering element (and respects [autofocus]).
  • Hotwired Turbo: skip links, the live region, and the sidebar overlay are no longer duplicated on every Turbo navigation when restoring cached snapshots (follow-up to the Turbo support shipped in 4.0.3, #6059).
  • Card widget: remove() now actually removes the card from the DOM (hidden form fields no longer keep submitting); toggling collapse mid-animation reverses it instead of being swallowed; widget events dispatch on the toggle button rather than a clicked icon.
  • Slide animations are cancelable — rapid-toggling a treeview or card no longer desyncs its display state.
  • Treeview: fixed an accordion guard that could slide an already-open menu shut; submenu toggles now expose aria-expanded to assistive tech.
  • PushMenu: sidebar state now reacts only to genuine breakpoint crossings via matchMedia — mobile URL-bar/keyboard resizes no longer re-expand a sidebar you collapsed; fixed a 992px off-by-one between JS and CSS.
  • Callout variants never recolored links/inline code (two custom properties were referenced but never defined); the user-menu footer used a Bootstrap token that doesn't exist in 5.3.
  • Demo pages: added the missing forgot-password page (a dead link on both login pages since 4.0.0); Bootstrap JS CDN pin now matches the compiled CSS (5.3.8); removed the non-functional navbar-search button; every page has a proper <h1>; breadcrumbs are navigation landmarks; all icon-only buttons carry aria-labels; auth forms have real labels and <main> landmarks.

Maintenance

  • npm packaging hardened: the package is now built from a files allowlist instead of .npmignore, so stray local files can never leak into the tarball again, and engines: node >= 20 is declared.
  • ACCESSIBILITY-COMPLIANCE.md rewritten as an accurate accessibility statement — what's implemented, what's partial, and the roadmap — replacing the aspirational checklist. Demo meta descriptions updated to match.

Install

npm install admin-lte@4.0.4
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.4/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.4/dist/js/adminlte.min.js"></script>

Full details in the CHANGELOG.

v4.0.3

Choose a tag to compare

@puikinsh puikinsh released this 01 Jul 10:48

AdminLTE 4.0.3 — Hotwired Turbo support, fullscreen & a11y fixes, and a fully modernized build toolchain (Astro 7 / Vite 8).

📖 Documentation · 🎨 Live preview · 🚀 Migration from v3


✨ Added

  • Hotwired Turbo / Turbo Drive support — the JS components (PushMenu, TreeView, and friends) now re-initialise on turbo:load, so they keep working after Turbo swaps the <body> on in-app navigation instead of going dead after the first link click. Each init cycle uses an AbortController whose signal is aborted on turbo:before-render, so window/document listeners are torn down before re-init rather than stacking up on every navigation. (#563, #5890 — diagnosed and prototyped by @MarkDaleman in #6058)

🐛 Fixes

  • Fullscreen state sync — the fullscreen icons and the maximized/minimized events are now driven by the native fullscreenchange event instead of the request/exit calls. The UI no longer flips when a fullscreen request is denied (permissions policy, missing allowfullscreen, lost user gesture), and it stays in sync when the user exits with ESC or F11. (builds on @webgo-oss's report in #6055)
  • Accessibility — form inputs lacking both an id and a name now receive a stable, generated error-message id instead of colliding on a shared -error id and appending a new orphaned error node on every re-validation. (#6055, reported by @webgo-oss)

🧰 Maintenance

  • Every dependency bumped to its latest release, including four majors — Astro 6 → 7 (which pulls in Vite 8), @astrojs/mdx 6 → 7, eslint-plugin-astro 1 → 2, and eslint-plugin-unicorn 68 → 69 — plus ESLint, Prettier, Stylelint, PostCSS, Rollup and typescript-eslint. No source changes were required: the full npm run production pipeline (lint + Astro build + bundlewatch) passes and npm audit stays at 0 vulnerabilities. This single update supersedes Dependabot PRs #6065#6074.

📦 New here? The AdminLTE family

AdminLTE 4 is also available as official framework integrations: adminlte-vue (Vue 3 & Nuxt), adminlte-react (React & Next.js), adminlte-django, and adminlte-laravel.

Install

npm install admin-lte@4.0.3

Or via CDN:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.3/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.3/dist/js/adminlte.min.js"></script>

See CHANGELOG.md for the full notes.

Full Changelog: v4.0.2...v4.0.3

AdminLTE 4.0.2

Choose a tag to compare

@puikinsh puikinsh released this 11 Jun 08:45

AdminLTE 4.0.2 — a housekeeping patch: building from source is clean again.

📖 Documentation · 🎨 Live preview · 🚀 Migration from v3


🐛 Fixes

  • npm run production works from a source checkout again — the dev-only social preview script (scripts/social-preview.mjs, new in 4.0.1) tripped 9 ESLint errors during the lint stage and failed the build. The script is now fully lint-clean. (#6048, reported by @lfiorini)

🔒 Security

  • Hardened the social preview script's tiny static file server against path traversal and error detail leakage (CodeQL alerts #87#92). This script is dev-only and has never been part of the npm package — published builds were never affected.

📦 New here? The AdminLTE family

AdminLTE 4 is also available as official framework integrations: adminlte-vue (Vue 3 & Nuxt), adminlte-react (React & Next.js), adminlte-django, and adminlte-laravel.

Install

npm install admin-lte@4.0.2

Or via CDN:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.2/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.2/dist/js/adminlte.min.js"></script>

See CHANGELOG.md for the full notes.

Full Changelog: v4.0.1...v4.0.2

Full Changelog: v4.0.1...v4.0.2

v4.0.1

Choose a tag to compare

@puikinsh puikinsh released this 11 Jun 06:52

AdminLTE 4.0.1 — first patch for the v4 line, and the launch of the AdminLTE family.

📖 Documentation · 🎨 Live preview · 🚀 Migration from v3


🎉 AdminLTE is now a family

The classic HTML/CSS/JS template you know is no longer alone. AdminLTE 4 is now available as four official framework integrations, each a first-class package maintained under ColorlibHQ:

Project For Highlights
adminlte-vue Vue 3 & Nuxt 45+ typed components, composables, SSR-safe theming, ⌘K command palette
adminlte-react React & Next.js (App Router / RSC) 30+ typed components, dark mode, ⌘K command palette
adminlte-django Django Config-driven sidebar with per-request filters, 33+ components, themed django.contrib.admin, {{ form }} renderer
adminlte-laravel Laravel Blade integration, Vite-ready

All four build on the same Bootstrap 5.3 + vanilla JS core as this package, so designs and docs carry over. If you build admin panels in any of these ecosystems, give them a ⭐ and tell us what you'd like to see next.

🐛 Fixes

  • No more dark-mode flash — the stored color mode is now applied before first paint, so reloading a page in dark mode no longer flashes light first. (#6043, reported by @bsshreesha)
  • Mailbox text overflow — long subject and preview text in the inbox list is now truncated instead of breaking the layout. (#6044, reported by @Oscurlo)
  • Accessibility landmark fixaccessibility.js no longer assigns role="navigation" to <ul>/<ol> elements, which broke list semantics and failed the Lighthouse accessibility audit. (#6038, reported by @lfiorini)

🧰 Maintenance

  • All dependencies updated to latest; axios pinned via npm overrides to clear a transitive advisory — local npm audit reports 0 vulnerabilities.
  • New dev-only social preview generator (scripts/social-preview.mjs), excluded from the npm package.

Install

npm install admin-lte@4.0.1

Or via CDN:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.1/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.1/dist/js/adminlte.min.js"></script>

See CHANGELOG.md for the full notes.

Full Changelog: v4.0.0...v4.0.1

v4.0.0

Choose a tag to compare

@github-actions github-actions released this 19 May 14:20

AdminLTE 4.0.0 — first stable release of the v4 line. A ground-up rewrite on Bootstrap 5.3 with no jQuery.

📖 Documentation · 🚀 Migration from v3 · 🎨 Live preview


Highlights

  • 18 new demo pages — Calendar (FullCalendar), Kanban (SortableJS), Chat, File Manager, Projects, Mailbox (Inbox/Read/Compose), Form Wizard, Data Tables (Tabulator), Profile, Settings, Invoice, Pricing, FAQ, plus 404 / 500 / Maintenance error pages.
  • Documentation overhaul — Getting Started, Customization, RTL, Migration from v3, Layout Blueprint, Recipes, Deployment, Recommended Integrations, JavaScript Plugins Overview. Split sidebar navigation so the live preview no longer feels like a docs site. Reading-friendly typography with consistent card wrappers across every page.
  • FAQ rebuilt as a custom page with a hero, live search, section chips, and an accordion of 19 questions across six topics.
  • Six issue fixes: #6010, #6019, #6020, #6021, #6026, #6028.
  • Visible color-mode toggle in the default topbar, with localStorage persistence and prefers-color-scheme integration.
  • Major dependency upgrades: ESLint 9 → 10, TypeScript 5.9 → 6, Stylelint 16 → 17, Astro 6.0 → 6.3, and refreshed minor versions across autoprefixer / postcss / rollup / sass / terser.
  • Dependency tree cleanup: dropped eslint-plugin-import, eslint-config-xo*, and the legacy .eslintrc.json. Flat config only.
  • Security: npm overrides for yaml and stylelint-config-twbs-bootstrap mean npm install runs without --legacy-peer-deps and reports 0 vulnerabilities.

Breaking changes from v3

v3 v4
.wrapper .app-wrapper
.main-header .app-header
.main-sidebar .app-sidebar
.content-wrapper .app-main
data-toggle data-bs-toggle (Bootstrap 5)
data-widget="pushmenu" data-lte-toggle="sidebar"
data-widget="treeview" data-lte-toggle="treeview"
.dark-mode body class data-bs-theme="dark" attribute
jQuery required Vanilla TypeScript — no jQuery
enablePersistence defaulted on Defaults off; opt in via data-enable-persistence="true"

See the dedicated Migration from v3 guide for the complete list and step-by-step upgrade order.

Install

npm install admin-lte@4.0.0

Or via CDN:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0/dist/js/adminlte.min.js"></script>

See CHANGELOG.md for the full notes.

AdminLTE v4.0.0-rc7

Choose a tag to compare

@puikinsh puikinsh released this 10 Mar 10:15

AdminLTE v4.0.0-rc7 Release Notes

Highlights

This release delivers significant JavaScript refactors to the layout and push menu plugins, fixes several bugs affecting print, pagination, modals, and animations, and updates all dependencies to their latest semver-compatible versions.

Bug Fixes

  • Print layout: Sidebar and main content are now both visible in browser print preview (#5982, PR #5996 by @herley-shaori)
  • Pagination border-radius: Synced _bootstrap-variables.scss calc syntax with Bootstrap 5.3, fixing grouped pagination buttons showing rounded corners on all sides (#5951, reported by @Kneemund)
  • Escape key & modals: handleEscapeKey() no longer bypasses Bootstrap 5's keyboard: false option on modals (#5993, reported by @braytac)
  • slideDown/slideUp animation: Fixed unreliable setTimeout ordering when duration is 0, which caused sidebar treeview instant-open to fail (#5964, PR by @Kneemund)
  • CSS lint: Fixed property order in print layout rules (#5997, reported by @lfiorini)

Refactors

  • Layout transition handling (#5956 by @dfsmania):

    • Fixed broken holdTransition timer (local variable promoted to instance property)
    • Removed duplicate resize event listeners registered on every call
    • Consolidated layout initialization to layout.ts (removed duplication from adminlte.ts)
    • Moved app-loaded class application to layout Data API section
  • Push menu plugin overhaul (#5954 by @dfsmania):

    • Single PushMenu instance instead of creating new instances per event handler
    • Proper separation of setupSidebarBreakPoint() and updateStateByResponsiveLogic()
    • sidebar-open class only added on mobile viewports (aligns with v3 behavior)
    • Configuration now readable from data attributes on sidebar element
    • Removed unused menusClose() method and dead constants

Improvements

  • Login/register box width: Increased from 360px to 400px for better form readability (#5963 by @dfsmania)
  • TypeScript compilation: Added removeComments: true to tsconfig.json, reducing unminified adminlte.js by ~15% (#5953 by @dfsmania)

Dependencies

Updated all packages to latest semver-compatible versions:

  • @astrojs/check 0.9.7, @astrojs/mdx 4.3.13
  • @typescript-eslint/* 8.57.0
  • astro 5.18.0, autoprefixer 10.4.27
  • eslint 9.39.4, eslint-plugin-astro 1.6.0
  • fs-extra 11.3.4, nodemon 3.1.14
  • postcss 8.5.8, prettier 3.8.1
  • rimraf 6.1.3, rollup 4.59.0
  • sass 1.97.3, terser 5.46.0

Breaking Changes

  • Sidebar persistence is now opt-in: enablePersistence defaults to false (was true). To restore the previous behavior where sidebar state is remembered across page loads, add data-enable-persistence="true" to your sidebar element:
    <aside class="app-sidebar" data-enable-persistence="true"></aside>

Contributors

Thank you to everyone who contributed to this release:

  • @dfsmania (Diego Smania) — layout refactor, push menu refactor, login box width, tsconfig cleanup
  • @herley-shaori (Herley) — print layout fix
  • @Kneemund (Moritz Mechelk) — pagination bug report, slideDown/slideUp fix
  • @braytac — escape key modal bug report
  • @lfiorini — CSS lint issue report