almasaeed2010/adminlte
AdminLTE is a popular MIT-licensed admin dashboard template built on Bootstrap 5.3 with vanilla JavaScript (no jQuery). Fully responsive, highly customizable, and easy to use for web apps—from mobile to desktop. Live demo and docs available.
A page whose content ended near a sheet boundary still printed one blank sheet.
.app-main carries padding-bottom: $grid-gutter-width * .5 — breathing room above the fold on screen, trailing whitespace on paper. 12px of it was enough to push a page that otherwise ended 1px inside the second sheet onto a third, empty one. In the demo set UI/ribbons.html was the case: three sheets for two sheets of content.
The padding is now cleared in print, along with the negative margin-bottom on .app-content-bottom-area that exists only to cancel it — zeroing one without the other would have pulled the bottom area up over the content.
This is the last of what #6113 reported. Every one of the 90 pages in dist/ was printed to PDF and its final sheet checked: none prints a blank trailing sheet. One page changes page count; nothing else moves.
If you are coming from 4.8.x, the headline change is in 4.9.0 — the header, sidebar and footer no longer print, and data-lte-print="app" brings them back.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.9.0...v4.9.1
A printed page is a document again — the header, sidebar and footer no longer print.
AdminLTE 3 left all three off the paper. v4 printed them, and on a page that prints as a real document the result was the invoice in #6113: 200px of every sheet spent on a menu the reader cannot click, the invoice squeezed into what was left — its own table wrapping "Pro plan subscription" across three lines — and the sidebar's 85 menu items running past the foot of the first sheet. A one-page invoice printed as two, the second all but empty.
The content now gets the full width of the paper. Nothing else about the print styles changed: link targets are still printed after external links, buttons still keep an outline, everything is still black on white.
Both ways back are still there, and both are now honoured properly:
<!-- print the whole shell, as 4.0–4.8 did -->
<html lang="en" data-lte-print="app">
<!-- or bring back one piece: .d-print-flex for the header (it is a navbar),
.d-print-block for the sidebar and footer -->
<aside class="app-sidebar bg-body-secondary shadow d-print-block">…</aside>
.d-print-none still hides anything you don't want on paper, in either mode. data-lte-print is now matched per token, so data-lte-print="plain app" sets both; data-lte-print="plain" is unaffected.
Reported by @johnnyq.
The layout kept its viewport-sized dimensions in print (#6113).
.app-wrapper carries min-height: 100vh and max-width: 100vw, and neither was cleared for print — even though the print block deliberately rewrites that same element's grid. Paper has no viewport to fill: the wrapper reserved a full sheet however short the page was, which is why the printed invoice put its footer at the foot of a sheet of empty grey with the content in the top third, and why anything following the wrapper opened a new page. Both are now reset in print, along with the max-width: 100vw on the header, main and footer.
The print block set display on elements it did not need to.
Forcing display: block on .app-sidebar is what made .d-print-none unable to hide it before 4.6.0, and the same shape would have made .d-print-* unable to show it now. Printing the shell is a matter of not hiding it, so the rules that hide it are scoped out instead, and nothing in the print block forces a display value on the header, sidebar or footer any more.
adminlte.js is untouched; adminlte.css grows by 64 bytes gzipped.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.8.5...v4.9.0
A housekeeping patch: building AdminLTE from source is quiet again. Nothing in dist/ changed behaviour — the compiled CSS is byte-identical to 4.8.4, so this release matters only if you compile the Sass yourself.
npm run production printed six Sass deprecation warnings.
Sass 1.95.0 deprecated the ternary if($condition, $if-true, $if-false) in favour of the CSS if(). The palette sheets used it in three places — lte-needs-aa() in colors/_variables.scss, and the text-colour pick in colors/_primary.scss twice — and since both adminlte-colors.scss and adminlte-colors-v3.scss pull those partials in, three call sites produced six warnings.
They are now plain [@if](https://github.com/if) statements. Deliberately not the if(sass(cond): a; else: b) syntax Sass suggests: that would require Sass >= 1.95 of everyone compiling AdminLTE from source, and we ship the SCSS. [@if](https://github.com/if) compiles on every version, produces byte-identical CSS, and stays stylelint-clean.
Worth recording for anyone who chases this upstream: Bootstrap uses the ternary if() 82 times across bootstrap/scss and warns too — but css-compile already passes --quiet-deps, so none of that reaches your console. Every warning in this report was AdminLTE's own code (#6111, reported by [@lfiorini](https://github.com/lfiorini)).
markdown.rehypePlugins. Astro 7.2.4 deprecates the top-level remarkPlugins / rehypePlugins / remarkRehype keys in favour of an explicit markdown.processor — which would have put a fresh warning into the very command this release is about. The responsive-tables plugin now goes through unified() from [@astrojs](https://github.com/astrojs)/markdown-remark; same pipeline, all 90 built pages byte-identical.nanoid bumped to 3.3.18 in the lockfile — GHSA-2v37-7h3g-55p8 (high), transitive and dev-only. npm audit now reports zero vulnerabilities. Nothing shipped in dist/ was ever affected.typescript-eslint still declares peerDependencies.typescript: ">=4.8.4 <6.1.0" and [@astrojs](https://github.com/astrojs)/check accepts ^5 || ^6, so the toolchain still cannot move.npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.8.4...v4.8.5
Reference tables on the documentation pages pushed the page sideways on a phone.
Markdown pipe-tables render as a bare <table> with no scroll container, so anything wider than about three columns overflowed the viewport — 265px of it on the Colors page at 390px wide, right after 4.8.3 fixed the header's own overflow.
They are now wrapped in .table-responsive with a tab stop, exactly like the hand-written tables beside them: the table scrolls inside the content column, and the scrollable region stays keyboard-reachable. Desktop layout is unchanged.
Only affects the documentation pages shipped in dist/docs/; adminlte.css and adminlte.js are untouched.
npm install [email protected]
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.8.3...v4.8.4
Every page scrolled sideways on a phone.
At 390px the header's right-hand item row — messages, notifications, fullscreen, user menu — is a few pixels wider than the viewport at Bootstrap's default 1rem nav-link padding. document.scrollWidth measured 412 against a 390 clientWidth on all 90 demo pages: a horizontal scrollbar on every screen, on every AdminLTE 4 page.
Below sm the header now halves --bs-navbar-nav-link-padding-x. From sm up nothing changes — the user menu keeps its 182px width and its label. Measured 412/390 before and 390/390 after; desktop unaffected.
If you check this yourself: compare scrollWidth with clientWidth, not window.innerWidth. The layout viewport widens to match the overflow, so the innerWidth comparison silently passes — which is how this survived this long.
npm install [email protected]
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.8.2...v4.8.3
A maintenance release: the build toolchain is current again. dist/ is byte-identical to 4.8.1, so there is nothing to change in your project — upgrade only if you build AdminLTE from source.
astro 7.1.6 → 7.2.3 · @astrojs/mdx 7.0.5 → 7.0.6 · eslint 10.8.0 → 10.8.1 · @typescript-eslint/{eslint-plugin,parser} + typescript-eslint 8.66.0 → 8.67.0 · vitest 4.1.10 → 4.1.11 · happy-dom 20.11.1 → 20.11.2 · axe-core 4.12.1 → 4.13.0 · terser 5.49.2 → 5.50.0 · postcss 8.5.25 → 8.5.26 · globals 17.9.0 → 17.11.0 · concurrently 10.0.4 → 10.0.5 · lockfile-lint 5.0.0 → 5.0.1
All within their current majors. Lint, 74 unit tests, bundlewatch and the axe accessibility gate are green.
TypeScript 7.0.2 is out, but typescript-eslint still declares peerDependencies.typescript: ">=4.8.4 <6.1.0" and [@astrojs](https://github.com/astrojs)/check accepts ^5 || ^6. The toolchain moves when they do.
npm install [email protected]
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.8.1...v4.8.2
A keyboard-accessibility fix on top of 4.8.0, reported by [@johnnyq](https://github.com/johnnyq) (#6109).
data-lte-primaryBoth palette sheets shipped a literal Sass variable name in their compiled output:
[data-lte-primary] .pagination {
--bs-pagination-focus-box-shadow: 0 0 0 $pagination-focus-box-shadow-width rgba(var(--bs-primary-rgb), 0.25);
}
Sass does not evaluate $variables inside a custom property value — it emits them verbatim rather than failing — so the typo compiled cleanly, reached the browser as text, and made the declaration invalid. --bs-pagination-focus-box-shadow then resolved to nothing and keyboard focus on .page-link was invisible wherever data-lte-primary was in use. Introduced in 4.6.0.
The variable it named never existed in Bootstrap either (the pagination focus shadow comes from $focus-ring-box-shadow), so interpolating it would not have compiled. The value is now built from the focus-ring tokens and reuses the --bs-focus-ring-color the sheet already sets, so the ring follows the theme colour:
--bs-pagination-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
A unit test now scans the compiled output of all three sheets for unresolved Sass variables. Compilation cannot catch this class of typo, which is exactly why it shipped — this was the only instance in the repo, and adminlte.css was never affected.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.8.0...v4.8.1
[@johnnyq](https://github.com/johnnyq) measured the AdminLTE 3 palette against WCAG AA and found eight colours that miss it with the text v3 assigns them (#6110). The values stay exactly as they were — there is now a switch for the text.
data-lte-contrast="aa"<html lang="en" data-lte-contrast="aa">
Flips the text on the eight colours whose assigned ink falls short, leaving every background byte-identical:
| Colour | Default (v3 rule) | With aa |
|---|---|---|
teal #20c997 |
white — 2.13:1 | black — 9.86:1 |
cyan #17a2b8 |
white — 3.04:1 | black — 6.90:1 |
green #28a745 |
white — 3.13:1 | black — 6.70:1 |
olive #3d9970 |
white — 3.51:1 | black — 5.99:1 |
lightblue #3c8dbc |
white — 3.67:1 | black — 5.73:1 |
fuchsia #f012be |
white — 3.79:1 | black — 5.54:1 |
pink #e83e8c |
white — 3.82:1 | black — 5.50:1 |
blue #007bff |
white — 3.98:1 | black — 5.28:1 |
It covers everywhere the palette paints text on its own colour — .text-bg-*, .bg-gradient-*, .card-* headers, .direct-chat-*, and the button, badge and pill text that data-lte-primary produces, which is where this mattered most: one attribute puts a colour on buttons, pills, pagination and list groups at once.
Three details worth knowing:
#1f2d3d clears 4.5:1 on only two of the eight. The colours that already carry dark text — lime, orange, yellow — keep #1f2d3d and are left alone.data-bs-theme="light" so its nav links follow the heading. The demo pages do that for you when the switch is on.adminlte-colors.css emits not one byte for this and the attribute is safe to leave in your markup either way.UI → Colors and Theme Customize gained a toggle, and the Colors page documents it.
data-lte-primary="info" gave white text on cyan with the v3 sheet loaded. The presets applied the active sheet's contrast rule to Bootstrap's own theme colours, and v3's YIQ test puts #0dcaf0 at 149.8 against a threshold of 150 — a tenth of a point from dark text — so it produced 1.96:1 while .btn-info on the same page stayed black. Bootstrap's theme colours now keep Bootstrap's own contrast rule; the palette colours keep the sheet's.npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte-colors-v3.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.7.0...v4.8.0
A print follow-up to 4.6.0, from [@johnnyq](https://github.com/johnnyq) again (#6108) — plus a printing bug that turned out to be worse than reported.
data-lte-print="plain"Two rules in AdminLTE's print stylesheet restyle content unconditionally: the target of every external link is printed after it, and buttons are outlined in black. Both are HTML5 Boilerplate conventions, sensible when you're printing a copy of a web page — and wrong for an invoice, quote or work order that goes to a customer, where Pay online (https://pay.example.com/inv/12345?token=…) is not what anyone wants on paper.
<html lang="en" data-lte-print="plain">
That turns both off. Text still prints black on white, so nothing becomes unreadable, and it works on any container if only part of the page is the document:
<div class="card" data-lte-print="plain">…the invoice…</div>
Setting it from JavaScript right before window.print() works too. Hide the chrome with Bootstrap's own .d-print-none, which has worked on the sidebar and header since 4.6.0.
Note .d-print-none could not have been the opt-out here: it hides an element, and these rules restyle elements that are meant to print.
.nav-link alongside .btn, and the sidebar prints by design (since the 4.0.0 print fix), so a printed page came out with a black rectangle around all 85 menu items. The outline now applies to .btn only — a button still reads as a button on paper — while nav links keep the ink-saving black-on-transparent treatment and print as ordinary text.--bs-primary on :root, which is exactly what leaves .btn-primary blue. It now gives the two approaches that work: $primary in Sass, or data-lte-primary with the palette sheet.New recipe: Printing a page as a document — the attribute, scoping it to part of a page, hiding chrome, and printing from a button.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.6.0...v4.7.0
Two reports from [@johnnyq](https://github.com/johnnyq), both fixed — and the second one turned into the feature the AdminLTE 3 palettes were missing.
primary — data-lte-primary (#6107)Bootstrap compiles $primary into its components: .btn-primary ships with --bs-btn-bg: #0d6efd, not var(--bs-primary). Overriding the token repainted the utilities and left every button, pagination, checkbox and focus ring blue — which is why picking a skin looked half-applied.
Both colour sheets now rewire those components and point them at a palette colour with one attribute:
<html lang="en" data-lte-primary="lightblue">
Nothing changes without the attribute, and it works on any container, so one page can carry more than one primary.
What follows the colour: .btn-primary and .btn-outline-primary (hover, active and disabled states shaded exactly as Bootstrap shades its own), .btn-link, links and .link-primary, the --bs-primary token trio, .nav-pills, .pagination, .progress-bar, .list-group-item.active, .dropdown-item.active, .accordion, .form-control / .form-select focus, checkboxes, radios, switches, .form-range, --bs-focus-ring-color, plus AdminLTE's .card-primary, .direct-chat-primary and .toast-primary — in both colour modes, with Bootstrap's dark-mode link tint.
data-lte-primary="danger" needs no palette colour.--bs-primary; in Sass, $lte-palette-custom: ("brand": #7a5af8) generates a full preset, shades and contrast text included.Documented on the Colors page.
d-print-none did nothing on the sidebar and the app wrapper (#6106). The print layout fix from 4.0.0 set display: grid !important / display: block !important on those two elements and, being later in the cascade, beat Bootstrap's .d-print-none. Both rules are now scoped with :not(.d-print-none) — the print layout still applies by default, and the display utilities win where a page asks them to..skip-link:hover painted var(--bs-primary-emphasis), which Bootstrap does not define, so the background computed to transparent and left white text on the page background.Computed colours in both palette sheets are emitted as hex instead of Sass's rgb(5.647%, 40.784%, 39.216%) (cleancss leaves values inside custom properties alone), which pays for most of the new feature: adminlte-colors.css is 7.8 kB gzipped, adminlte-colors-v3.css 9.1 kB. adminlte.css is unchanged.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<!-- optional: the extended palette, or adminlte-colors-v3.min.css for the AdminLTE 3 originals -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte-colors.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full notes: CHANGELOG
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.5.0...v4.6.0
AdminLTE 4.5.0 adds the one thing 4.4.0's palette couldn't offer: the AdminLTE 3 colours exactly as they were.
4.4.0 brought the extra colours back as a palette designed for 4.4 — and some of you liked the originals better. Fair enough. A second opt-in sheet, dist/css/adminlte-colors-v3.css, gives you exactly those: the 18 AdminLTE 3 colours — lightblue, navy, olive, lime, fuchsia, maroon, blue, indigo, purple, pink, red, orange, yellow, green, teal, cyan, gray, gray-dark — with the values from the 3.2 build and v3's text-colour rule (white on lightblue, olive, teal, cyan …; dark on lime, orange, yellow), emitting the same class families as the designed palette: --bs-* tokens with dark-mode variants, .bg-*, .text-bg-*, .text-*, .border-*, .link-*, .bg-gradient-*, .card-*, .callout-*, .direct-chat-*.
The two sheets share class names, so load one of them:
<!-- either the palette designed for 4.4 … -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte-colors.min.css">
<!-- … or the AdminLTE 3 originals -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte-colors-v3.min.css">
text-bg-* + data-bs-theme on the header and sidebar (text-bg-gray-dark is the exact sidebar-dark-* background).$lte-palette-contrast: "wcag" | "yiq" knob (plus $lte-palette-yiq-threshold, -text-dark, -text-light), so $lte-palette-custom and $lte-palette-aliases work with the v3 sheet too. npm run palette -- --check and the unit tests keep the v3 map in step.Requested in #6103 by @johnnyq. adminlte.css and adminlte.js are unchanged.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full details in the CHANGELOG.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.4.0...v4.5.0
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.4.1...v4.5.0
AdminLTE 4.4.1 is a small patch on top of yesterday's 4.4.0: the demo's charts now follow dark mode.
theme.mode from <html data-bs-theme> before any chart is created, keeps the chart background transparent, and watches the attribute so every chart with a chart.id follows the toggle, the OS preference in auto mode, or your own code — no reload. All demo charts got ids. Documented as the “Charts that follow dark mode” recipe on the Recipes page, with the pattern for other libraries.adminlte.css and adminlte.js are unchanged from 4.4.0 — this release updates the demo pages and docs shipped in dist/.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<!-- optional: the extended palette -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte-colors.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full details in the CHANGELOG.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.4.0...v4.4.1
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.4.0...v4.4.1
AdminLTE 4.4.0 brings the extra colours back — as a designed, opt-in palette with skins and presets — restyles the header search, and fixes the sidebar height regression from 4.3.0.
AdminLTE 3 had .bg-navy, .bg-teal, .bg-fuchsia and the sidebar skins baked into its CSS. v4 dropped them; 4.4.0 brings them back as a separate stylesheet, dist/css/adminlte-colors.css (≈ 5 kB gzipped). adminlte.css is byte-for-byte unchanged, so nobody pays for colours they don't load.
<link rel="stylesheet" href="css/adminlte.css">
<link rel="stylesheet" href="css/adminlte-colors.css">
Rather than copying the v3 hexes (several of which had white text below 4:1), the palette was generated in OKLCH: fourteen colours — orange, amber, olive, teal, sky (the old lightblue), indigo, violet, fuchsia, pink, and the chrome neutrals navy, steel, slate, graphite, midnight. Every one takes white text at ≥ 4.6:1, hues sit in the gaps between Bootstrap's theme colours so they mix cleanly with primary/success/…, and the neutrals sit at the lightness steps popular admin kits use for their sidebars. npm run palette -- --check and a unit test hold it to those rules.
Each colour gets the full set: --bs-* tokens (with dark-mode subtle/emphasis variants), .bg-*, .text-bg-*, .text-*, .border-*, .link-*, .bg-gradient-* (also for the eight theme colours, as in v3), .card-* / .card-outline, .callout-*, .direct-chat-*, and a hover shade for .btn.bg-*.
Skins are just text-bg-* + data-bs-theme on the sidebar and header — no CSS of their own:
<nav class="app-header navbar navbar-expand text-bg-sky" data-bs-theme="dark">…</nav>
<aside class="app-sidebar text-bg-navy shadow" data-bs-theme="dark">…</aside>
There are 17 presets in four families — light, semi-dark, full dark, coloured & gradient — each with a layout thumbnail, plus four dashboard sets (which four colours to put on a widget row, chosen by hue relationship). Your own brand colour is one line of Sass, $lte-palette-custom: ("brand": #0f766e); v3 class names come back with $lte-palette-aliases: ("lightblue": "sky", "maroon": "pink").
Requested in #6103 by @johnnyq.
The navbar search from 4.3.0 was a raw .input-group with an outline button and no styling of its own, which fell apart on coloured headers. It is now a quiet pill with the search icon inside as the submit button, coloured only from theme-relative tokens — soft glass on any coloured or dark header, soft grey on a white one — that widens slightly on focus. The sidebar filter gets the same treatment (mixins/_search-field.scss, $lte-search-field-* variables). Below md a search icon links to the search page.
.sidebar-wrapper was sized with a hard-coded 100vh − header height, which assumed only the brand sat above it. .app-sidebar is now a flex column and the wrapper fills whatever is left, so anything placed above or below the menu sizes correctly.data-widget="navbar-search" snippet; it now shows the real markup.npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<!-- optional: the extended palette -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte-colors.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full details in the CHANGELOG.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.3.1...v4.4.0
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.3.1...v4.4.0
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.
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).
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/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.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.3.0...v4.3.1
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.
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.
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.
.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.
.ratio box plus .object-fit-cover; the filter is page-local script. Nothing is added to adminlte.js.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.
#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.npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full details in the CHANGELOG.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.2.0...v4.3.0
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.
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 layoutsFrameworks 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).
forms/advanced.html — the recommended Tom Select and Flatpickr integrationsforms/editors.html — Quill 2 in both the snow (toolbar) and bubble (inline) themeslayout/top-nav.html — a sidebar-less layout with primary navigation in the app-header<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)localStorage keyEvery 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](https://github.com/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.
npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
// Or as a module
import { PushMenu, ColorMode } from "admin-lte"
Full details in the CHANGELOG.
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.
// This now works out of the box in Vite/webpack — with full type checking:
import { PushMenu, CardWidget, ColorMode } from "admin-lte"
dist/js/adminlte.esm.js + .min) alongside the UMD builddist/js/types/ — types, module, and a full exports map (with sass and style conditions) in package.jsonbootstrap is a peer dependency, so compiling [@use](https://github.com/use) "admin-lte/src/scss/adminlte" works right after npm install admin-lteEvery 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.
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.
npm run productionnpm 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)adminlte-docs.css: adminlte.min.css is now ~40.4 KB gzip, down from 46.7 KB in 4.0.3_bootstrap-overrides.scss (compiled CSS byte-identical)npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
// Or as a module
import { PushMenu } from "admin-lte"
Full details in the CHANGELOG.
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.
[autofocus]).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.aria-expanded to assistive tech.matchMedia — mobile URL-bar/keyboard resizes no longer re-expand a sidebar you collapsed; fixed a 992px off-by-one between JS and CSS.<h1>; breadcrumbs are navigation landmarks; all icon-only buttons carry aria-labels; auth forms have real labels and <main> landmarks.files allowlist instead of .npmignore, so stray local files can never leak into the tarball again, and engines: node >= 20 is declared.npm install [email protected]
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
Full details in the CHANGELOG.
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
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)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)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)npm run production pipeline (lint + Astro build + bundlewatch) passes and npm audit stays at 0 vulnerabilities. This single update supersedes Dependabot PRs #6065–#6074.AdminLTE 4 is also available as official framework integrations: adminlte-vue (Vue 3 & Nuxt), adminlte-react (React & Next.js), adminlte-django, and adminlte-laravel.
npm install [email protected]
Or via CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
See CHANGELOG.md for the full notes.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.0.2...v4.0.3
AdminLTE 4.0.2 — a housekeeping patch: building from source is clean again.
📖 Documentation · 🎨 Live preview · 🚀 Migration from v3
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)AdminLTE 4 is also available as official framework integrations: adminlte-vue (Vue 3 & Nuxt), adminlte-react (React & Next.js), adminlte-django, and adminlte-laravel.
npm install [email protected]
Or via CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
See CHANGELOG.md for the full notes.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.0.1...v4.0.2
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.0.1...v4.0.2
AdminLTE 4.0.1 — first patch for the v4 line, and the launch of the AdminLTE family.
📖 Documentation · 🎨 Live preview · 🚀 Migration from v3
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.
accessibility.js no longer assigns role="navigation" to <ul>/<ol> elements, which broke list semantics and failed the Lighthouse accessibility audit. (#6038, reported by @lfiorini)axios pinned via npm overrides to clear a transitive advisory — local npm audit reports 0 vulnerabilities.scripts/social-preview.mjs), excluded from the npm package.npm install [email protected]
Or via CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
See CHANGELOG.md for the full notes.
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.0.0...v4.0.1
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
prefers-color-scheme integration.eslint-plugin-import, eslint-config-xo*, and the legacy .eslintrc.json. Flat config only.overrides for yaml and stylelint-config-twbs-bootstrap mean npm install runs without --legacy-peer-deps and reports 0 vulnerabilities.| 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.
npm install [email protected]
Or via CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
See CHANGELOG.md for the full notes.
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.
_bootstrap-variables.scss calc syntax with Bootstrap 5.3, fixing grouped pagination buttons showing rounded corners on all sides (#5951, reported by @Kneemund)handleEscapeKey() no longer bypasses Bootstrap 5's keyboard: false option on modals (#5993, reported by @braytac)setTimeout ordering when duration is 0, which caused sidebar treeview instant-open to fail (#5964, PR by @Kneemund)Layout transition handling (#5956 by @dfsmania):
holdTransition timer (local variable promoted to instance property)resize event listeners registered on every calllayout.ts (removed duplication from adminlte.ts)app-loaded class application to layout Data API sectionPush menu plugin overhaul (#5954 by @dfsmania):
PushMenu instance instead of creating new instances per event handlersetupSidebarBreakPoint() and updateStateByResponsiveLogic()sidebar-open class only added on mobile viewports (aligns with v3 behavior)menusClose() method and dead constantsremoveComments: true to tsconfig.json, reducing unminified adminlte.js by ~15% (#5953 by @dfsmania)Updated all packages to latest semver-compatible versions:
[@astrojs](https://github.com/astrojs)/check 0.9.7, [@astrojs](https://github.com/astrojs)/mdx 4.3.13[@typescript-eslint](https://github.com/typescript-eslint)/* 8.57.0astro 5.18.0, autoprefixer 10.4.27eslint 9.39.4, eslint-plugin-astro 1.6.0fs-extra 11.3.4, nodemon 3.1.14postcss 8.5.8, prettier 3.8.1rimraf 6.1.3, rollup 4.59.0sass 1.97.3, terser 5.46.0enablePersistence 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>
Thank you to everyone who contributed to this release:
npm install [email protected]
This release represents a complete modernization of the AdminLTE codebase, bringing it up to current standards with the latest tooling, dependencies, and best practices.
npm start command, improved scripts, cleaner builds# Install dependencies
npm install
# Start development server
npm start
# Build for production
npm run production
"type": "module" in package.jsonastro: 4.15.12 → 5.10.0eslint: 8.57.1 → 9.29.0bootstrap: 5.3.3 → 5.3.7sass: 1.78.0 → 1.89.2typescript: 5.6.2 → 5.8.3For Users:
For Developers:
npm start command for developmenteslint.config.jsSee CHANGELOG.md for complete technical details.
Download: Use npm: npm install [email protected] or download the source code below.
dist.js-beautify with prettier for code formatting.sass to a compatible version.astro to version 5.bootstrap to version 5.3.3.@spizzo14 @tomhappyblock @stefanmorderca @tito10047 @sitchi @npreee @isaacmorais
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.0.0-beta2...v4.0.0-beta3
.layout-fixed-complete class and component.@spizzo14 @tomhappyblock @stefanmorderca @tito10047 @sitchi @npreee
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v4.0.0-beta1...v4.0.0-beta2
@spizzo14 @stefanmorderca @tomhappyblock @tito10047 @sitchi
Full Changelog: https://github.com/ColorlibHQ/AdminLTE/compare/v3.2.0...v4.0.0-beta1
Breaking Change! We dropped official node v12, it might be still work but we won't give support for any node 12 bugs/errors.
Top-Features:
Fixes:
Changes:
Thanks for your awesome contribution @liljack, @danny007in, @curiousteam, @equada, @Shidersz, @gurvirlochab, @ZhangChengLin, @mostafahesham-dev, @smtbos, @leonardxfce, @anilloutombam, @13324, @SmileYzn, @hkvstore, @rikuson, @kreic51, @forxer & @mahmoudalsaman.
For the complete changelog look here.
Breaking Change! Changed SCSS filename case
build/scss/AdminLTE-raw.scss → build/scss/_adminlte.raw.scssbuild/scss/AdminLTE.scss → build/scss/adminlte.scssbuild/scss/AdminLTE-components.scss → build/scss/parts/adminlte.components.scssbuild/scss/AdminLTE-core.scss → build/scss/parts/adminlte.core.scssbuild/scss/AdminLTE-extra-components.scss → build/scss/parts/adminlte.extra-components.scssbuild/scss/AdminLTE-pages.scss → build/scss/parts/adminlte.pages.scssbuild/scss/AdminLTE-plugins.scss → build/scss/parts/adminlte.plugins.scssNew in v3.1:
Changes:
rel=noopener for external linksdiplay=fallback for Google Fontsfullcalendar)fullcalendar)fullcalendar)fullcalendar)fullcalendar)Thanks to @XhmikosR for the 55+ incredible PR's also Thanks for the PR's to @shawnheide, @mineminemine, @shailesh-ladumor, @SmileYzn, @yangfuhai, @nisarhassan12, @danny007in
For the complete changelog look here.
This is only short description, the complete will come in the full release.
Breaking Change! Changed SCSS filename case
build/scss/AdminLTE-raw.scss → build/scss/_adminlte.raw.scssbuild/scss/AdminLTE.scss → build/scss/adminlte.scssbuild/scss/AdminLTE-components.scss → build/scss/parts/adminlte.components.scssbuild/scss/AdminLTE-core.scss → build/scss/parts/adminlte.core.scssbuild/scss/AdminLTE-extra-components.scss → build/scss/parts/adminlte.extra-components.scssbuild/scss/AdminLTE-pages.scss → build/scss/parts/adminlte.pages.scssbuild/scss/AdminLTE-plugins.scss → build/scss/parts/adminlte.plugins.scssNew in v3.1:
For the complete changelog look here.
Thanks to @medardm, @danny007in, @erdkse & @ddiskandar for your PR's.
For the complete changelog look here.
5.11.2 to 5.13.04.3.0 to 4.4.04.3.1 to 4.4.04.3.0 to 4.4.04.3.0 to 4.4.04.3.0 to 4.4.02.2.1 to 3.1.44.3.1 to 4.4.13.1.2 to 3.2.01.3.2 to 1.3.43.4.5 to 3.4.63.2.13 to 4.2.08.1.0 to 9.0.04.0.9 to 5.0.32.3.0 to 2.3.13.2.2 to 3.3.01.10.0 to 1.11.00.1.62 to 0.1.651.16.0 to 1.16.14.0.12 to 4.0.130.8.12 to 0.8.168.19.0 to 9.10.87.7.4 to 7.8.47.7.4 to 7.9.07.7.4 to 7.8.37.7.4 to 7.9.09.7.3 to 9.7.510.0.3 to 10.1.03.2.1 to 3.4.26.7.2 to 6.8.03.3.0 to 3.5.11.19.4 to 2.0.26.1.3 to 7.1.01.27.8 to 2.3.24.3.3 to 4.4.03.0.1 to 3.0.21.0.1 to 1.1.34.4.2 tom 4.6.10For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
For the complete changelog look here.
Thanks for the great response for v3.0.0-rc.1.
For the complete changelog look here.
For the complete changelog look here.
package.json and bower.jsonFor the complete changelog look here.
For the complete changelog look here.
Thanks @Leviasan @andymark-by @maxwellmc for your PRs
ENOTFOUND Package [@dev](https://github.com/dev) not found% to vh & added content-wrapper calc() with collapsed header* to [@dev](https://github.com/dev) to avoid minimum-stability errorcolor: inherit to .tableheader from 1000 to 900 sidebar from 1100 to 950 (below bootstrap 4 defaults to work with dropdown, modal, popover & tooltip).content-wrapper min-height.nav-child-indent on ul.nav-sidebar[@gray](https://github.com/gray) instead of [@gray-lighter](https://github.com/gray-lighter)How can I help you explore Laravel packages today?