unstale

npm / nuxt

nuxt

What changed in nuxt 3 to 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.

34 breaking27 security11 deprecations150 new APIs and options18 performance55 behavior and defaults22 tooling186 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli on npm

nuxt 4450 changes

Breaking changes 29

  • Routing is case-sensitive by default in compatibility version 5.

    4.6.0release notes

  • Under the Nuxt 5 compatibility defaults, clearNuxtState resets state to defaults.

    4.6.0release notes

  • Typed route data now checks validated body, query and headers more tightly, including whether a request body is required.

    4.6.0release notes

  • The internal error route is served only during an error render and can no longer be reached from outside.

    4.6.0release notes

  • Nuxt CLI v4 requires Node.js v22.21+, v24.11+ or v26+.

    4.6.0release notes

  • This release requires Node.js ^22.22.3 || ^24.15.0 || >=26.0.0.

    4.6.0release notes

  • The Nuxt CLI v4 drops nuxt init; project creation is supported through npm create nuxt@latest.

    4.6.0release notes

  • The nuxt/server sendRedirect helper returns the response rather than sending it.

    4.6.0release notes

  • Server-only head composables are no longer auto-imported under the Nuxt 5 compatibility defaults.

    4.6.0release notes

  • Removed setResponseHeader from nuxt/server; developers using this export must use an alternative.

    4.6.0release notes

  • Removed setResponseHeaders from nuxt/server; developers using this export must use an alternative.

    4.6.0release notes

  • A template that never finishes compiling now fails the build instead of exiting successfully.

    4.6.0release notes

  • Removed toNuxtRequestEvent from nuxt/server; developers using this export must use an alternative.

    4.6.0release notes

  • Non-object island props are rejected.

    3.21.11, 4.5.2release notesrelease notes

  • Rejects a top-level as prop for islands.

    3.21.10, 4.5.1release notesrelease notes

  • With compatibilityVersion 5, keyed function source is required.

    4.5.0release notes

  • For custom slots, Nuxt no longer attaches prefetch handlers automatically; the slot exposes prefetch, prefetched, and shouldPrefetch so applications can wire them up.

    4.5.0release notes

  • Nuxt upgrades to Rspack 2 and uses Rsbuild-based internals, so custom Rspack configuration may need review.

    4.5.0release notes

  • Nuxt upgrades to unhead v3; useHead has tighter types, and promise input, deprecated in v2, is no longer supported.

    4.5.0release notes

  • Nuxt migrates to unhead v3, which may introduce breaking type changes from stricter useHead typing.

    4.5.0release notes

  • Nuxt migrates to Vite 8; custom Vite plugins and configuration may need review against the Vite migration guide.

    4.5.0release notes

  • Rejects script-capable protocols in href values.

    3.21.7, 4.4.7release notesrelease notes

  • Validates protocols before reload and rejects cross-origin paths.

    3.21.7, 4.4.7release notesrelease notes

  • Requires a loopback host when same-origin signals are missing.

    4.4.7release notes

  • Middleware now runs for page islands.

    4.4.6release notes

  • Nuxt upgrades to vue-router v5 and removes its dependency on unplugin-vue-router; apps using unplugin-vue-router directly can remove it.

    4.4.0release notes

  • Query strings are no longer decoded in the SSR context URL.

    3.21.1, 4.3.1release notesrelease notes

  • noUncheckedIndexedAccess is enabled in the Nitro server TypeScript config, improving type safety but potentially surfacing new server-code type errors.

    3.21.0, 4.3.0release notesrelease notes

  • mergeModels is no longer auto-imported.

    3.20.0, 4.2.0release notesrelease notes

