3.21.3 is the next patch release. v3.21.4 was published with no changes due to an issue running the release script for v3.21.3.
π Changelog
π₯ Performance
- nuxt: Batch-resolve typescript hoist paths with cached base roots (#34862)
- vite,webpack: Use vfs for manifest + vite node server (#34666)
π©Ή Fixes
- nuxt: Handle negative zero in getUserTrace slice boundary (#34524)
- nuxt: Signal error state and clear timers in loading indicator cleanup (#34523)
- nuxt: Fix broken hook cleanup in route announcer (#34525)
- nuxt: Filter
clearNuxtStatekey enumeration by useState prefix (#34541) - nuxt: Correct
useFetchcacheoptions type (#34551) - nuxt: Prevent in-flight requests from overwriting cleared async data (#34553)
- nuxt: Check response status before parsing payload (#34555)
- nuxt: Handle TS type assertions on member expression callees in keyed functions parser (#34558)
- nitro: Resolve h3 export path in nitro vfs (#34566)
- nitro: Use hash-based cache for dev payloads (#34569)
- nuxt: Await parcel watcher subscription before registering close hook (#34573)
- nuxt: Self-remove hydration error guards after first navigation (#34572)
- nuxt: Mark portal properties as configurable (#34574)
- nuxt: Retry manifest fetch after transient failure (#34570)
- kit: Add PackagePreset type to addImportsSources (#34582)
- nuxt: Avoid any return type from
callHookWithinvue:setup(#34584) - nuxt: Strip DevOnly components with attributes in production builds (#34585)
- nuxt: Move parcel watcher debug timer outside subscription loop (#34590)
- nuxt: Preserve falsy prop values in
NuxtTimedata attribute serialization (#34600) - nuxt: Clear cached rejected promise in
callOnce(#34614) - nitro: Set
__buildAssetsURLbefore server entry import (#34607) - nuxt: Use consistent
[nuxt]prefix in console warnings (#34668) - nitro: Do not add import condition for ssr resolve conditions (#34739)
- rspack,webpack: Emit
styles.mjswhen inline styles off (#34697) - nuxt: Fix FormData body hashing in
useFetchdeduplication key (#34546) - nuxt,nitro: Add
Symbolserialization for dev server logs (#34575) - vite: Ensure leading slash in
/@fsURLs for Windows (#34810) - vite: Preserve server-origin errors and surface them via Youch (#34820)
- nuxt: Fix callOnce navigation mode alternating execution (#34718)
- schema,rspack,webpack: Respect configured
testoption (#34827) - nitro: Restore 'import' condition for ssr resolve (247254652)
- nuxt: Propagate unexpected errors from
isDirectorySync(#34900) - nitro: Re-encode
ssrContext.urlto match vue-router (#34902) - vite: Remove obsolete
writeDevServer+ handle vite-node precomputed (c45b45b9c) - nitro: Avoid double-decoding of url (93e731ba3)
- nuxt: Sync
_routewhen navigating up the route tree (#34918) - nuxt: Skip
<NuxtPage>cached vnode when its suspense is unmounted (#34899) - nitro: Only recommend payload extraction when
ssris enabled (#34924) - nuxt: Flatten buffer before filtering promises and fix rendering of content (#34863)
- nuxt: Avoid transforming
NuxtTeleportIslandComponentwith nuxt-client directive (#34817) - nuxt: Resolve layer aliases in css files (#34940)
- nuxt: Invoke user-supplied error handler when suppressing render errors (#34938)
π Documentation
- Document that component props are sent in query string (1bf4fa87c)
- Fix page:loading:start description to match implementation (#34617)
- Add missing jsdoc strings (30a9a49aa)
- Work around upstream bun bug (#34792)
- Use new object boolean syntax when prefetchOn interaction (#34825)
- Remove @nuxt/scripts from core modules roadmap (#34835)
- Remove @nuxt/hints from core modules roadmap (#34867)
- Correct URL (#34907)
- Set
NODE_ENVtoproductionin deployment examples (#34937)
π‘ Chore
- Do not ship
devDependencieswhen publishing (07f05c1a2) - Remove unused field π€¦ (5644951b5)
- Remove explicit copilot instructions (240721d38)
- Use single renovate PR for
3.xand4.xbranches (8193a6025) - Use top level
vulnerabilityAlertsconfig (1975bf748) - Dedupe security update prs after update (df17b0aec)
- Throttle per host to reduce rate limits in link checking (#34488)
- Drop redundant
as const(#34909) - Pin typescript (e94ed7ac5)
β Tests
- Use
toThrowinstead oftoThrowError(60d5c8d21) - Reduce matrices in ci (#34704)
- Add scroll behavior tests for fixed page key with scrollToTop (#34761)
- Update deprecated error assertions (9ba7ca7b6)
π€ CI
- Ensure
latesttag is published first + manual oidc exchange for dist-tag (7339257f8) - Add bot workflow (#34677)
- Fix bot label (a222917b2)
- Don't run ossf workflow on
4.xbranch (c183f341b) - Add agent-scan workflow (#34681)
- Correct renovate bot name in workflow (#34708)
- Correct dependabot bot name in workflow (#34709)
- Drop stackblitz link issue commenter (884ab3757)
- Inline actions triggered by labels into triage actions (124f65c5f)
- Update workflows to use renamed type labels (#34933)
β€οΈ Contributors
- Daniel Roe (@danielroe)
- SΓ©bastien Chopin (@atinux)
- John (@zecar)
- Eduardo San Martin Morote (@posva)
- Florian Heuberger (@Flo0806)
- abeer0 (@iiio2)
- karl (@krlctrl)
- Ori (@oritwoen)
- Kilisei (@kilisei)
- Anthony Fu (@antfu)
- Matej ΔernΓ½ (@cernymatej)
- Bochkarev Ivan (@Ibochkarev)
- Matteo Gabriele (@MatteoGabriele)
- Julien Huang (@huang-julien)
- Yoshihiro Yamaguchi (@yamachi4416)
- antlis (@antlis)
- Om Mishra (@howwohmm)
- Louis Ramos (@wJoenn)
- xjccc (@xjccc)
Fetched June 1, 2026
