Update dependency nuxt to v4 #3
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "renovate/major-nuxtjs-monorepo"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
^3.15.4->^4.0.0Release Notes
nuxt/nuxt (nuxt)
v4.2.2Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
page:finishhook (#33707)tsconfig.server.json(#33510)moduleDependenciesby meta name (#33774).d.vue.tsdeclarations (1c73525a2)callOnceduring HMR (#33810)useAsyncData(#33802)rootDirto cached layer config (#33779)moduleDependencies->installModule(#33689)💅 Refactors
callOncefunction (#33825)📖 Documentation
erroras non-optional prop (#33763)🏡 Chore
✅ Tests
patchPropandnodeOpsto excluded Vue helpers (#33754)🤖 CI
--pnpmflag to correctly publish prerelease (#33688)❤️ Contributors
v4.2.1Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
ImportPresetWithDeprecation(#33596)<nuxt-error-overlay>iframe border (#33625)moduleEntryPaths(#33628)optimizeDepsconfig is applied before other plugins (#33586)pages:resolved(#33662)vite-node(#33663)💅 Refactors
📖 Documentation
pendingas alias ofstatus === 'pending'(#33221)cookieStoreistrueby default (#33572)useHead/useHydration/useLazy*(#33626)🏡 Chore
verifyDepsBeforeRun: install(#33603)🤖 CI
❤️ Contributors
v4.2.0Compare Source
👀 Highlights
We're excited to announce Nuxt 4.2, bringing new capabilities for better TypeScript DX, enhanced error handling, and improved control over data fetching! 🎉
🎯 Abort Control for Data Fetching
You can now use
AbortControllersignals directly withinuseAsyncData, giving you fine-grained control over request cancellation (#32531).This works by passing an internal signal to your
useAsyncDatahandlerto cancel any promise that can be canceled, such as$fetch.You also pass an
AbortControllersignal directly torefresh/execute, giving you fine-grained control over request cancellation. This is particularly useful when you need to abort requests based on user actions or component lifecycle events.🎨 Better Error Pages in Development
When an error occurs during development, Nuxt will now display both your custom error page and a detailed technical error overlay (#33359). This gives you the best of both worlds – you can see what your users will experience while also having immediate access to stack traces and debugging information.
The technical overlay appears as a toggleable panel that doesn't interfere with your custom error page, making it easier to debug issues while maintaining a realistic preview of your error handling.
🔮 Opt-in Vite Environment API
For those wanting to experiment with cutting-edge features, you can now opt into the Vite Environment API (#33492).
The Vite Environment API is a major architectural improvement in Vite 6. It closes the gap between development and production by allowing the Vite dev server to handle multiple environments concurrently (rather than requiring multiple Vite dev servers, as we have done previously in Nuxt).
This should improve performance when developing and eliminate some edge case bugs.
... and it is the foundation for implementing Nitro as a Vite environment, which should speed up the dev server still further, as well as allowing more greater alignment in development with your Nitro preset.
This is also the first breaking change for Nuxt v5. You can opt in to these breaking changes by setting
compatibilityVersionto5:Please only use this for testing, as this opts in to unlimited future breaking changes, including updating to Nitro v3 once we ship the Nuxt integration.
📦 New
@nuxt/nitro-serverPackageWe've extracted Nitro server integration into its own package:
@nuxt/nitro-server(#33462). This architectural change allows for different Nitro integration patterns and paves the way for future innovations in server-side rendering.While this change is mostly internal, it's part of our ongoing effort to make Nuxt more modular and flexible. The new package provides standalone Nitro integration and sets the foundation for alternative integration approaches (such as using Nitro as a Vite plugin in Nuxt v5+).
⚡ Performance Improvements
We've also shipped several performance enhancements:
📉 Async Data Handler Extraction
One of the most exciting performance improvements is the new experimental async data handler extraction (#33131). When enabled, handler functions passed to
useAsyncDataanduseLazyAsyncDataare automatically extracted into separate chunks and dynamically imported.This is particularly effective for prerendered static sites, as the data fetching logic is only needed at build time and can be completely excluded from the client bundle.
For static/prerendered sites, enable it in your config:
The extracted handlers are then tree-shaken from your client bundle when prerendering, as the data is already available in the payload. This results in significantly smaller JavaScript files shipped to your users.
🔧 Experimental TypeScript Plugin Support
We're introducing experimental support for enhanced TypeScript developer experience through the
@dxup/nuxtmodule.This module adds a number of TypeScript plugins that aim to improve your experience when using Nuxt-specific features:
import(\~/assets/${name}.webp`)`$fetch,useFetch,useLazyFetch)@dxup/unimportplugin for better navigation with auto-imported composables and utilitiesTo enable this feature, set
experimental.typescriptPlugintotruein your Nuxt configuration:Once enabled, the module will be automatically installed and configured by Nuxt.
🎁 Other Improvements
declarationPath– You can now specify a custom declaration path for components (#33419)resolveModulenow accepts anextensionsoption (#33328)setGlobalHeadutility in kit for easier head management (#33512)🩹 Important Fixes
routeRules(#33222)loadNuxtConfigwith proper cleanup (#33420)hrefnow works correctly in<NuxtLink>(c69e4c30d)h()function (#33509)✅ Upgrading
Our recommendation for upgrading is to run:
This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
declarationPath(#33419)extensionsoption forresolveModule(#33328)useAsyncData(#32531)future.compatibilityVersionto5(22f4693a1)setGlobalHeadutility (#33512)🔥 Performance
🩹 Fixes
routeRules(#33222)loadNuxtConfigin concurrent calls (#33420)hrefin<NuxtLink>(c69e4c30d)mergeModelsfrom auto imports (#33344)shortPathproperty (#33384)declarationPathfrom component dirs (191bcb7e9)isPrerenderedcheck (#33476)h()(#33509)NuxtTimerelative timenumericprop (#33552)NuxtTimerelative timerelativeStyleprop (#33557)optimizeDeps.includefor server environment (#33550)💅 Refactors
shortPathproperty (#33384)extend,extendConfig, andconfigResolvedhooks (e060b9695)@nuxt/nitro-serverpackage (#33462)RouteLocationNormalizedLoadedGenericinternally (b51cb3067)📖 Documentation
addServerPluginnote (#33409)declarationPathinaddComponent(#33380)getLayerDirectories()instead ofnuxt.options._layers(#33484)4.xprefix (5c0bb9285)moduleDependencies(#33499)🏡 Chore
test:prepare(6ef632b82)test:prepare(eca36cfe5)vue-demifromignoredBuiltDependencies(#33494)sincein nightly releases (74ca73ca1)@rollup/plugin-commonjs(cd12980ce)✅ Tests
🤖 CI
@nuxt/nitro-serveron pkg-pr-new (b7ccf17bf)❤️ Contributors
v4.1.3Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
🩹 Fixes
prepare:typeshook (#33239)h(#33046)headoption onuseHead(#33318)cdnURLis set (#33333)imports.dirs(#33334)<NuxtLink>(#33335)v-slot:fallbacklongform syntax in<DevOnly>(#33368)typeFromwhen generating auto-import type templates (#33373)@nuxt/scripts(bed410d60)useAsyncData(#33325)_pathproperty configurable for HMR (#33379)useAsyncDatawith different key on ssr (#33341)💅 Refactors
typed-router.d.tsearly for consistency (#33285)nitro:prepare:typeshook (#33286)filenameintocomponentsIslandsTemplatedefinition (#33394)📖 Documentation
4.xprefix to all internal links (#33264)useFetchreactivity (#33317)4.xprefixes in urls (47ea684c7)nuxt.configpage (b438d44e1)preparecommandNODE_ENVbehavior (#33330)nuxtcommand pages (#33336)🏡 Chore
.npmrc(14514329b)✅ Tests
gotoPathtimeout in CI (f1e5a2d4c)🤖 CI
❤️ Contributors
v4.1.2Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
dstis present (#33200)hydrate-whenlazy hydration strategy (#33199)🩹 Fixes
pkg-typesto dependencies (9fe2541ca)backgroundSizein loading indicator (#33211)enabledfrom components dir options (#32844)📖 Documentation
app/suffix to a few links (#33217)🏡 Chore
✅ Tests
❤️ Contributors
v4.1.1Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
globalThisoverwindow(#33125)deps.inline(#33133)useRouteusage warning (#33039)imports:sourcesin override warning (#33050)📖 Documentation
--to bun create command (5e661f0ca)app/prefix in lots of cases (#33117)navigateTo(#21442)🏡 Chore
rou3github url (#33130).tsextension (db9d840e1)🤖 CI
4xtags from releases (1cd8a6857)❤️ Contributors
v4.1.0Compare Source
👀 Highlights
🔥 Build and Performance Improvements
🍫 Enhanced Chunk Stability
Build stability has been significantly improved with import maps (#33075). This prevents cascading hash changes that could invalidate large portions of your build when small changes are made:
By default, JS chunks emitted in a Vite build are hashed, which means they can be cached immutably. However, this can cause a significant issue: a change to a single component can cause every hash to be invalidated, massively increasing the chance of 404s.
In short:
Obviously this wasn't optimal. With this new feature, the hash of (otherwise) unchanged files which import the entry won't be affected.
This feature is automatically enabled and helps maintain better cache efficiency in production. It does require native import map support, but Nuxt will automatically disable it if you have configured
vite.build.targetto include a browser that doesn't support import maps.And of course you can disable it if needed:
🦀 Experimental Rolldown Support
Nuxt now includes experimental support for
rolldown-vite(#31812), bringing Rust-powered bundling for potentially faster builds.To try Rolldown in your Nuxt project, you need to override Vite with the rolldown-powered version since Vite is a dependency of Nuxt. Add the following to your
package.json:npm:
pnpm:
yarn:
bun:
After adding the override, reinstall your dependencies. Nuxt will automatically detect when Rolldown is available and adjust its build configuration accordingly.
For more details on Rolldown integration, see the Vite Rolldown guide.
🧪 Improved Lazy Hydration
Lazy hydration macros now work without auto-imports (#33037), making them more reliable when component auto-discovery is disabled:
This ensures that components that are not "discovered" through Nuxt (e.g., because
componentsis set tofalsein the config) can still be used in lazy hydration macros.📄 Enhanced Page Rules
If you have enabled experimental extraction of route rules, these are now exposed on a dedicated
rulesproperty onNuxtPageobjects (#32897), making them more accessible to modules and improving the overall architecture:The
defineRouteRulesfunction continues to work exactly as before, but now provides better integration possibilities for modules.🚀 Module Development Enhancements
Module Dependencies and Integration
Modules can now specify dependencies and modify options for other modules (#33063). This enables better module integration and ensures proper setup order:
This replaces the deprecated
installModulefunction and provides a more robust way to handle module dependencies with version constraints and configuration merging.🪝 Module Lifecycle Hooks
Module authors now have access to two new lifecycle hooks:
onInstallandonUpgrade(#32397). These hooks allow modules to perform additional setup steps when first installed or when upgraded to a new version:The hooks are only triggered when both
nameandversionare provided in the module metadata. Nuxt uses the.nuxtrcfile internally to track module versions and trigger the appropriate hooks. (If you haven't come across it before, the.nuxtrcfile should be committed to version control.)🙈 Enhanced File Resolution
The new
ignoreoption forresolveFiles(#32858) allows module authors to exclude specific files based on glob patterns:📂 Layer Directories Utility
A new
getLayerDirectoriesutility (#33098) provides a clean interface for accessing layer directories without directly accessing private APIs:✨ Developer Experience Improvements
🎱 Simplified Kit Utilities
Several kit utilities have been improved for better developer experience:
addServerImportsnow supports single imports (#32289):🔥 Performance Optimizations
This release includes several internal performance optimizations:
🐛 Notable Fixes
useFetchhook typing (#32891)<NuxtTime>(#32893)✅ Upgrading
As usual, our recommendation for upgrading is to run:
This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
ignoreoption toresolveFiles(#32858)onInstallandonUpgrademodule hooks (#32397)rolldown-vite(#31812)defineRouteRulesto pagerulesproperty (#32897)getLayerDirectoriesutil and refactor to use it (#33098)🔥 Performance
🩹 Fixes
satisfiesin page augmentation (#32902)useFetchhooks (#32891)resolvePathand normalize file extensions (#32857)requestTimeout+ allow configuration (#32874)node_modules/if no customsrcDir(#32987)routeobject (#32899)defineNuxtModule().with()(#33081)nuxtApp._runningTransitionon resolve (#33025)💅 Refactors
async/awaitinafterEach(#32999)📖 Documentation
setupTimeoutand addteardownTimeout(#32868)webRootto use new app directory (df7177bff)app/directory in layer guide (eee55ea41)--nightlycommand (#32907)features.inlineStylesdefault value (6ff3fbebb)useRouteand accessing route in middleware (#33004)🏡 Chore
type: 'module'in playground (#33099)✅ Tests
import.meta.dev(#33023)findWorkspaceDirrather than relative paths to repo root (a6dec5bd9)expect.poll(53fb61d5d)expect.pollinstead ofexpectWithPolling(357492ca7)vi.waitUntilinstead of custom retry logic (611e66a47)🤖 CI
❤️ Contributors
v4.0.3Compare Source
👉 Changelog
compare changes
🔥 Performance
tinyglobbyinresolveFiles(#32846)🩹 Fixes
errorvariable (#32807)typeCheck(#32835)nullresult from webpack call (84816d8a1)reverseResolveAliasfor better errors (#32853)📖 Documentation
bun.lockfor lockfile (#32820)🏡 Chore
✅ Tests
defineNuxtComponentout of e2e test (#32848)🤖 CI
❤️ Contributors
v4.0.2Compare Source
👉 Changelog
compare changes
🩹 Fixes
<ClientOnly>and<DevOnly>(#32707)defineAppConfigtype (#32760)appcontext (#32758)mllyto parse module paths (#32386)📖 Documentation
npm create nuxt@latest(#32726).with()(#32757)🏡 Chore
unbuildand use absolute path in dev stubs (#32759)✅ Tests
module.exportsexport (c4317e057)🤖 CI
pkg.pr.newformain/3.xbranches as well (b0f289550)3xtag to latest v3 release (5f6c27509)❤️ Contributors
v4.0.1Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
nuxt.schemafiles to node tsconfig context (#32644)nitropack(ed5ad64ad)shared/dir (#32676)💅 Refactors
📖 Documentation
-t v4tag from getting started (343f59235)noUncheckedIndexedAccessrule change in v4 guide (#32643)📦 Build
nitropacktypes as external (39be1b3a9)🏡 Chore
🤖 CI
❤️ Contributors
v4.0.0Compare Source
Nuxt 4.0 is here! 🎉
After a year of real-world testing, we're excited to announce the official release of Nuxt 4. This is a stability-focused major release, introducing a few thoughtful breaking changes in order to improve development experience.
If you've been following along, you'll recognize many of these features and changes — and if you're new to them, we hope you'll welcome them.
🔥 What's new?
Nuxt 4 is all about making your development experience smoother:
app/directory structureshared/folder, and configurationWhy these features in particular? Mostly because these kind of improvements have required making changes that are technically breaking.
In general, we aim for a hype-free approach to releases. Rather than save up features for a big release, we've been shipping improvements in Nuxt 3 minor releases.
We've also spent a lot of time figuring out how to implement these changes in a backwards-compatible way, and I hope that means that most Nuxt 3 projects can upgrade with a minimum of effort.
I'd advise reading through the upgrade guide before you start, to understand what areas of your app might be affected.
🗂️ New project structure
The biggest visible change is how projects are organized. Your application code now lives in an
app/directory by default:This helps keep your code separate from
node_modules/and.git/, which makes file watchers faster (especially on Windows and Linux). It also gives your IDE better context about whether you're working with client or server code.🎨 Updated UI templates
Nuxt’s starter templates have an all new look, with improved accessibility, default titles, and template polish (#27843).
🔄 Smarter data fetching
We've made
useAsyncDataanduseFetchwork better. Multiple components using the same key now share their data automatically. There's also automatic cleanup when components unmount, and you can use reactive keys to refetch data when needed. Plus, we've given you more control over when cached data gets used.Some of these features have already been made available in Nuxt v3 minor releases, because we've been rolling this out gradually. Nuxt v4 brings different defaults, and we expect to continue to work on this data layer in the days to come.
🔧 Better TypeScript experience
Nuxt now creates separate TypeScript projects for your app code, server code,
shared/folder, and builder code. This should mean better autocompletion, more accurate type inference and fewer confusing errors when you're working in different contexts.This is probably the single issue that is most likely to cause surprises when upgrading, but it should also make your TypeScript experience much smoother in the long run. Please report any issues you encounter. 🙏
⚡ Faster CLI and development
In parallel with the release of v4, we've been working on speeding up
@nuxt/cli.fs.watchAPIs for fewer system resourcesThese improvements combined can make a really noticeable difference in your day-to-day development experience, and we have more planned.
🚀 How to upgrade
Although any major release brings breaking changes, one of our main aims for this release is to ensure that the upgrade path is as smooth as possible. Most of the breaking changes have been testable with a compatibility flag for over a year.
Most projects should upgrade smoothly, but there are a few things to be aware of:
@nuxt/kit. (This will particularly affect module authors.)Don't worry though — for most breaking changes, there are configuration options to revert to the old behavior while you adjust.
1. Update Nuxt
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
2. Optional: use migration tools
We’ve also partnered with Codemod to automate many, though not all, migration steps:
3. Test and adjust
Run your tests, check that everything builds correctly, and fix any issues that come up. The upgrade guide has detailed migration steps for specific scenarios.
We'd recommend reading through it in full before starting your upgrade, to understand what areas of your app might be affected.
🗺️ What's next?
We're planning quick patch releases to address any issues that come up. Nuxt 3 will continue to receive maintenance updates (both bug fixes and backports of features from Nuxt 4) until the end of January 2026, so there's no rush if you need time to migrate.
Looking ahead, we plan to release Nuxt 5 on the sooner side, which will bring Nitro v3 and h3 v2 for even better performance, as well as adopting the Vite Environment API for an improved (and faster!) development experience. And there's a lot more in the works too!
And, quite apart from major releases, we have a lot of exciting features planned to make their way into Nuxt 3.x and 4.x release branches, including support for SSR streaming (#4753), a first-party accessibility module (#23255), built-in fetch caching strategies (#26017), more strongly typed fetch calls (landing in Nitro v3), dynamic route discovery (#32196), multi-app support (#21635) and more.
❤️ Thank you
This release is credit to so many people, particularly those who have been testing v4 compatibility mode over the past year. I'm really grateful — thank you for all your help!
Happy coding with Nuxt 4! 🚀
👉 Changelog
compare changes
🚀 Enhancements
mlly(#28012)addServerImports(#32289)onWatcherCleanupto imports presets (#32396)<NuxtTime>prop types (#32547)🔥 Performance
render:htmlfor server islands (#27889)🩹 Fixes
compatibilityVersion: 4(#27710)builder:watchhook (#27709)asyncDatavalue behaviour (#27718)__NUXT__after hydration (#27745)4(7aae4033b)resolvePathutils as sync (655e1473d)tryResolveModule(2d136e04c)requireModuleandtryRequireModule(#28013)useScriptCrispscripts stub (0c3cc4cf3)globalNameproperty (#28391)updateAppConfigin HMR (#28349)ssr: false(#28488)windowaccess (d874726ff)resolveIdfromvite-nodeto resolve deps (#30922)isEqualfrom mainohashexport (3ec1a1e5e)output.preserveModules(ce49734aa)#app-manifestimport in dev mode (#31539)purgeCachedDatauntil v4 (7aa3a01ae)purgeCachedDataby default (06745604c).execute(d79e14612)compatibilityVersion: 3(#32255)useAsyncData(#32170)errorValue/valueto be undefined (7e4eac655)srcDir(#32487)@nuxt/cli(#32488)tsConfigdoesn't exclude too many types (#32528)app/andserver/folders into tsconfigs (#32592)typescript.hoist(#32601)tsconfig.server.json(#32594)compatibilityDateto2025-07-15(e35e1ccb9)scrollBehaviorTypefor hash scrolling (#32622)💅 Refactors
#app/components/layout->#app/components/nuxt-layout(209e81b60)dedupeoption (#28151)installNuxtModule(501ccc375)oxc-walker(#32250)onPrehydratetransform (#32045)📖 Documentation
useAsyncDatamust return (#28259)deepdefault foruseAsyncData&useFetch(#28564)deepoption (bec85dfcd).nuxtignoreexamples for v4 structure (#32489)useNuxtDatain data fetching composable pages (#32589)📦 Build
🏡 Chore
vite-plugin-checkerseparately (02d46dd3d)engines.nodecompatibility (a26322f5f)nuxi(9aa4c7c3b)nuxiversion again (#30547)oxc-parserupdates temporarily (1cd0fb5cb)nitro/templatesdirectory (e531477f8)✅ Tests
attwtest for built packages (#30206)configResolved(8d3bd4f9f)🤖 CI
⚠️ Breaking Changes
render:htmlfor server islands (#27889)compatibilityVersion: 4(#27710)builder:watchhook (#27709)asyncDatavalue behaviour (#27718)__NUXT__after hydration (#27745)4(7aae4033b)globalNameproperty (#28391)compatibilityVersion: 3(#32255)useAsyncData(#32170)compatibilityDateto2025-07-15(e35e1ccb9)#app/components/layout->#app/components/nuxt-layout(209e81b60)❤️ Contributors
v3.20.2Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
page:finishhook (#33707)tsconfig.server.json(#33510)moduleDependenciesby meta name (#33774).d.vue.tsdeclarations (9a6a770ab)callOnceduring HMR (#33810)useAsyncData(#33802)rootDirto cached layer config (#33779)moduleDependencies->installModule(#33689)💅 Refactors
callOncefunction (#33825)📖 Documentation
erroras non-optional prop (#33763)🏡 Chore
✅ Tests
patchPropandnodeOpsto excluded Vue helpers (#33754)🤖 CI
--pnpmflag to correctly publish prerelease (#33688)❤️ Contributors
v3.20.1Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
optimizeDeps.includefor server environment (#33550)ImportPresetWithDeprecation(#33596)<nuxt-error-overlay>iframe border (#33625)moduleEntryPaths(#33628)optimizeDepsconfig is applied before other plugins (#33586)pages:resolved(#33662)💅 Refactors
📖 Documentation
cookieStoreistrueby default (#33572)pendingas alias ofstatus === 'pending'(#33221)useHead/useHydration/useLazy*(#33626)🏡 Chore
verifyDepsBeforeRun: install(#33603)🤖 CI
❤️ Contributors
v3.20.0Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
declarationPath(#33419)extensionsoption forresolveModule(#33328)useAsyncData(#32531)setGlobalHeadutility (#33512)🔥 Performance
🩹 Fixes
routeRules(#33222)loadNuxtConfigin concurrent calls (#33420)hrefin<NuxtLink>(b97ae2f70)mergeModelsfrom auto imports (#33344)shortPathproperty (#33384)declarationPathfrom component dirs (e384ba3cb)isPrerenderedcheck (#33476)h()(#33509)NuxtTimerelative timenumericprop (#33552)NuxtTimerelative timerelativeStyleprop (#33557)💅 Refactors
shortPathproperty (#33384)extend,extendConfig, andconfigResolvedhooks (932a80dc6)@nuxt/nitro-serverpackage (#33462)RouteLocationNormalizedLoadedGenericinternally (aa211fb4f)📖 Documentation
addServerPluginnote (#33409)declarationPathinaddComponent(#33380)getLayerDirectories()instead ofnuxt.options._layers(#33484)moduleDependencies(#33499)🏡 Chore
test:prepare(cbad63c02)test:prepare(672c09423)vue-demifromignoredBuiltDependencies(#33494)@rollup/plugin-commonjs(c2bd323b8)@rollup/plugin-commonjs(a524522ea)✅ Tests
asyncDataDefaults.errorValue(b6f1c9b0d)🤖 CI
@nuxt/nitro-serveron pkg-pr-new (d37ef17b0)❤️ Contributors
v3.19.3Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
🩹 Fixes
h(#33046)headoption onuseHead(#33318)cdnURLis set (#33333)imports.dirs(#33334)<NuxtLink>(#33335)v-slot:fallbacklongform syntax in<DevOnly>(#33368)typeFromwhen generating auto-import type templates (#33373)@nuxt/scripts(057ade490)useAsyncData(#33325)_pathproperty configurable for HMR (#33379)useAsyncDatawith different key on ssr (#33341)💅 Refactors
typed-router.d.tsearly for consistency (#33285)filenameintocomponentsIslandsTemplatedefinition (#33394)📖 Documentation
3.xprefix to all internal links (0fef864d6)useFetchreactivity (#33317)preparecommandNODE_ENVbehavior (#33330)nuxtcommand pages (#33336)🏡 Chore
.npmrc(101682a6b)✅ Tests
gotoPathtimeout in CI (9d336cc76)🤖 CI
❤️ Contributors
v3.19.2Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
dstis present (#33200)hydrate-whenlazy hydration strategy (#33199)🩹 Fixes
pkg-typesto dependencies (a6e5dd756)backgroundSizein loading indicator (#33211)enabledfrom components dir options (#32844)📖 Documentation
🏡 Chore
❤️ Contributors
v3.19.1Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
globalThisoverwindow(#33125)deps.inline(#33133)useRouteusage warning (#33039)imports:sourcesin override warning (#33050)📖 Documentation
--to bun create command (ab6aa8ee5)navigateTo(#21442)🏡 Chore
rou3github url (#33130).tsextension (2c905f864)✅ Tests
app/prefix for tree-shaken composables (06ea91705)🤖 CI
4xtags from releases (e3aa50d11)❤️ Contributors
v3.19.0Compare Source
👀 Highlights
Please see the release notes for Nuxt v4.1 for full details on the features and fixes in Nuxt v3.19.
✅ Upgrading
As usual, our recommendation for upgrading is to run:
This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
ignoreoption toresolveFiles(#32858)onInstallandonUpgrademodule hooks (#32397)rolldown-vite(#31812)defineRouteRulesto pagerulesproperty (#32897)getLayerDirectoriesutil and refactor to use it (#33098)🔥 Performance
🩹 Fixes
satisfiesin page augmentation (#32902)useFetchhooks (#32891)resolvePathand normalize file extensions (#32857)requestTimeout+ allow configuration (#32874)node_modules/if no customsrcDir(#32987)routeobject (#32899)defineNuxtModule().with()(#33081)nuxtApp._runningTransitionon resolve (#33025)💅 Refactors
async/awaitinafterEach(#32999)📖 Documentation
setupTimeoutand addteardownTimeout(#32868)--nightlycommand (#32907)useRouteand accessing route in middleware (#33004)🏡 Chore
type: 'module'in playground (#33099)✅ Tests
import.meta.dev(#33023)findWorkspaceDirrather than relative paths to repo root (c4c3ada96)expect.poll(f4354203a)expect.pollinstead ofexpectWithPolling(15ca5be95)vi.waitUntilinstead of custom retry logic (4c8c13090)🤖 CI
❤️ Contributors
v3.18.1Compare Source
👉 Changelog
compare changes
🔥 Performance
tinyglobbyinresolveFiles(#32846)🩹 Fixes
errorvariable (#32807)typeCheck(#32835)nullresult from webpack call (65aa17158)reverseResolveAliasfor better errors (#32853)📖 Documentation
🏡 Chore
✅ Tests
defineNuxtComponentout of e2e test (#32848)🤖 CI
❤️ Contributors
v3.18.0Compare Source
👀 Highlights
A huge thank you to everyone who's been a part of this release, which is mostly about backporting features + bugfixes from Nuxt v4.
Over the next six months, we'll continue backporting compatible v4 features and bug fixes, so please keep the feedback coming! ❤️
🧪 Lazy Hydration Macros
Building on the delayed hydration support from v3.16, we now support lazy hydration macros (#31192)! These provide a more ergonomic way to control component hydration:
These macros make it possible to use Nuxt's lazy hydration utilities alongside explicit component imports.
♿️ Accessibility Improvements
We've enhanced accessibility by including
<NuxtRouteAnnouncer>in the built-inapp.vue(#32621). This means page changes will be announced to screen readers, making navigation more accessible for users with visual impairments. (This only applies if you do not have anapp.vuein your project. If you do, please keep<NuxtRouteAnnouncer>in yourapp.vue!)🛠️ Enhanced Development Experience
Chrome DevTools Workspace Integration
We've added Chrome DevTools workspace integration (#32084), allowing you to edit your Nuxt source files directly from Chrome DevTools. This creates a better debugging experience where changes made in DevTools are reflected in your actual source files.
Better Component Type Safety
Component type safety has been improved with:
<ClientOnly>and<DevOnly>(#32707) - better IntelliSense and error checking<NuxtTime>prop types (#32547) - easier to extend and customizeNew Auto-Import:
onWatcherCleanupThe
onWatcherCleanupfunction fromvueis now available as an auto-import (#32396), making it easier to clean up watchers and prevent memory leaks:📊 Observability Enhancements
Page routes are now exposed to Nitro for observability (#32617), enabling better monitoring and analytics integration with supported platforms. This allows observability tools to track page-level metrics more effectively.
🔧 Module Development Improvements
Module authors get several quality-of-life improvements:
Simplified Server Imports
The
addServerImportskit utility now supports single imports (#32289), making it easier to add individual server utilities:TypeScript Configuration
Modules can now add to
typescript.hoist(#32601), giving them more control over TypeScript configuration and type generation.⚡️ Performance Improvements
We've made several performance optimizations:
oxc-walker(#32250) and oxc foronPrehydratetransforms (#32045) for faster code transformations🐛 Bug Fixes
This release also includes several important fixes:
scrollBehaviorTypeis now only used for hash scrolling (#32622)✅ Upgrading
As usual, our recommendation for upgrading is to run:
This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
<NuxtTime>prop types (#32547)addServerImports(#32289)onWatcherCleanupto imports presets (#32396)🔥 Performance
🩹 Fixes
typescript.hoist(#32601)scrollBehaviorTypefor hash scrolling (#32622)async(fd312af03)<ClientOnly>and<DevOnly>(#32707)mllyto parse module paths (#32386)💅 Refactors
oxc-walker(#32250)onPrehydratetransform (#32045)installNuxtModule(228e3585e)📖 Documentation
v3template to create nuxt examples (03182202f)useNuxtDatain data fetching composable pages (#32589)noUncheckedIndexedAccessrule change in v4 guide (#32643)npm create nuxt@latest(#32726).with()(#32757)🏡 Chore
unbuildand use absolute path in dev stubs (#32759)✅ Tests
module.exportsexport (ac8b02d09)🤖 CI
pkg.pr.newformain/3.xbranches as well (ca4f0b1da)3xtag to latest v3 release (5e8dfc150)❤️ Contributors
v3.17.7Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
extraPageMetaExtractionKeys(#32510)loadBuildererror cause (8f13ce3c2)nullvalues (c1b83eab5)semver.satisfiesreturns true for pre-release versions (#32574)execute being passed towatch` (#32591)📖 Documentation
NUXT_(#32223)useAsyncDataanduseFetchmigration (#32560)undefinedtonullin v3 docs (#32562)asynckeyword (#32587)✅ Tests
generateTypes(c0855439d)<NuxtTime>test (#32558)❤️ Contributors
v3.17.6Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
🩹 Fixes
nuxt.config(#32324)nuxt:chunk-reload-immediate(#32382)set-cookieheaders in error handler (#32483)asyncDataruns if changing key while fetcher is running (#32466)navigateTo(#32393)<NuxtLink>'s custom on click handler (#32499)inheritAttrs: falseincreateClientOnlyfn (#32323)output.generatedCode.symbolsfor nitro build (#32358)💅 Refactors
📖 Documentation
h3js(#32243)clearfunction description (#32287)defineNuxtPluginfunction documentation (#32328)<NuxtLink>encodes query params (#32361)bun.lockfor lockfile (#32427)🏡 Chore
workspacetoprojects(#32388)✅ Tests
immediate: false(#32473)🤖 CI
❤️ Contributors
v3.17.5Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
globby(#31688)🩹 Fixes
useScriptRybbitAnalyticsfrom script stubs (d275ae1a0)appConfigsources are not duplicated (#32216)h()in ClientOnly (#30664)asyncDatastate from nuxt app instance (#32232)srcDirinbuildCache(#32260)asyncDatawatcher (#32247)📖 Documentation
addRouteMiddlewarepath in example (#32171)--env-file(29f6392cd)nuxtcommand consistently (#32237)alertwithwarningin/guide/pages(#32270)📦 Build
🏡 Chore
✅ Tests
❤️ Contributors
v3.17.4Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
shallowReffor primitive values (#32152)Intl.Collatorinstead oflocaleCompare(#32167)🩹 Fixes
<ClientOnly>(#32101)useLazyAsyncData(#32092)ts-checker-rspack-plugin(#32115)/(#32129)DeepPartial(#31990)<ClientOnly>(#32131)globalwithglobalThis(#32130)<NuxtLayout>first renders (#24673)srcDirto parcel strategy (#32139)📖 Documentation
useNuxtDatadefault return toundefined(#32054)imports.dirswith alias (0dbf314d9)🏡 Chore
✅ Tests
setTimeoutmock (#32142)🤖 CI
❤️ Contributors
v3.17.3Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
🩹 Fixes
FormData(#32013)ignorepatterns (#32020)useFetchwithwatch: false(#32019)getCachedDatais provided (#32003)nuxtAppfor asyncData functions run on server (#32038)💅 Refactors
asyncData(e779d6cd5)📖 Documentation
🤖 CI
bug/enhancementlabels to issue types (3ff743fe0)❤️ Contributors
v3.17.2Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
handleHotUpdatein production (#31971)🩹 Fixes
transition(#31945)useFetch(#31963)scrollToTop(#31914)vfseven if a file exists inbuildDir(#31969)useAsyncDatareactive tokeychanges whenimmediate: false(#31987)WarningFiltertype (2a79dbd68)warningIgnoreFilters(a62e808ac)📖 Documentation
@nuxt/kitdocumentation (#31793)🏡 Chore
✅ Tests
asyncDataDefaults.value(91568c5da)🤖 CI
❤️ Contributors
v3.17.1Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🩹 Fixes
executewhen non-immediate fetch key changes (#31941)escapeHTMLfrom vue (8e4b8d62f)@vue/shareddependency (7d445c963)📦 Build
🏡 Chore
✅ Tests
❤️ Contributors
v3.17.0Compare Source
👀 Highlights
This release brings a major reworking of the async data layer, a new built-in component, better warnings, and performance improvements!
📊 Data Fetching Improvements
A major reorganization of Nuxt's data fetching layer brings significant improvements to
useAsyncDataanduseFetch.Although we have aimed to maintain backward compatibility and put breaking changes behind the
experimental.granularCachedDataflag (disabled by default), we recommend testing your application thoroughly after upgrading. You can also disableexperimental.purgeCachedDatato revert to the previous behavior if you are relying on cached data being available indefinitely after components usinguseAsyncDataare unmounted.👉 Read the the original PR for full details (#31373), but here are a few highlights.
Consistent Data Across Components
All calls to
useAsyncDataoruseFetchwith the same key now share the underlying refs, ensuring consistency across your application:This solves various issues where components could have inconsistent data states.
Reactive Keys
You can now use computed refs, plain refs, or getter functions as keys:
Optimized Data Refetching
Multiple components watching the same data source will now trigger only a single data fetch when dependencies change:
🎭 Built-In Nuxt Components
<NuxtTime>- A new component for safe time displayWe've added a new
<NuxtTime>component for SSR-safe time display, which resolves hydration mismatches when working with dates (#31876):The component accepts multiple time formats and gracefully handles both client and server rendering.
Enhanced
<NuxtErrorBoundary>The
<NuxtErrorBoundary>component has been converted to a Single File Component and now exposeserrorandclearErrorfrom the component - as well as in the error slot types, giving you greater ability to handle errors in your templates and viauseTemplateRef(#31847):🔗 Router Improvements
<NuxtLink>now accepts atrailingSlashprop, giving you more control over URL formatting (#31820):🔄 Loading Indicator Customization
You can now customize the loading indicator with new props directly on the component (#31532):
hideDelay: Controls how long to wait before hiding the loading barresetDelay: Controls how long to wait before resetting loading indicator state📚 Documentation as a Package
The Nuxt documentation is now available as an npm package! You can install
@nuxt/docsto access the raw markdown and YAML content used to build the documentation website (#31353).💻 Developer Experience Improvements
We've added several warnings to help catch common mistakes:
runtimeConfig.appnamespace #31774definePageMetais used more than once in a file #31634🔌 Enhanced Module Development
Module authors will be happy to know:
experimental.enforceModuleCompatibilityallows Nuxt to throw an error when a module is loaded that isn't compatible with it (#31657). It will be enabled by default in Nuxt v4.addComponentExports#27155🔥 Performance Improvements
Several performance improvements have been made:
tinyglobbyfor faster file globbing #31668.datadirectory from type-checking for faster builds #31738purgeCachedDatacheck #31785✅ Upgrading
Our recommendation for upgrading is to run:
This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
hideDelayandresetDelayprops for loading indicator (#31532)@nuxt/docs(#31353)loadNuxtConfigto nitro (#31680)runtimeConfig.appnamespace (#31774)middlewarewhen scanning page metadata (#30708)addComponentExports(#27155)<NuxtErrorBoundary>to SFC + exposeerror/clearError(#31847)<NuxtTime>component for ssr-safe time display (#31876)trailingSlashprop to<NuxtLink>(#31820)🔥 Performance
tinyglobby(#31668).datadirectory from type-checking (#31738)purgeCachedDatacheck to improve tree-shaking (#31785)oxc-parsermanual wasm fallback logic (#31484)🩹 Fixes
modulesDirpaths are added tofs.allow(#31540)/_nuxt/(#31646)useLazyAsyncData(#31676)error.url(#31679)app:renderedis called (#31686)fallbackattribute when stripping<DevOnly>(c1d735c27)noScripts(c9572e953)compatibilityDate(#31725)statusMessagewhen rendering html error (#31761)definePageMetais used more than once (#31634)error.databefore renderingerror.vue(#31571)useAsyncDatain console log (#31801)NuxtErrorBoundaryerror (#31791)preserveModules(#31839)pendingwithstatusvalue for v4 (#25864)nuxt/appin generated middleware and layouts declarations (#31808)withoutBase(f956407bb)vuein vite-node dev server (f3882e004)tsconfig.json(#31882)useNuxtData(#31893)useFetchwatch sources (#31903)modulesDirto store build cache files (#31907)💅 Refactors
shallowReffor primitives as well (#31662)_replaceAppConfigwhen applying hmr (#31786)ConfigSchema(#31894)📖 Documentation
app.vue(#31645)templateParamsto seo docs (#31583)useHydration(#31712)callOncereturning value (#31747)vs.consistently (#31760)addServerHandlerexample (#31769)📦 Build
vue-sfc-transformerto process sfcs (#31691)🏡 Chore
✅ Tests
<NuxtErrorBoundary>(4df92c45f)pendingWhenIdle(08f2224c8)🤖 CI
❤️ Contributors
v3.16.2Compare Source
✅ Upgrading
Our recommendation for upgrading is to run:
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
👉 Changelog
compare changes
🔥 Performance
useRequestEventon client (#31586)🩹 Fixes
<Body>and<Html>(#31513)/indexis the last segment (#31528)page:loading:endhook before navigation (#31504)document.cookie(#31517)resolveComponent(#31526)_nuxt/paths in development (#31543)error.vue(#31573)unheadv2 api in default welcome + error pages (#31584)scanPageMetais disabled (0ba454b21)💅 Refactors
<NuxtPage>(#31561)useServerHeadinonPrehydratewithuseHead(#31585)📖 Documentation
useTemplateRef(#31458)$fetch(#31459)dedupeflag (#31467)refreshNuxtDatadocs (#31448)--before--template(#31469)resolveComponentonly auto-imports components with literal strings (#31511)tsconfig.json(#31473)page:startandpage:finishhooks (#31570)🏡 Chore
✅ Tests
❤️ Contributors
v3.16.1Compare Source
compare changes
🔥 Performance
🩹 Fixes
mocked-exports(#31295)typedPagesimplementation (#31331)📖 Documentation
app.headexample (#31350)addServerTemplateto modules guide (#31369)rspackand removetest-utilsfor monorepo guide (#31371)inisyntax block highlighting for.envfiles (f79fabe46)useHydrationdocs (#31427)🏡 Chore
✅ Tests
srvxand random port for remote provider (#31432)🤖 CI
❤️ Contributors
v3.16.0Compare Source
👀 Highlights
There's a lot in this one!
⚡️ A New New Nuxt
Say hello to
create-nuxt, a new tool for starting Nuxt projects (big thanks to @devgar for donating the package name)!It's a streamlined version of
nuxi init- just a sixth of the size and bundled as a single file with all dependencies inlined, to get you going as fast as possible.Starting a new project is as simple as:
Special thanks to @cmang for the beautiful ASCII-art. ❤️
Want to learn more about where we're headed with the Nuxt CLI? Check out our roadmap here, including our plans for an interactive modules selector.
🚀 Unhead v2
We've upgraded to
unheadv2, the engine behind Nuxt's<head>management. This major version removes deprecations and improves how context works:If you're using Unhead directly in your app, keep in mind:
#app/composables/headinstead of@unhead/vue@unhead/vuemight lose async contextDon't worry though - we've maintained backward compatibility in Nuxt 3, so most users won't need to change anything!
If you've opted into
compatibilityVersion: 4, check out our upgrade guide for additional changes.🔧 Devtools v2 Upgrade
Nuxt Devtools has leveled up to v2 (#30889)!
You'll love the new features like custom editor selection, Discovery.js for inspecting resolved configs (perfect for debugging), the return of the schema generator, and slimmer dependencies.
One of our favorite improvements is the ability to track how modules modify your Nuxt configuration - giving you X-ray vision into what's happening under the hood.
👉 Discover all the details in the Nuxt DevTools release notes.
⚡️ Performance Improvements
We're continuing to make Nuxt faster, and there are a number of improvements in v3.16:
exsolvefor module resolution (#31124) along with the rest of the unjs ecosystem (nitro, c12, pkg-types, and more) - which dramatically speeds up module resolutionloadNuxtby skipping unnecessary resolution steps (#31176) - faster startupsoxc-parserfor parsing in Nuxt plugins (#30066)All these speed boosts happen automatically - no configuration needed!
Shout out to CodSpeed with Vitest benchmarking to measure these improvements in CI - it has been really helpful.
To add some anecdotal evidence, my personal site at roe.dev loads 32% faster with v3.16, and nuxt.com is 28% faster. I hope you see similar results! ⚡️
🕰️ Delayed Hydration Support
We're very pleased to bring you native delayed/lazy hydration support (#26468)! This lets you control exactly when components hydrate, which can improve initial load performance and time-to-interactive. We're leveraging Vue's built-in hydration strategies - check them out in the Vue docs.
You can also listen for when hydration happens with the
@hydratedevent:Learn more about lazy hydration in our components documentation.
🧩 Advanced Pages Configuration
You can now fine-tune which files Nuxt scans for pages (#31090), giving you more control over your project structure:
🔍 Enhanced Debugging
We've made debugging with the
debugoption more flexible! Now you can enable just the debug logs you need (#30578):Or keep it simple with
debug: trueto enable all these debugging features.🎨 Decorators Support
For the decorator fans out there (whoever you are!), we've added experimental support (#27672). As with all experimental features, feedback is much appreciated.
📛 Named Layer Aliases
It's been much requested, and it's here! Auto-scanned local layers (from your
~~/layersdirectory) now automatically create aliases. You can access your~~/layers/testlayer via#layers/test(#30948) - no configuration needed.If you want named aliases for other layers, you can add a name to your layer configuration:
This creates the alias
#layers/example-layerpointing to your layer - making imports cleaner and more intuitive.🧪 Error Handling Improvements
We've greatly improved error messages and source tracking (#31144):
useAsyncDatacalls with precise file location informationPlus, we're now using Nitro's beautiful error handling (powered by youch) to provide more helpful error messages in the terminal, complete with stacktrace support.
Nitro now also automatically applies source maps without requiring extra Node options, and we set appropriate security headers when rendering error pages.
📦 Module Development Improvements
For module authors, we've added the ability to augment Nitro types with
addTypeTemplate(#31079):⚙️ Nitro v2.11 Upgrade
We've upgraded to Nitro v2.11. There are so many improvements - more than I can cover in these brief release notes.
👉 Check out all the details in the Nitro v2.11.0 release notes.
📦 New
unjsMajor VersionsThis release includes several major version upgrades from the unjs ecosystem, focused on performance and smaller bundle sizes through ESM-only distributions:
✅ Upgrading
As usual, our recommendation for upgrading is to run:
This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.
👉 Changelog
compare changes
🚀 Enhancements
@nuxt/devtoolsto v2 (#30889)NuxtPage(#30704)directoryToURLto normalise paths (#30986)start/setin loading indicator (#30989)pages/(#31090)NuxtLinkslot (#31104)addTypeTemplate(#31079)oxc-parserinstead of esbuild + acorn (#30066)🔥 Performance
exsolvefor module resolution (#31124)loadNuxt(#31176)🩹 Fixes
<NuxtLayout>fallbackprop is typed (#30832)keepalivecache reset (#30807)divwrapper in client-only pages (#30425)nitropack(aba75bd5a)nullfrom resolve functions (d68e8ce57)app.head.metavalues are undefined (#30959)shared/directories available within layers (#30843)<pre>when rendering dev errors (9aab69ec4)page:transition:starttype (#31040)provide/injectwork insetupofdefineNuxtComponent(#30982)_for NuxtIsland name on server pages (#31072)ohashto calculate legacy async data key without hash (#31087)shareddir from config (#31091)nuxt.options.pagesto detected configuration (#31101)definePageMetadoes not receive an object (#31156)no-ssrmiddleware handler (a99c59fbd)navigatewithvue-router(7a1934509)nuxt.options.pages(fa480e0a0)resolveModule(6fb5c9c15)resolveTypePath(a0f9ddfe2)compilerOptions.paths(835e89404)RawVueCompilerOptionsfor unresolvedtsconfig(#31202)navigateTowith replace (#31244)devStorage(#31233)useFetchfunction name on server for warning (#31213)x-nitro-prerenderheader (2476cab9a)💅 Refactors
isEqualfromohash/utils(2e27cd30c)noScriptsroute rule (#31083)runtime/nitrofiles (#31131)📖 Documentation
spaLoadingTemplateexample (#30830)NuxtPage(#30781)navigateTodocs with clearer structure and examples (#30876)rootDir(27e356fe6)vue:setupandapp:data:refreshhooks (#31001)defineNuxtRouteMiddleware(#31005)portoption to preview command (#30999).nuxtrcdocumentation (#31093)$fetchon the server (#31114)create nuxtcommand (fe82af4c9)3x(a243f8fcf)<NuxtPage>during page changes (#31116)typedPagesin unhoisted pnpm setups (#31262)📦 Build
🏡 Chore
errxdependency (566418177)@nuxtjs/mdctypechecking dep (f23683b26)nitro/renderertemplates (b29c0e86b)✅ Tests
#internal/nitro/app(a1b855cc5)❤️ Contributors
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.
77300e3751toe9bea135abe9bea135abtof79b35bac1View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.