Security 25

  • Payload URLs are parsed as origin-relative paths, preventing paths such as //x/_payload.json from serving the wrong payload.

    4.6.0release notes

  • Nuxt dev server discloses project root and workspace UUID via the Chrome DevTools workspace endpoint

    3.21.10, 4.5.1security advisory

  • Nuxt route rules silently dropped for mixed-case paths, bypassing appMiddleware auth gates (incomplete fix for CVE-2026-53721)

    3.21.10, 4.5.1security advisory

  • Nuxt runtime payload cache discloses another user's SSR data across users and to unauthenticated clients

    4.5.1security advisoryrelease notes

  • Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props

    3.21.10, 4.5.1security advisory

  • Nuxt: Unauthenticated CPU exhaustion parsing and hashing the Nuxt island endpoint body before hash validation

    3.21.10, 4.5.1security advisory

  • Nuxt: Unauthenticated out-of-memory crash via unbounded v-for expansion in island rendering

    3.21.10, 4.5.1security advisory

  • Nuxt: Unauthorized Component Instantiation via Server Island Props

    3.21.10, 4.5.1security advisoryrelease notesrelease notes

  • Restricts the workspace endpoint to local requests.

    4.4.7release notes

  • Cross-site scripting via <NoScript> slot content in Nuxt's head components

    3.21.7, 4.4.7security advisoryrelease notesrelease notes

  • Rejects prototype-chain keys in the island registry.

    4.4.7release notes

  • Applies an isScriptProtocol guard to the open option.

    4.4.7release notes

  • Blocks open redirects caused by path normalization.

    4.4.7release notes

  • Nuxt: Dev server discloses project absolute path and persistent workspace UUID via /.well-known/appspecific/com.chrome.devtools.json

    4.4.7security advisory

  • Nuxt dev server vite-node IPC socket is world-connectable on Linux

    3.21.7, 4.4.7security advisory

  • Nuxt: Reflected XSS in <NuxtLink> via unsanitised javascript: or data: URL

    3.21.7, 4.4.7security advisory

  • Nuxt: Route-rule middleware bypass via case-sensitivity mismatch between vue-router and the routeRules matcher

    3.21.7, 4.4.7security advisoryrelease notesrelease notesrelease notes

  • Nuxt: URL-handling weaknesses in navigateTo and reloadNuxtApp: SSR open redirect, client-side script execution via the open option, and protocol-relative bypass in reloadNuxtApp

    3.21.7, 4.4.7security advisory

  • Escapes props in server-rendered output.

    3.21.7, 4.4.7release notesrelease notes

  • Island request hashes are validated against props.

    3.21.6, 4.4.6release notesrelease notes

  • Nuxt: __nuxt_island endpoint does not bind responses to request props, enabling shared-cache poisoning

    3.21.6, 4.4.6security advisory

  • Nuxt: Reflected XSS in navigateTo() external redirect

    3.21.6, 4.4.6security advisoryrelease notesrelease notes

  • Nuxt's route middleware is not enforced when rendering .server.vue pages via /__nuxt_island/page_*

    3.21.6, 4.4.6security advisory

  • Cookie decoding now handles unsafe number parsing.

    4.3.0release notes

  • HTML is escaped in the development error page stack trace.

    3.20.2, 4.2.2release notesrelease notes

Deprecations 9

