4.4.3 is the next patch release. v4.4.4 was published with no changes due to an issue running the release script for v4.4.3.
👉 Changelog
🔥 Performance
- nitro: Directly import nuxt package version (#34567)
- vite,webpack: Use vfs for manifest + vite node server (#34666)
- nuxt: Clean-up build hooks + emit gc'd snapshots (#34587)
- nuxt: Skip key watcher when useAsyncData key is static (#34620)
- kit: Parallelise module load + cache jiti instances (#34842)
- nuxt: Batch-resolve typescript hoist paths with cached base roots (#34862)
🩹 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)
- nuxt: Use comment as client component placeholder (#33466)
- nitro: Resolve h3 export path in nitro vfs (#34566)
- nuxt: Use factory resolved options everywhere in
useFetch(#34568) - 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) - nuxt: Correct useAsyncData key type (#34599)
- nitro: Set
__buildAssetsURLbefore server entry import (#34607) - nuxt: Use consistent
[nuxt]prefix in console warnings (#34668) - vite: Remove obsolete
writeDevServer+ handle vite-node precomputed (f8e49b71b) - nuxt: Update impound protection for
nitro/*(ac9e25b8c) - nuxt,schema: Allow disabling clearing build hooks (#34594)
- rspack,webpack: Emit
styles.mjswhen inline styles off (#34697) - nuxt: Fix FormData body hashing in
useFetchdeduplication key (#34546) - nuxt: Generate type re-exports for shared type-only imports (#34632)
- nuxt,nitro: Add
Symbolserialization for dev server logs (#34575) - vite: Do not process css files with decorator transform (#34769)
- vite: Ensure leading slash in
/@fsURLs for Windows (#34810) - vite: Preserve server-origin errors and surface them via Youch (#34820)
- nitro: Do not add import condition for ssr resolve conditions (#34739)
- nuxt: Fix callOnce navigation mode alternating execution (#34718)
- schema,rspack,webpack: Respect configured
testoption (#34827) - nuxt: Handle custom cookie serialisation before passing to
cookie-es(#34711) - nuxt: Link to correct docs page for keyed functions (#34854)
- nuxt: Adjust
setPageLayoutprops type to allow passing arrays of objects (#34860) - nuxt,schema: Move config type to schema + mark type peerDeps (#34864)
- nitro: Restore 'import' condition for ssr resolve (af7a12725)
- nitro: Re-encode
ssrContext.urlto match vue-router (#34902) - schema: Remove type peerDependencies (#34894)
- nuxt: Propagate unexpected errors from
isDirectorySync(#34900) - nuxt: Bridge
@nuxt/schemaaugmentations intonuxt/schema(#34905) - 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) - nitro: Avoid double-decoding of url (3f1a9524b)
- nuxt: Flatten buffer before filtering promises and fix rendering of content (#34863)
- nuxt: Correct async data type inference when using
transformwithgetCachedData(#34819) - 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
- Add v4.4 badge for layout props (#34528)
- Document that component props are sent in query string (619de0dd5)
- Clarify function signature requirement for custom
$fetchincreateUseFetch(#34564) - Update experimental typedPages documentation (#34580)
- Fix page:loading:start description to match implementation (#34617)
- Add missing jsdoc strings (ccb53e0eb)
- Add example for route middleware setup (#34661)
- 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 (8018d6577) - Remove unused field 🤦 (2a75ac774)
- Remove explicit copilot instructions (c7237f22c)
- Use single renovate PR for
3.xand4.xbranches (1dda87b84) - Use top level
vulnerabilityAlertsconfig (39999b7b6) - Dedupe security update prs after update (4734db95c)
- Throttle per host to reduce rate limits in link checking (#34488)
- Update renovate config (214a72bcf)
- Drop redundant
as const(#34909) - Migrate resolutions to
pnpm-workspace.yaml(4a39b1bfa)
✅ Tests
- Use
toThrowinstead oftoThrowError(3d3d8164d) - Update bundle size (e4b31efa4)
- Reduce matrices in ci (#34703)
- Add scroll behavior tests for fixed page key with scrollToTop (#34761)
- Update deprecated error assertions (a7a301095)
🤖 CI
- Add bot workflow (#34677)
- Fix bot label (967eca84b)
- Add agent-scan workflow (#34681)
- Correct renovate bot name in workflow (#34708)
- Correct dependabot bot name in workflow (#34709)
- Drop stackblitz link issue commenter (1e9cacacb)
- Inline actions triggered by labels into triage actions (ee5acd096)
- Update workflows to use renamed type labels (#34933)
❤️ Contributors
- Daniel Roe (@danielroe)
- Sébastien Chopin (@atinux)
- Damian Głowala (@DamianGlowala)
- John (@zecar)
- Eduardo San Martin Morote (@posva)
- abeer0 (@iiio2)
- Florian Heuberger (@Flo0806)
- karl (@krlctrl)
- Idris Gadi (@IdrisGit)
- Ori (@oritwoen)
- Yoshihiro Yamaguchi (@yamachi4416)
- Kilisei (@kilisei)
- Anthony Fu (@antfu)
- edepauw (@edepauw)
- Bochkarev Ivan (@Ibochkarev)
- Matej Černý (@cernymatej)
- Matteo Gabriele (@MatteoGabriele)
- Julien Huang (@huang-julien)
- Oliver Schmidt (@Timbuktu1982)
- Om Mishra (@howwohmm)
- xjccc (@xjccc)
- mcrapts (@mcrapts)
- Louis Ramos (@wJoenn)
- 山吹色御守 (@KazariEX)
- Max (@onmax)
Fetched June 1, 2026
