Releases: ColorlibHQ/adminlte-vue
Release list
v0.7.1
A documentation-site fix. @adminlte/vue and @adminlte/nuxt are byte-identical to 0.7.0 — the whole diff is inside apps/docs, which is private and ships to nobody, so there is nothing to reinstall.
Fixed
-
Every docs content page blanked out on hydration (#3). The page rendered from SSR and then lost its content, leaving only the sidebar shell.
The trigger was a trailing slash: the payload key is
doc-/guide/color-modebutroute.pathat…/guide/color-mode/is/guide/color-mode/, souseAsyncDatamissed the server payload. On a hydration key miss Nuxt defers the replacement fetch toonBeforeMountrather than awaiting it, sodocwas stillundefinedwhen thecreateError({ fatal: true })guard ran — and a fatal thrown from an async page setup during hydration is swallowed, rendering no error page and logging nothing.A
useDocsPath()composable now normalises the path, and a shareduseCurrentDoc()keys the query once for both the page and the table of contents. The 404 guard also checksstatus !== 'idle', so a future key miss degrades to a late render instead of a silent blank. -
"On this page" was pinned to the first page you visited.
<DocsToc>lives in the persistent layout, so its setup ran once and snapshotted its key; every SPA navigation updated the title, sidebar and pager but left the previous page's headings. Pre-existing, and fixed by the same shared composable.
Verified across all 16 docs pages in both URL forms, at the subpath and the domain root, plus the dev server: SSR and post-hydration body text now match exactly, with zero console errors.
v0.6.0
A dependency and toolchain refresh. No API changes.
Upgraded
Majors: TypeScript 5.9 → 6.0, ApexCharts 5.13 → 6.10 (peer widened to ^4 || ^5 || ^6), @types/node 22 → 26, jsdom 29 → 30.
Minors/patches: Nuxt + @nuxt/kit + @nuxt/schema 4.4.6 → 4.5.2, @nuxt/content 3.14 → 3.15.2, Vite 8.0.14 → 8.2.1, Vue 3.5.35 → 3.5.41, vue-tsc 3.3.10, Vitest 4.1.11, ESLint 10.8.1, typescript-eslint 8.67, Playwright 1.62.1, Tabulator 6.5.2, Tom Select 2.6.2, FullCalendar 6.1.21.
Two fixes the upgrades required
packages/nuxt/src/module.ts— Nuxt 4.5.2 surfacedTS2742(the inferred module type could not be named without a.pnpm/@nuxt+schemapath); the export is now annotatedNuxtModule<AdminlteModuleOptions>. The emitted types are unchanged.apps/demo/app/shims.d.ts— TypeScript 6'sTS2882rejects side-effect imports of the extensionless CSS subpaths; five ambient declarations added.
Held back, deliberately
- TypeScript 7 —
typescript-eslint@8.67.0peers>=4.8.4 <6.1.0; no released build supports TS 7 yet. - FullCalendar 7 — only
@fullcalendar/corehas a stable 7.x; daygrid/timegrid/list/interaction are still 6.1.21 and hard-pincore@~6.1.21. - better-sqlite3 13 — works, but
@nuxt/contentpeers^12.5.0and it adds ~19 MB of foreign-platform prebuilds to the Nitro bundle.
Verified: build, lint, type-check, 59/59 unit tests, demo and docs builds, and all four demo chart pages loaded headlessly on ApexCharts 6 with no console errors.
npm install @adminlte/vue@0.6.0v0.5.0
Tracks AdminLTE core 4.8.1, up from 4.1.0.
What the core bump brings
- The opt-in extended palettes are now shipped by this package:
@adminlte/vue/css/colors(14 designed colours) and@adminlte/vue/css/colors/v3(the 18 AdminLTE 3 originals). - With one of those loaded,
<html data-lte-primary="teal">makes any palette colour Bootstrap'sprimary— buttons, links, pagination, form focus, progress bars — anddata-lte-contrast="aa"fixes the v3 colours that miss WCAG AA. data-lte-print="plain"works from the base stylesheet, for pages that print as documents rather than screens.- Plus the core fixes since 4.1.0: the sidebar height fix with a sidebar filter, the restyled header search,
d-print-noneon the sidebar and app wrapper, and the pagination focus ring.
npm install @adminlte/vue@0.5.0Full notes: CHANGELOG
v0.4.0 — customizable topbar & footer, menu attrs, sidebar navigate
Customization work driven by #2, a security hardening pass, and a CI repair.
Everything here is additive. No breaking changes — if you pass no new props or slots, every component renders exactly as it did in 0.3.0 (the timeline's DOM output is asserted byte-identical in tests).
npm i @adminlte/vue@0.4.0
npm i @adminlte/nuxt@0.4.0 # Nuxt moduleAdded
Topbar user-dropdown slots
The dropdown's user-header, user-body and user-footer blocks were hard-coded to AdminLTE's demo content (the Followers / Sales / Friends row and the Profile / Sign out buttons). All three are now slots — plus user-menu to replace the dropdown body wholesale — and LteDashboardLayout forwards all four, so you never have to mount LteTopbar yourself. Each receives the resolved user; user-footer also receives profile / logout callbacks so custom buttons keep raising the layout's events.
<LteDashboardLayout :menu-items="menu" :user="user" @logout="signOut">
<template #user-footer="{ logout }">
<NuxtLink to="/account" class="btn btn-outline-secondary">Account</NuxtLink>
<button type="button" class="btn btn-outline-danger float-end" @click="logout()">Log out</button>
</template>
</LteDashboardLayout>Footer props on the layout
footerRightText and footerYear props plus a footer-right slot, forwarded to LteFooter — previously reachable only by mounting LteFooter yourself.
attrs on menu nodes
MenuItem.attrs is spread onto the rendered sidebar link and MenuGroup.attrs onto the group's toggle button — data-* test/analytics hooks, aria-*, rel, title. The resolved link target always wins, so attrs can't overwrite href / to.
{ type: 'item', text: 'Profile', href: '/profile', attrs: { 'data-testid': 'nav-profile' } }Sidebar links honor navigate
The navigate callback now drives sidebar navigation too, not just the ⌘K command palette — client-side routing without passing a linkComponent.
Interception is deliberately conservative: modified and middle clicks, target="_blank", external, protocol-relative and hash-only hrefs all stay native, and a click a router link component already handled is skipped. Passing both linkComponent and navigate never navigates twice — verified against the demo (which passes NuxtLink and navigateTo): exactly one history entry per click, back button intact.
LteTimeline body / footer slots
Escaped, scoped (item, index) alternatives to the raw-HTML fields — see Security below.
Security
A hardening pass over the library, the Nuxt module and the workspace dependencies. No known exploited issue — these close sharp edges found while auditing.
LteTimelineraw-HTML fields are flagged and now have a safe alternative.TimelineItem.body/.footerare written withv-html(AdminLTE's markup calls for it), making them a stored-XSS sink for anyone piping user-generated content through a timeline. The JSDoc was also actively misleading — it claimed markup came from the default slot. Both fields now carry an explicit trusted-content warning in the types and docs, and the new slots give an escaped path.- The Nuxt module's theme script no longer interpolates config verbatim.
initialColorModewas substituted straight into the inline<script>whose head sanitizer the module deliberately disables. It is now validated againstlight | dark | auto. Not reachable from user input, but an untyped or runtime-assemblednuxt.configvalue would have been script injection rather than a broken theme. pnpm auditis clean again (was 7 high, now 0). All seven were DoS-class advisories in build-time transitive dependencies of the docs app — none reachable from the published library, which externalizes its dependencies. Fixed with four targetedpnpm.overridesrather than a major bump.@nuxt/contentis pinned to~3.14.0because 3.15.x pulls@nuxt/kit@4.5.2 → unctx@3.0.0 → unplugin → vite@8.0.14, which adds seven new advisories and three unmet peers.
Fixed
- CI runs again. It had failed on every run since 2026-06-11 for two reasons unrelated to the code under test:
pnpm/action-setup@v4hard-errors when both aversion:input and package.json'spackageManagerkey specify a version, and the rootbuildscript passed an unquoted./packages/*to--filter, which the shell expanded into two paths so pnpm read the second as a script name. The setup failure had masked the second bug entirely.
Full changelog: https://github.com/ColorlibHQ/adminlte-vue/blob/main/CHANGELOG.md
Diff: v0.3.0...v0.4.0
v0.3.0 — AdminLTE core 4.1.0
Upgrades the bundled AdminLTE core CSS to 4.1.0 across @adminlte/vue and @adminlte/nuxt.
Changed
@adminlte/vue/cssis ~6 KB gzip smaller — core's duplicate docs styles are gone and the docs/FAQ styling moved to a new, separate stylesheet applications never needed.- WCAG AA contrast fix for breadcrumb links on the content-header background; repaired callout link/code colors.
Added
@adminlte/vue/css/docsexport for the split docs-site stylesheet; the demo's docs layout loads it (SSR-inlined for docs routes only). The build now fails loudly if a promised stylesheet can't be copied.
Docs
- All 25 cloned documentation pages refreshed from core 4.1.0 — including the new component-lifecycle API reference and the rewritten ColorMode guide.
Notes
- Core 4.1.0's new JavaScript (ESM bundle, TypeScript declarations, lifecycle API, bundled ColorMode) does not affect this port at runtime: behavior is re-implemented natively in Vue and
adminlte.jsis never loaded. Theme preferences interoperate with core via the sharedlte-themestorage key.
Verified: 36 unit tests, workspace lint + type-checks, demo SSR and static-export builds with per-route docs styling confirmed.
npm i @adminlte/vue bootstrap # Vue 3
npm i @adminlte/nuxt @adminlte/vue bootstrap # Nuxtv0.1.0 — Official AdminLTE 4 for Vue 3 & Nuxt
The first public release of the official AdminLTE 4 edition for Vue 3 & Nuxt, by Colorlib.
Highlights
- 45+ typed Vue 3 components covering the full AdminLTE 4 design (Bootstrap 5.3)
- Composables-first architecture (no Pinia required), SSR-safe theming, dark mode
- Nuxt module (
@adminlte/nuxt) with auto-imports - ⌘K command palette, RTL support, TypeScript strict
Live demo: https://adminlte.io/themes/vue-nuxt/
Also available: HTML · React/Next.js · Laravel · Django