New APIs and options 144

  • Accepts a map of handler variants per server API, allowing one module to support Nuxt 4 and Nuxt 5.

    4.6.0release notes

  • Accepts a map of plugin variants per server API, allowing one module to support Nuxt 4 and Nuxt 5.

    4.6.0release notes

  • The createUseFetch and createUseAsyncData factories accept addons that can declare call-site options, adjust merged options, wrap handlers with middleware, and extend composable return values.

    4.6.0release notes

  • Accepts a map of handler variants per server API, allowing one module to support Nuxt 4 and Nuxt 5.

    4.6.0release notes

  • addServerImports gains server variant support.

    4.6.0release notes

  • Types in app/types are auto-imported.

    4.6.0release notes

  • Adds Nuxt-owned augmentable server types that modules can extend through @nuxt/schema.

    4.6.0release notes

  • Nuxt adds the appSecret configuration option.

    4.6.0release notes

  • Case-sensitive routing is available behind the Nuxt 5 compatibility flag, matching Nitro.

    4.6.0release notes

  • createUseAsyncData now supports addons.

    4.6.0release notes

  • createUseFetch now supports addons.

    4.6.0release notes

  • Adds an API for comparing two Nuxt config loads.

    4.6.0release notes

  • Adds an API to check for and offer to install optional dependencies with the user's package manager.

    4.6.0release notes

  • An experimental option enables early return after navigateTo.

    4.6.0release notes

  • Modules can now set experimental.asyncContext.

    4.6.0release notes

  • Modules can now set experimental.asyncContext.

    4.6.0release notes

  • Enables build-time static page-route matching so unmatched requests can return 404 without creating the Vue app or running plugins and middleware.

    4.6.0release notes

  • An experimental early 404 behavior is added for unmatched page routes.

    4.6.0release notes

  • Enables serializable definePageMeta keys to be extracted at build time.

    4.6.0release notes

  • Renders error.vue in the same request after a server render fails, preserving already-set headers and cookies and avoiding a second Nitro middleware and route-rules pass.

    4.6.0release notes

  • Makes navigateTo in script setup short-circuit the rest of setup, so redirects and 404s do not throw on missing data.

    4.6.0release notes

  • Client-side payload extraction is newly available behind the Nuxt 5 compatibility flag.

    4.6.0release notes

  • Prerenders error pages as real HTML, such as 404.html or pages for specified status codes, instead of an empty SPA shell.

    4.6.0release notes

  • An experimental pure Vite server mode is added.

    4.6.0release notes

  • Enables the rebuilt typed fetch behavior in Nuxt 4; it is opt-in because of small type-inference changes and a rewrite needed for hand-written ServerRoutes augmentations.

    4.6.0release notes

  • Typed $fetch is newly available behind the Nuxt 5 compatibility flag.

    4.6.0release notes

  • Rejects typed fetch calls to paths that do not exist instead of typing their return values as unknown.

    4.6.0release notes

  • Automatically excludes data fetched within hydrate-never component trees from the payload.

    4.6.0release notes

  • Typed pages are newly available behind the Nuxt 5 compatibility flag.

    4.6.0release notes

  • Exports $Fetch from nuxt/app.

    4.6.0release notes

  • Nuxt exports the $Fetch type.

    4.6.0release notes

  • nuxt/server adds helpers for forwarded URLs, cookies, and route rules.

    4.6.0release notes

  • Setting compatibilityVersion to 5 enables the Nuxt 5 defaults together; each default can also be enabled or disabled individually.

    4.6.0release notes

  • Adds an API to obtain an install command using the user's package manager.

    4.6.0release notes

  • Adds an API for module logic that explicitly needs to know the installed Nitro version.

    4.6.0release notes

  • getRequestIP is now available from nuxt/server.

    4.6.0release notes

  • getRouterParam is now available from nuxt/server.

    4.6.0release notes

  • getRouterParams is now available from nuxt/server.

    4.6.0release notes

  • getValidatedQuery is now available from nuxt/server.

    4.6.0release notes

  • handleCors is now available from nuxt/server.

    4.6.0release notes

  • Adds an API for module logic that explicitly needs to check the installed Nitro version.

    4.6.0release notes

  • An isomorphic typed-fetch mode types pages as GET routes, allowing type-safe $fetch calls from the Vue renderer.

    4.6.0release notes

  • Lets module authors declare server API compatibility when Nuxt cannot infer it from a file's imports.

    4.6.0release notes

  • Adds a hook used by Nuxt CLI v4 to show per-module setup time as it happens.

    4.6.0release notes

  • Nuxt Kit adds the module:before hook.

    4.6.0release notes

  • Adds a hook used by Nuxt CLI v4 to show per-module setup time as it happens.

    4.6.0release notes

  • Nuxt Kit adds the module:done hook.

    4.6.0release notes

  • A new command talks to the running server using the Nuxt CLI lock file.

    4.6.0release notes

  • Adds documentation search from the CLI using a query.

    4.6.0release notes

  • Adds a takeover option that lets a preview server replace a running preview server.

    4.6.0release notes

  • A new server-only import source provides portable, web-standard server utilities typed against Nuxt’s RequestEvent, so server code need not import h3 or nitropack.

    4.6.0release notes

  • Response headers are set through event.res.headers when using the new server runtime.

    4.6.0release notes

  • A new nuxt/server entry point provides portable server code and server helpers.

    4.6.0release notes

  • A new command talks to the running server using the Nuxt CLI lock file.

    4.6.0release notes

  • Adds an augmentable NuxtPageMeta type for typing NuxtPage.meta.

    4.6.0release notes

  • An augmentable NuxtPageMeta interface is provided for NuxtPage.meta.

    4.6.0release notes

  • Adds Nuxt-owned augmentable server types that modules can extend through @nuxt/schema.

    4.6.0release notes

  • Adds an API for observing changes between two config loads.

    4.6.0release notes

  • Adds a top-level alias for nitro.prerender.

    4.6.0release notes

  • A top-level prerender alias is added for nitro.prerender.

    4.6.0release notes

  • readValidatedBody is now available from nuxt/server.

    4.6.0release notes

  • Nuxt Kit adds resolveServerVariant for resolving server variants.

    4.6.0release notes

  • Nuxt adds a root application secret, configured through NUXT_APP_SECRET, from which modules and server features can derive purpose-specific secrets.

    4.6.0release notes

  • Async data gains a serialize option to keep it out of the payload.

    4.6.0release notes

  • Adds @nuxt/vite-server as an experimental server builder selectable with the vite shorthand; Nitro remains the default.

    4.6.0release notes

  • nuxt/server adds serverFetch for server-side fetching.

    4.6.0release notes

  • Adds Nuxt-owned augmentable server types that modules can extend through @nuxt/schema.

    4.6.0release notes

  • Adds Nuxt-owned augmentable server types that modules can extend through @nuxt/schema.

    4.6.0release notes

  • Session utilities are now available from nuxt/server.

    4.6.0release notes

  • Adds ShallowRef to the Vue auto-import preset.

    4.6.0release notes

  • The Vue preset adds the ShallowRef type.

    4.6.0release notes

  • Templates can declare what changes invalidate them, avoiding unnecessary regeneration.

    4.6.0release notes

  • Adds per-context overrides for the app tsconfig.

    4.6.0release notes

  • Adds per-context overrides for the server tsconfig.

    4.6.0release notes

  • useAppConfig is now available from nuxt/server.

    4.6.0release notes

  • useAppConfig is now available from nuxt/server.

    4.6.0release notes

  • The serialize option accepts false to keep data out of the __NUXT_DATA__ payload.

    4.6.0release notes

  • The serialize option accepts false to keep data out of the __NUXT_DATA__ payload.

    4.6.0release notes

  • useLayout is exported.

    4.6.0release notes

  • useLoadingIndicator is exported.

    4.6.0release notes

  • useRequestHeader is exported.

    4.6.0release notes

  • nuxt/server adds useServerHooks.

    4.6.0release notes

  • Session helpers in nuxt/server seal sessions into a cookie, avoiding the need to configure server-side storage.

    4.6.0release notes

  • Adds host-aware prompts, status messages, and in-progress tasks, rendered by the CLI dev panel when available.

    4.6.0release notes

  • Adding the vapor attribute to script setup opts an individual component or page into Vapor mode.

    4.6.0release notes

  • Nuxt adds support for Vue Vapor.

    4.6.0release notes

  • Server code now has import.meta.test defined.

    4.5.2release notes

  • Adds vue.optionsApi and disables it for Nuxt v5 and later.

    4.5.1release notes

  • Nuxt Kit supports the allowImportingTsExtensions option.

    4.5.0release notes

  • AsyncData gains an enabled option.

    4.5.0release notes

  • Setting the watcher to builder lets Nuxt reuse Vite's watcher, reducing memory use and file handles; it becomes the default with compatibilityVersion 5.

    4.5.0release notes

  • getIslandHash is now exposed alongside improved island and key hashing.

    4.5.0release notes

  • getIslandHash is exposed, alongside hashKey, with improved hashing for keys.

    4.5.0release notes

  • hashKey is now exposed alongside improved island and key hashing.

    4.5.0release notes

  • hashKey is exposed, alongside getIslandHash, with improved hashing for keys.

    4.5.0release notes

  • head.push is added for client-side use.

    4.5.0release notes

  • The environment name is exposed on import.meta.

    4.5.0release notes

  • Sibling page files can use the name@view.vue convention to render into named NuxtPage outlets.

    4.5.0release notes

  • Named views are supported through a filename convention.

    4.5.0release notes

  • A new CLI command uninstalls a module and cleans up its configuration.

    4.5.0release notes

  • The --checker option lets developers force vue-tsc or Golar for type-checking.

    4.5.0release notes

  • NuxtLink prefetch props are exposed in its custom slot.

    4.5.0release notes

  • Routes can opt out of SSR streaming with streaming: false.

    4.5.0release notes

  • Tracing channels are supported for SSR events.

    4.5.0release notes

  • Experimental SSR streaming is available.

    4.5.0release notes

  • Nuxt Kit adds updateAppConfig, a utility for module authors.

    4.5.0release notes

  • useFetch gains support for the enabled option.

    4.5.0release notes

  • A composable is added for accessing the resolved route layout.

    4.5.0release notes

  • Adds the PackagePreset type to addImportsSources.

    4.4.3release notes

  • Page composables are now exported from this import path.

    4.4.0release notes

  • Create custom useAsyncData instances with default options, using the same pattern as createUseFetch.

    4.4.0release notes

  • Create custom useFetch instances with default options; object defaults are overridden by usage options, while a function gives full control over merging.

    4.4.0release notes

  • Pass props to layouts through the layout property in definePageMeta; layout props are typed for autocomplete and type-checking.

    4.4.0release notes

  • Enable this experimental option to normalize page component names to match route names.

    4.4.0release notes

  • The 'client' mode inlines the full payload in the initial HTML while still generating _payload.json for client-side navigation.

    4.4.0release notes

  • Profile build phases, modules, and bundler plugins, with timing, RSS, and heap data written to trace, JSON, and CPU profile reports.

    4.4.0release notes

  • Print timing breakdowns to the console for more detailed build profiling.

    4.4.0release notes

  • Add the NuxtAnnouncer component to the app for accessibility announcements.

    4.4.0release notes

  • NuxtLink.useLink now accepts refs as inputs.

    4.4.0release notes

  • Announce dynamic in-page changes to assistive technology with polite and assertive messages.

    4.4.0release notes

  • Set refresh to extend a cookie's expiration when its value is assigned again, even if the value has not changed.

    4.4.0release notes

  • Define view transition types in Nuxt's experimental view transitions support to use different styles for different navigation patterns.

    4.4.0release notes

  • Allows specifying moduleDependencies by meta.name.

    3.21.1, 4.3.1release notesrelease notes

  • Adds status and statusText getters to NuxtError.

    4.3.1release notes

  • Module authors can pass async functions that construct Vite plugins, enabling lazy loading when plugins are needed.

    3.21.0, 4.3.0release notesrelease notes

  • Module authors can pass async functions that construct webpack plugins, enabling lazy loading when plugins are needed.

    3.21.0, 4.3.0release notesrelease notes

  • Route rules can set layouts directly with appLayout, allowing centralized layout management without scattering definePageMeta calls across pages.

    3.21.0, 4.3.0release notesrelease notes

  • A module inherited from a Nuxt layer can be disabled by setting its options to false.

    3.21.0, 4.3.0release notesrelease notes

  • The Nuxt kit exports a type representing the Nuxt major version.

    4.3.0release notes

  • A new import alias targets the server directory and prevents server code from being imported in client or shared contexts.

    3.21.0, 4.3.0release notesrelease notes

  • setPageLayout accepts a second parameter for passing props to the selected layout.

    3.21.0, 4.3.0release notesrelease notes

  • The status property is introduced as the Web API naming-convention replacement for statusCode.

    4.3.0release notes

  • The statusText property is introduced as the Web API naming-convention replacement for statusMessage.

    4.3.0release notes

  • Components can specify a declarationPath.

    3.20.0, 4.2.0release notesrelease notes

  • Extracts useAsyncData and useLazyAsyncData handlers into separate chunks; for prerendered sites, handlers can be tree-shaken from the client bundle.

    4.2.0release notes

  • Enables experimental TypeScript plugin support through the @dxup/nuxt module for navigation and other Nuxt-specific editor features.

    4.2.0release notes

  • Enables opt-in use of the Vite Environment API, which can improve development performance and eliminate edge case bugs.

    4.2.0release notes

  • Setting this option to 5 opts into breaking changes planned for Nuxt v5; the notes recommend using it only for testing.

    4.2.0release notes

  • NuxtLink accepts object-format href values.

    3.20.0, 4.2.0release notesrelease notes

  • Adds a numeric prop for relative time.

    3.20.0, 4.2.0release notesrelease notes

  • Adds a relativeStyle prop for relative time.

    3.20.0, 4.2.0release notesrelease notes

  • resolveModule accepts an extensions option.

    3.20.0, 4.2.0release notesrelease notes

  • Adds the setGlobalHead utility.

    3.20.0, 4.2.0release notesrelease notes

  • Handlers receive an AbortController signal, and refresh or execute accept a signal to cancel pending requests.

    4.2.0release notes

