chore(deps): update nuxt core to v4 - #59
Open
renovate[bot] wants to merge 2 commits into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
July 28, 2025 08:08
a516d71 to
03d6944
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
from
July 29, 2025 04:25
03d6944 to
043f8ab
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
3 times, most recently
from
August 11, 2025 08:55
0413f39 to
42aa1a3
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
August 19, 2025 13:51
d14141f to
9513d99
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
August 31, 2025 10:35
ce030d2 to
7c50a1a
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
3 times, most recently
from
September 8, 2025 04:30
5a12d1a to
f40a8fc
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
September 16, 2025 21:09
1d2d0e9 to
608cdb9
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
from
September 25, 2025 18:10
608cdb9 to
e9f6402
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
from
October 6, 2025 18:55
e9f6402 to
8820652
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
October 25, 2025 06:13
1fc5358 to
d6a86b0
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
November 10, 2025 15:29
fed7e09 to
60d9c3d
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
from
November 16, 2025 13:26
60d9c3d to
ca48e08
Compare
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
November 16, 2025 17:32
4add32c to
68d6b72
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
3 times, most recently
from
November 24, 2025 10:06
4950264 to
9ea0fc7
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
December 9, 2025 19:36
0d642a0 to
ec8ff5a
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
December 15, 2025 13:25
5028f29 to
87d6018
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
3 times, most recently
from
January 23, 2026 18:28
a48d296 to
3177aed
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
2 times, most recently
from
February 7, 2026 12:55
3b336d8 to
3ac2a00
Compare
renovate
Bot
force-pushed
the
renovate/major-nuxt
branch
from
August 6, 2026 08:43
35467c8 to
1191dfc
Compare
Contributor
Author
Edited/Blocked NotificationRenovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR. You can manually request rebase by checking the rebase/retry box above. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
3.21.0→4.1.0^3.16.1→^4.0.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
nuxt/test-utils (@nuxt/test-utils)
v4.1.0Compare Source
👉 Changelog
compare changes
🚀 Enhancements
🩹 Fixes
RouterLinkstub works withpages: false(#1687)ssr.resolve.conditionsto removeimport(#1732)defineVitestProject(#1724)viteEnvironmentApi(#1708)📦 Build
🏡 Chore
h3-nextto optional dependencies (#1733)✅ Tests
autoImport: false(#1688)🤖 CI
❤️ Contributors
v4.0.3Compare Source
👉 Changelog
compare changes
🩹 Fixes
compilerOptionsconditionally (#1659)isActiveslot props (#1640)startServer(#1675)🏡 Chore
❤️ Contributors
v4.0.2Compare Source
👉 Changelog
compare changes
🩹 Fixes
🤖 CI
❤️ Contributors
v4.0.1Compare Source
👉 Changelog
compare changes
🩹 Fixes
mockNuxtImporttypes when using string target (#1592)defineConfigfromvite(1aa5e8748)ResourceLoaderremoval in jsdom v28 (#1611)vitest/environmentsimport warning (#1627)🏡 Chore
vitest-environment-nuxtversions (f5ec72127)pkg-pr-newprereleasevitest-environment-nuxt(#1601)✅ Tests
🤖 CI
pkg-pr-newprerelease (#1598)❤️ Contributors
v4.0.0Compare Source
👀 Highlights
We're releasing Nuxt Test Utils v4, with support for Vitest v4. 🚀
Better mocking support
The biggest improvement in this release is how mocking works. Nuxt initialization has been moved from
setupFilesto thebeforeAllhook (#1516), which meansvi.mockandmockNuxtImportcalls now take effect before Nuxt starts. This fixes a long-standing issue where mocks for composables used in middleware or plugins wouldn't apply reliably (#750, #836, #1496).On top of that,
mockNuxtImportnow passes the original implementation to the factory function (#1552), making partial mocking much more natural:registerEndpointimprovementsregisterEndpointnow works correctly with query parameters in URLs (#1560), and endpoints registered in setup files are no longer lost when modules reset (#1549).🚧 Migration
@nuxt/test-utilsv4 contains a few breaking changes, almost all related to requiring at least vitest v4 as a peer dependency (if you are using vitest). It replacesvite-nodewith Vite's native Module Runner and simplifies pool configuration.This will mean improvements for test performance and mocking, but does require some changes to your test code.
Update your dependencies
Update
vitestand its companion packages together:{ "devDependencies": { - "@nuxt/test-utils": "^3.x", - "vitest": "^3.x", - "@vitest/coverage-v8": "^3.x" + "@nuxt/test-utils": "^4.0", + "vitest": "^4.0", + "@vitest/coverage-v8": "^4.0" } }Peer dependencies
We've tightened peer dependency ranges. You may need to update some of these:
vitest^3.2.0^4.0.2happy-dom*>=20.0.11jsdom*>=27.4.0@jest/globals^29.5.0 || >=30.0.0>=30.0.0@cucumber/cucumber^10.3.1 || >=11.0.0>=11.0.0@testing-library/vue^7.0.0 || ^8.0.1^8.0.1Later environment setup
This is the change that might require most change in your tests. Because we've moved the nuxt environment setup into
beforeAll, this means composables called at the top level of adescribeblock will fail with[nuxt] instance unavailable.This applies to
useRouter(),useNuxtApp(),useRoute(), and any other Nuxt composable or auto-import.Stricter mock exports
If you use
vi.mockwith a factory function, accessing an export that the factory doesn't return will now throw an error instead of silently returningundefined.Other changes
For the full list, see the vitest v4 migration guide.
👉 Changelog
compare changes
🚀 Enhancements
mockNuxtImportfactory (#1552)beforeAllhook (#1516)🩹 Fixes
registerEndpointwith query params (#1560)nextTickimport (#1563)💅 Refactors
@nuxt/devtools-kitfor devtools hooks (426e0b537)📖 Documentation
🏡 Chore
app-vitestfollow advised setup guidelines (#1542).nuxtrc(b4021dee4)✅ Tests
beforeAllhook (#1516)❤️ Contributors
v3.23.0Compare Source
👉 Changelog
compare changes
🚀 Enhancements
🩹 Fixes
$fetchis not typed asany(1f4754ea9)🏡 Chore
console.log(aef693340)✅ Tests
🤖 CI
❤️ Contributors
v3.22.0Compare Source
👉 Changelog
compare changes
🚀 Enhancements
vitestin separate process (#1524)NuxtPageexists (#1530)🔥 Performance
🩹 Fixes
.syncmethod for syncing route (1148c3cf1)server.depsrather thandeps(2b3c86921)sync()in initial setup (ec555192c)devtools:beforehook instead of direct config check (#1532)rootDir(#1531)💅 Refactors
addCleanup(86b4998bb)📖 Documentation
🏡 Chore
nuxtcli command in preference tonuxi(838ed8b6a)@vitest/uito example (ffaccd8a1)package.jsonnames (417102718)✅ Tests
defaultLocalein i18n test (059988fc3)🤖 CI
knipon pull requests (a94098671)❤️ Contributors
nuxt/nuxt (nuxt)
v4.5.2Compare Source
v4.5.1Compare Source
It fixes server-side RCE and unauthorized component instantiation via server island props, a route rule authorization bypass, server component DoS, cross-user payload disclosure on cached pages, and dev server path disclosure. Refreshing your lockfile also pulls in
@nuxt/devtools@3.3.1, which fixes a separate critical development-only RCE.If you already upgraded for the earlier route rule advisory (CVE-2026-53721), you still need this release: one of the fixes addresses a regression introduced by that fix.
If you use the
cache,swrorisrroute rules, purge any CDN or edge cache after upgrading; a leaked_payload.jsonmay already be cached upstream.Full details: Nuxt Security Patch Releases and GitHub Security Advisories.
👉 Changelog
compare changes
🔥 Performance
vue.optionsApiand disable it for v5+ (#35791)ssr: false(#35782)🩹 Fixes
useRoutein detached effect scope (#35659)nameorpathwhen reusing an existing page inpages:extend(#35661)useFetchmethod inference (#35671)force-cache(#35672).mtsfile extension in resolver (#33845)@unhead/vue/*from nuxt's dependency tree (#35690)$fetchwith nitro's$Fetch(#35704)vue-routerwhen there are island pages (#35739)h3that pins it to the version nuxt depends on (#35774)fromcannot be resolved (#35799)app.buildAssetsDir(#35833)templateisland prop under runtime compiler (ee6c84633)asprop for islands (581651ff3)💅 Refactors
semverwithverkit(#35713)📖 Documentation
codeSplitting: false(#35683)onPrehydrateexample comment (#35684)runtimeConfigenv var casting edge cases (#35709)nuxtrather thannuxi(8891e179c)runtimeCompilersecurity best practices (449b63ab1)📦 Build
.tsfile extension fromruntime/imports (#35689)🏡 Chore
@nuxt/telemetryin knip (9824d4f10)@nuxt/devtoolsto v3.3.1 (#35815)✅ Tests
_routein gotoPath (ca92d082b)🤖 CI
knipjob (58f68bd64)❤️ Contributors
v4.5.0Compare Source
📣 Some News
Preparing for Nuxt 5
A good chunk of this release is (hopefully) invisible plumbing for Nuxt 5. We've moved onto the latest major versions of several core dependencies (
unheadv3,unctxv3, and Vite 8), switched the framework's own build over totsdown, and introduced a stablenuxt/*build output contract with dev exports so that type-checking in the Nuxt monorepo works without a build step (#35463, #35605).Much of this is working to shrink the gap between v4 and v5 internally, so that the migration will be as boring as possible.
With the release of Nuxt v4.5, our focus as a team will turn to stabilising Nuxt v5 and creating compatibility utilities to make the upgrade as smooth as possible.
Nuxt 3 End-of-Life
Nuxt 3 reaches end-of-life on July 31, 2026, so this is one of the last few 3.x releases we'll ship. If you're still on v3, now is a great time to move across. Most people told us the v3 to v4 upgrade was smooth, and we've kept the upgrade guide up to date.
Alongside v4.5.0 we're publishing a maintenance patch for the 3.x line (v3.21.9) with the compatible bug fixes and smaller improvements from this release backported. The headline items here (Vite 8, Rspack 2,
unheadv3,unctxv3) are major upgrades and stay v4-only, so 3.x remains stable as it approaches end-of-life.👀 Highlights
Nuxt 4.5 is a big one. This release ships three major upgrades to the build layer (Vite 8, Rspack 2, and a brand new Rsbuild-powered pipeline for the Rspack builder), an experimental SSR streaming mode, a handful of new composables and conventions, and a lot of groundwork that brings us closer to Nuxt 5.
There's a lot here, so grab a coffee. ☕️
⚡️ Vite 8
Nuxt now runs on Vite 8 (#34256). This brings faster cold starts, the latest Rolldown-powered internals, and many upstream improvements from the Vite team.
For most apps this is a transparent upgrade. If you have custom Vite plugins or config, it's worth skimming the Vite migration guide to check for anything that affects you.
🦀 Rspack 2 and Rsbuild
If you use the Rspack builder, this release is a substantial upgrade. We've moved to Rspack 2 (#34929), which is faster and lighter, and rebuilt the builder on top of
@rsbuild/core(#35489).The public surface stays the same. You still opt in with
builder: 'rspack'and the existingrspack:*hooks continue to work:Under the hood, though, a lot has changed for the better:
webpack-dev-middlewareandwebpack-hot-middleware(#35575).🌊 Experimental SSR Streaming
This is one I'm particularly excited about. You can now enable SSR streaming to dramatically improve Time to First Byte (#34411). Instead of buffering the whole rendered page and sending it in one go, Nuxt flushes the HTML shell (your
<head>, styles, preload hints, and entry scripts) immediately, then streams the body as Vue renders it.Streaming is automatically disabled for bots and crawlers so search engines still receive fully-rendered HTML. You can tune which user agents count as crawlers, and you can opt individual routes out:
There's one thing worth understanding before you turn it on. Because streaming commits the HTTP status and headers with the very first byte, anything that mutates the response after rendering has begun (a
setResponseStatus()in a<script setup>, a cookie write during middleware, and so on) can't reach the client. Nuxt handles the common cases for you: routes withredirect,cache,isr,swr,noScripts, orssr: falserules automatically fall back to the buffered renderer, and in development we log a warning naming any dropped mutations so nothing fails silently.📖 SSR streaming documentation
🩺 Stable Error Codes
This one I'm really happy about. Nuxt now has a stable error code system (#35429). Warnings and errors raised during build and at runtime now carry a stable code (like
NUXT_E1001orNUXT_B5001), a short explanation of why it happened, and a concrete fix to try.Every code is greppable and bookmarkable, and the ones that need more than a one-line fix link straight to a dedicated docs page. For example, the classic "a composable was called outside a Nuxt context" now surfaces as
NUXT_E1001with the why/fix inline and a docs page explaining the context rules and how to userunWithContext().To keep production output lean, the verbose why/fix text is stripped from production builds, leaving just the stable code.
This is the foundation for much better error messages across Nuxt, and we'll keep migrating existing warnings and errors onto it over the coming releases. If you've ever squinted at a cryptic Nuxt message, this is for you.
🎨
useLayoutComposableThere's a new
useLayoutcomposable for reading the layout that's been resolved for the current route (#35623). Previously there was no clean, reactive way to ask "which layout is this page using?" from within a component.It returns a read-only computed ref, so it stays in sync as you navigate or as route rules and
definePageMetachange the resolved layout.📖
useLayoutdocumentation🪟 Named Views
Nuxt now supports named views through a filename convention (#35123). If a parent page renders more than one
<NuxtPage>outlet, you can give each outlet a name and provide a sibling page file for it using thename@view.vueconvention:Navigating to
/parent/childrenderschild.vueinto the default outlet andchild@sidebar.vueinto thesidebaroutlet. This has actually been possible in Vue Router for a long time; this release wires it up to Nuxt's file-based routing.📖 Named views documentation
🚦
enabledOption foruseFetchanduseAsyncDataYou can now gate data fetching with a reactive
enabledoption (#33260). Whileenabledisfalse, every execution is blocked (the initial fetch,execute/refresh, and watch triggers), and if you flip it fromtruetofalsemid-flight, the in-flight request is cancelled without clearing your existingdata.This is perfect for dependent or conditional queries, where you don't want to fire a request until some precondition is met. It pairs naturally with a getter or a ref, so it stays reactive.
📖
useAsyncDatadocumentation🔗
NuxtLinkPrefetch Control for Custom SlotsWhen you use
<NuxtLink>with thecustomprop, Nuxt no longer attaches prefetch handlers for you, because it can't know how you've structured your markup. To make that ergonomic, the slot now exposes everything you need to wire prefetching up yourself (#34539):You get
prefetchto trigger it,prefetchedto know whether it's already happened (great for a prefetched class), andshouldPrefetchto respect the user's connection and config.📖
NuxtLinkdocumentation⚡️ Forwarded Preload Hints on Prefetch
Here's another one we'd love you to try. When you prefetch a link to a route with payload extraction, Nuxt already primes the destination's data and chunks. With the new opt-in
experimental.prefetchPreloadTags(#35144), it also forwards the destination's<link rel="preload">andmodulepreloadhints (whatever the page sets viauseHead, or via modules like@nuxt/image's<NuxtImg preload>) into the current document, downgraded torel="prefetch"so they don't compete with the resources the user is looking at right now.The practical effect is that heavy above-the-fold assets on the next page (a hero image, a critical script) start downloading while the user is still on the current one, so the navigation feels instant. It's off by default while we gather feedback, so please give it a spin and tell us how it behaves on your app.
🌐
import.meta.envNameThe resolved Nuxt environment name is now available at runtime as
import.meta.envNamefor both Vite and webpack/Rspack builds (#34844). This is the value set by--envName(or the resolved default), so you can branch on it in your app code:📖
import.metadocumentation🔭 Tracing Channels for SSR Events
Nuxt now publishes diagnostics-channel traces for its server-side subsystems (#35191). It's unopinionated: we emit
nuxt.render,nuxt.island,nuxt.data, andnuxt.pluginchannels following the untracing naming convention, and you can build OpenTelemetry (or anything else) on top. It works in Node, Deno, Bun, and Cloudflare Workers.You can also enable it granularly. In Nuxt v5, there will be additional Nitro-level channels:
📦 Dependency Upgrades
unheadv3Nuxt's head management now runs on
unheadv3 (#34793). It's smaller, uses a synchronous engine internally, and ships better type-safety foruseHeadout of the box. This also unblocks SSR streaming.unctxv3We've moved to
unctxv3 (#35541), which resolves a class of long-standing async context issues (#33644). This is part of the composable-context reliability work that continues into v5.And more
We've also updated
magic-stringto v1, Babel to v8, and pulled in the latest Rolldown across the board. Runningnuxt upgrade --dedupe(see below) is the easiest way to pull these through cleanly.🛠️ Nuxt CLI
This release bundles some improvements from
@nuxt/cliv3.36 and v3.37:nuxt module removeto uninstall a module and clean up its config (nuxt/cli#1306), the natural companion tonuxt module add.Non-interactive
nuxt initfor scripting and CI ([nuxt/cli#Configuration
📅 Schedule: (UTC)
🚦 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 these updates again.
This PR was generated by Mend Renovate. View the repository job log.