Performance 16

  • The portable event's web view is built on first access, improving performance when it is not needed.

    4.6.1release notes

  • Typed fetch is rebuilt using a route tree, reducing TypeScript resolution cost and avoiding instantiation-limit errors as route counts grow.

    4.6.0release notes

  • Internal links render as plain <a> elements without useLink, computed values, or reactive state, making server rendering faster.

    4.6.0release notes

  • Parses the cookie header once per request, or once per client microtask, rather than on every call; SSR cookie values set in a plugin can be read later in a page.

    4.6.0release notes

  • Scans are reused for unchanged structures to improve performance.

    4.5.2release notes

  • Unchanged generated files are no longer rewritten, reducing unnecessary file-system work.

    4.5.2release notes

  • Prefetch hints are omitted for chunks that are never hydrated.

    4.5.2release notes

  • Island renders are deduplicated during prerendering.

    3.21.11, 4.5.2release notesrelease notes

  • Unneeded plugin handling is tree-shaken from production builds.

    4.5.0release notes

  • Concurrent callers sharing a key now deduplicate getCachedData calls.

    4.4.5release notes

  • Skips the key watcher when the key is static.

    4.4.3release notes

  • Route generation now uses unrouting; dev server changes are up to 28x faster when pages are not added or removed, and generation is no longer sensitive to page file ordering.

    4.4.0release notes

  • An in-memory LRU payload cache can serve _payload.json requests without triggering a full re-render.

    4.4.0release notes

  • The nuxt:ssr-styles plugin is significantly faster.

    4.3.0release notes

  • Route rules are compiled into a client chunk using rou3, removing radix3 from the client bundle and eliminating app manifest fetches.

    3.21.0, 4.3.0release notesrelease notes

  • Renderer dependencies are precomputed at build time.

    3.20.0, 4.2.0release notesrelease notes

Behavior and default changes 52

  • A default value is now provided for this experimental option.

    4.6.2release notes

  • Component directories support grouping folders.

    4.6.0release notes

  • Can now be used at the top level of setup().

    4.6.0release notes

  • Scopes dev error reports for remote peers and keeps the dev error channel out of production builds.

    4.6.0release notes

  • Error rendering keeps headers and cookies set by the failed render and avoids a second pass through Nitro middleware and route rules.

    4.6.0release notes

  • The builder watcher mode is among the Nuxt 5 defaults available through the compatibility flag.

    4.6.0release notes

  • Generated tsconfigs no longer include baseUrl under the Nuxt 5 compatibility defaults.

    4.6.0release notes

  • A (group)/ folder in components/ is excluded from the generated component name.

    4.6.0release notes

  • The modulepreload polyfill is no longer inlined in UI templates.

    4.6.0release notes

  • Normalized page names are among the Nuxt 5 defaults available through the compatibility flag.

    4.6.0release notes

  • Now has an explicit public API.

    4.6.0release notes

  • Prefetches server-page islands; prefetch hints are throttled and prioritized, with scheduled work deduplicated, concurrency-limited, and cancelled when navigating away.

    4.6.0release notes

  • When the router has no route for a target such as a public/ PDF, the link falls through to a full-page load, so external is no longer required.

    4.6.0release notes

  • Readonly cookies are no longer written on the client.

    4.6.0release notes

  • Redirect route rules return a meta-refresh body.

    4.6.0release notes

  • nuxt/server handlers receive a portable event.

    4.6.0release notes

  • Types in server/types are auto-imported.

    4.6.0release notes

  • typedPages is enabled when compatibilityVersion is 5.

    4.6.0release notes

  • Becomes the shared baseline for all four generated tsconfigs.

    4.6.0release notes

  • The expires option now accepts a function for dynamic expiration values.

    4.6.0release notes

  • useCookie supports a dynamic expires value.

    4.6.0release notes

  • Links inside islands now use client-side navigation.

    3.21.11, 4.5.2release notesrelease notes

  • The islands transform now supports the Options API in v-for.

    4.5.2release notes

  • Revalidates cached route payloads instead of using force-cache.

    3.21.10, 4.5.1release notesrelease notes

  • Converts inline route rules exactly or drops them with a warning.

    4.5.1release notes

  • Client components now render inside nested server components.

    3.21.10, 4.5.1release notesrelease notes

  • Nuxt now honors the system HTTP_PROXY environment variable in the builder environment.

    4.5.0release notes

  • Nuxt now honors the system HTTPS_PROXY environment variable in the builder environment.

    4.5.0release notes

  • Build and runtime warnings and errors now carry stable codes, explanations, and suggested fixes; production output retains the code while omitting verbose guidance.

    4.5.0release notes

  • The nitro-server package statically re-exports h3 named symbols.

    4.4.6release notes

  • Inlines CSS for non-island children of server components.

    3.21.5, 4.4.5release notesrelease notes

  • Nuxt reads .env before resolving the Nuxt schema.

    3.21.5, 4.4.5release notesrelease notes

  • Head DOM updates are deferred until the page transition finishes.

    3.21.5, 4.4.5release notesrelease notes

  • Allows passing arrays of objects as props.

    4.4.3release notes

  • Allows passing arrays of objects as props.

    4.4.3release notes

  • Rspack and webpack emit styles.mjs when inline styles are off.

    3.21.3, 4.4.3release notesrelease notes

  • Reset state to its initial value instead of clearing it to undefined.

    4.4.0release notes

  • Visibility prefetching is disabled in development to prevent Vite from unnecessarily discovering dependencies and reloading.

    4.4.0release notes

  • Payloads are no longer extracted when ssr is false.

    4.4.0release notes

  • The default ignore list now includes direnv and vendor.

    4.3.1release notes

  • Changes in server/ are watched for the builder:watch hook.

    3.21.1, 4.3.1release notesrelease notes

  • allowArbitraryExtensions is enabled by default in the TypeScript configuration.

    3.21.0, 4.3.0release notesrelease notes

  • The development error overlay can be dragged and minimized; its position and minimized state persist across page reloads.

    3.21.0, 4.3.0release notesrelease notes

  • Payload extraction works in development mode with nitro.static enabled or for pages with isr, swr, prerender or cache route rules.

    3.21.0, 4.3.0release notesrelease notes

  • The inlineStyles feature now works with webpack and rspack builders as well as Vite, enabling critical CSS inlining across these bundlers.

    3.21.0, 4.3.0release notesrelease notes

  • Payload extraction now works with ISR, SWR and cache routeRules, allowing client navigation to use cached payloads and reducing API calls.

    3.21.0, 4.3.0release notesrelease notes

  • Module dependencies can now be specified as an async function.

    3.21.0, 4.3.0release notesrelease notes

  • Starts the error overlay minimized based on the status code.

    3.20.1, 4.2.1release notesrelease notes

  • Uses directory paths in moduleEntryPaths.

    4.2.1release notes

  • Uses rolldown replace only during builds.

    4.2.1release notes

  • During development, Nuxt displays both the custom error page and a toggleable technical error overlay.

    4.2.0release notes

  • Component auto-imports are supported as arguments of h().

    3.20.0, 4.2.0release notesrelease notes

Tooling 20

  • The nuxt dev server handler variant is now typed.

    4.6.1release notes

  • $fetch and useFetch are typed from generated server routes.

    4.6.0release notes

  • Development now warns when a route rendered with noScripts relies on client-side JavaScript.

    4.6.0release notes

  • The recommended upgrade command is npx nuxt upgrade --dedupe, which refreshes the lockfile and pulls in the latest Nuxt dependencies, including Nuxt CLI v4.

    4.6.0release notes

  • Nuxt CLI v4 adds an interactive terminal UI, richer startup and reload diagnostics, and a CLI-level error channel that also streams build progress and app logs.

    4.6.0release notes

  • Development now warns when a page's payload exceeds 100 kB.

    4.6.0release notes

  • Development SSR errors now show mapped stack traces and source code frames in an overlay or standalone error page, with the same report printed in the terminal.

    4.6.0release notes

  • $fetch and useFetch are typed from generated server routes.

    4.6.0release notes

  • Route params defined with definePageMeta now have generated types.

    4.5.2release notes

  • Requires a loopback peer for the chrome devtools workspace endpoint.

    3.21.10, 4.5.1release notesrelease notes

  • Watches external component directories during development.

    3.21.10, 4.5.1release notesrelease notes

  • Types auto-imported $fetch with Nitro's $Fetch type.

    4.5.1release notes

  • Nuxt and Vite reuse the Vite watcher via experimental.watcher.

    4.5.0release notes

  • The dev server now reloads when local layer nuxt.config files change.

    4.5.0release notes

  • A nuxt/* build output contract is introduced across the listed build and schema packages.

    4.5.0release notes

  • This package is now an optional peer dependency, so it is not required in every installation.

    4.4.6release notes

  • Import protection errors now include suggestions and a trace showing where a problematic import originated.

    4.4.0release notes

  • When Vite discovers dependencies at runtime, Nuxt provides a copy-pasteable config snippet for pre-bundling them and warns about unresolvable entries at startup.

    4.4.0release notes

  • Layer server directories are now included in tsconfig.server.json.

    3.20.2, 4.2.2release notesrelease notes

  • Test files now support TypeScript path aliases.

    4.2.2release notes

Fixes and other changes 155

nuxt 353 changes

Breaking changes 5

  • The endpoint is gated to local requests.

    3.21.7release notes

  • The open option now rejects script-capable protocols and path-normalization open redirects, preventing unsafe navigation.

    3.21.7release notes

  • Route rules now match case-insensitively, mirroring vue-router.

    3.21.7release notes

  • declarationPath is removed from component directories.

    3.20.0release notes

  • Native attributes can no longer shadow NuxtLink props.

    3.20.0release notes

Security 2

  • Cookie decoding no longer performs unsafe number parsing.

    3.21.0release notes

  • Nuxt is protected against a resolved Nuxt module subpath.

    3.20.2release notes

Deprecations 2

New APIs and options 6

  • Use status in place of the deprecated statusCode property when creating errors.

    3.21.0release notes

  • Use statusText in place of the deprecated statusMessage property when creating errors.

    3.21.0release notes

  • installModule accepts moduleDependencies.

    3.20.2release notes

  • Adds experimental support for TypeScript plugins.

    3.20.0release notes

  • useAsyncData adds an abortController option.

    3.20.0release notes

  • Adds the ability to enable the Vite environment API.

    3.20.0release notes

Performance 2

  • Cache layer roots and short-circuit relative isIgnored checks to improve performance.

    3.21.5release notes

  • AsyncData handlers are extracted to chunks.

    3.20.0release notes

Behavior and default changes 3

  • CSS is now inlined for lazy components imported from #components.

    3.21.9release notes

  • Middleware runs for page islands.

    3.21.6release notes

  • In development, the youch error page is displayed with the user error page.

    3.20.0release notes

Tooling 2

Fixes and other changes 31

  • Normalizes slashes in the build assets directory setting.

    3.21.10release notes

  • Preserves query parameters during cached payload extraction.

    3.21.10release notes

  • Updates the client URL to match SSR after a fatal middleware error.

    3.21.10release notes

  • Removes the development error overlay when the error is cleared.

    3.21.10release notes

  • Reloads the real page module on HMR.

    3.21.10release notes

  • Generates layout types even when the pages module is disabled.

    3.21.10release notes

  • Does not apply scroll behaviour after a subsequent navigation.

    3.21.10release notes

  • Synchronizes layout meta during middleware on SSR.

    3.21.10release notes

  • The fallback tag name is now validated.

    3.21.9release notes

  • Server page CSS is extracted when inlineStyles is disabled.

    3.21.9release notes

  • Concurrent calls in the built-in router now apply the latest navigation.

    3.21.9release notes

  • page:start now finishes before page:finish starts.

    3.21.9release notes

  • Plugin navigation is preserved during app boot.

    3.21.9release notes

  • Teardown now detaches the in-flight promise.

    3.21.9release notes

  • The error type now matches the runtime behavior.

    3.21.9release notes

  • Rspack and webpack require a loopback host when same-origin signals are missing.

    3.21.7release notes

  • Props passed to setPageLayout are preserved during same-path navigation.

    3.21.6release notes

  • Freeze head explicitly during the island plugin phase.

    3.21.5release notes

  • Only consider CSS inlined when styles are actually emitted.

    3.21.5release notes

  • Correct the payload route rule for / when ssr: true overrides it.

    3.21.5release notes

  • Clears a cached rejected promise and fixes alternating execution in navigation mode.

    3.21.3release notes

  • Rspack and webpack now respect the configured test option.

    3.21.3release notes

  • NuxtError now has status and statusText getters and correctly extends the Error type.

    3.21.1release notes

  • Unicode paths in the prerender header are encoded.

    3.21.1release notes

  • Nuxt v3 will continue receiving security updates and critical bug fix releases through July 31, 2026.

    3.21.0release notes

  • Generated references for component declaration items are made valid.

    3.20.2release notes

  • Module dependencies are typed and respected by metadata name.

    3.20.2release notes

  • The root route is preserved in the isPrerendered check.

    3.20.0release notes

  • Cleanup is safe when loadNuxtConfig is called concurrently.

    3.20.0release notes

  • Prerender and Nitro flags are preserved in webpack and rspack server builds.

    3.20.0release notes

  • The shortPath property is added back.

    3.20.0release notes