Update dependency nuxt to v4 #3

Open
renovate-bot wants to merge 1 commit from renovate/major-nuxtjs-monorepo into master
Collaborator

This PR contains the following updates:

Package Change Age Confidence
nuxt (source) ^3.15.4 -> ^4.0.0 age confidence

Release Notes

nuxt/nuxt (nuxt)

v4.2.2

Compare Source

4.2.2 is the next patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • nitro: Do not show pretty error handler when testing (243261edb)
  • nuxt: Generate valid references for component declaration items (#​33388)
  • nuxt: Sync internal route before calling page:finish hook (#​33707)
  • kit: Add TypeScript path alias support for test files (#​33672)
  • nitro: Ensure html is a string before injecting error handler (f70b70c97)
  • nitro: Include layer server directories in tsconfig.server.json (#​33510)
  • nuxt: Ensure deduped async data executions return latest promise (#​33740)
  • kit,nuxt: Type + respect moduleDependencies by meta name (#​33774)
  • nuxt,schema: Ignore .d.vue.ts declarations (1c73525a2)
  • kit,nuxt: Protect against resolved nuxt module subpath (#​33767)
  • nuxt: Re-execute callOnce during HMR (#​33810)
  • nuxt: Resolve watch callback after reactive key change in useAsyncData (#​33802)
  • nuxt: Escape HTML in development error page stack trace (#​33820)
  • kit: Do not add resolved rootDir to cached layer config (#​33779)
  • kit,schema: Add moduleDependencies -> installModule (#​33689)
💅 Refactors
  • nuxt: Improve type safety within callOnce function (#​33825)
📖 Documentation
🏡 Chore
  • Update pnpm to 10.21 and enable trust policy (d2c9711c0)
  • Revert pnpm trust policy and restore provenance action (f9d0e0a3d)
  • Update markdownlint config to ignore mdc issues (e7fff7132)
  • Pin to single version of unstorage (ec316eae8)
Tests
  • Add patchProp and nodeOps to excluded Vue helpers (#​33754)
  • Use fake timers for watch params test (08d9d2f3b)
🤖 CI
  • Add --pnpm flag to correctly publish prerelease (#​33688)
  • Update action lint config (#​33710)
❤️ Contributors

v4.2.1

Compare Source

4.2.1 is the next patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • kit,nuxt,schema: Deprecate ImportPresetWithDeprecation (#​33596)
  • nuxt: Correct warning message for prefetch/noPrefetch conflict (#​33617)
  • nitro: Remove <nuxt-error-overlay> iframe border (#​33625)
  • vite: Use rolldown replace only in build (#​33615)
  • nitro: Use directory paths in moduleEntryPaths (#​33628)
  • nitro: Start error overlay minimized based on status code (#​33658)
  • vite: Ensure optimizeDeps config is applied before other plugins (#​33586)
  • nuxt: Respect layer priority order for scanned components (#​33654)
  • nuxt: Process prerender routes on pages:resolved (#​33662)
  • nuxt: Remove abort signal event listeners after render (#​33665)
  • nuxt: Cleanup event listener with cleanup signal (#​33667)
  • vite: Update vite-node (#​33663)
  • vite: Respect vite proxy in dev middleware (#​33670)
💅 Refactors
  • kit,nitro,nuxt,schema,vite: Explicitly import process/performance (#​33650)
📖 Documentation
  • Fix typo in eslint flat config description (#​33569)
  • Add signal support to useAsyncData examples (#​33601)
  • Document pending as alias of status === 'pending' (#​33221)
  • Note that cookieStore is true by default (#​33572)
  • Add information on types for server context (#​33511)
  • Mark webstorm issue resolved (#​33608)
  • Clarify route middleware doesn't affect API routes (#​33643)
  • Improve docs for useHead/useHydration/useLazy* (#​33626)
  • Update link to nitro source to v2 branch (08018af4f)
  • Add typescript documentation for module authors (#​33637)
  • Typo (#​33655)
🏡 Chore
🤖 CI
  • Disable cache in release action (ff37598bc)
❤️ Contributors

v4.2.0

Compare Source

4.2.0 is the next minor release.

👀 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 AbortController signals directly within useAsyncData, giving you fine-grained control over request cancellation (#​32531).

This works by passing an internal signal to your useAsyncData handler to cancel any promise that can be canceled, such as $fetch.

<script setup lang="ts">
const controller = new AbortController()

const { data, error, clear, refresh } = await useAsyncData('users', (_nuxtApp, { signal }) => $fetch('/api/users', {
  signal
}))

refresh() // will actually cancel the $fetch request (if dedupe: cancel)
refresh() // will actually cancel the $fetch request (if dedupe: cancel)
refresh()
  
clear() // will cancel the latest pending handler
</script>

You also pass an AbortController signal directly to refresh/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.

const { data, refresh } = await useAsyncData('posts', fetchPosts)

// Abort an ongoing refresh
const abortController = new AbortController()
refresh({ signal: abortController.signal })

// Later...
abortController.abort()
🎨 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.

Screenshot of the new development error page

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.

export default defineNuxtConfig({
  experimental: {
    viteEnvironmentApi: true
  }
})

This is also the first breaking change for Nuxt v5. You can opt in to these breaking changes by setting compatibilityVersion to 5:

export default defineNuxtConfig({
  future: {
    compatibilityVersion: 5
  },
})

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.

[!WARNING]
This is highly experimental and the API may change. Only enable if you're prepared for potential breaking changes and want to help shape the future of Nuxt!

📦 New @nuxt/nitro-server Package

We'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+).

[!NOTE]
This is an internal refactor – no changes should be required in your code.

Performance Improvements

We've also shipped several performance enhancements:

  • Precomputed renderer dependencies – We now compute renderer dependencies at build time rather than runtime, improving cold start and initial render performance (#​33361)
  • Reduced dependencies – Removed unnecessary dependencies from kit and schema packages (7ae2cf563)
📉 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 useAsyncData and useLazyAsyncData are 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.

[!NOTE]
In testing with a previous version of nuxt.com, this feature reduced JavaScript bundle size by 39%! Of course, your mileage may vary depending on how much data fetching logic you have.

<script setup lang="ts">
// This handler will be extracted into a separate chunk
// and only loaded when needed
const { data: post } = await useAsyncData('post', async () => {
  const content = await queryContent(`/blog/${route.params.slug}`).findOne()
  
  // Complex data processing that you don't want in the client bundle
  const processed = await processMarkdown(content)
  const related = await findRelatedPosts(content.tags)
  
  return {
    ...processed,
    related
  }
})
</script>

For static/prerendered sites, enable it in your config:

export default defineNuxtConfig({
  experimental: {
    extractAsyncDataHandlers: true
  }
})

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/nuxt module.

This module adds a number of TypeScript plugins that aim to improve your experience when using Nuxt-specific features:

  • Smart component renaming: Automatically updates all references when you rename auto-imported component files
  • Go to definition for dynamic imports: Navigate directly to files when using glob patterns like import(\~/assets/${name}.webp`)`
  • Nitro route navigation: Jump to server route handlers from data fetching functions ($fetch, useFetch, useLazyFetch)
  • Runtime config navigation: Go to definition works seamlessly with runtime config properties
  • Enhanced auto-import support: Includes the @dxup/unimport plugin for better navigation with auto-imported composables and utilities

[!NOTE]
Read more in the documentation.

To enable this feature, set experimental.typescriptPlugin to true in your Nuxt configuration:

export default defineNuxtConfig({
  experimental: {
    typescriptPlugin: true
  }
})

Once enabled, the module will be automatically installed and configured by Nuxt.

[!IMPORTANT]
This feature also requires selecting the workspace TypeScript version in VS Code. Run the "TypeScript: Select TypeScript Version" command and choose "Use Workspace Version".

🎁 Other Improvements
  • Component declarationPath – You can now specify a custom declaration path for components (#​33419)
  • Module resolution extensions – Kit's resolveModule now accepts an extensions option (#​33328)
  • Global head utility – New setGlobalHead utility in kit for easier head management (#​33512)
🩹 Important Fixes
  • Route hash is now preserved when redirecting based on routeRules (#​33222)
  • Fixed concurrent calls to loadNuxtConfig with proper cleanup (#​33420)
  • Object-format href now works correctly in <NuxtLink> (c69e4c30d)
  • Component auto-imports now work as arguments to Vue's h() function (#​33509)
  • Fixed app config array handling during HMR (#​33555)
Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • nuxt: Allow specifying component declarationPath (#​33419)
  • kit: Add extensions option for resolveModule (#​33328)
  • nuxt: Add abortController option to useAsyncData (#​32531)
  • nuxt: Display youch error page w/ user error page in dev (#​33359)
  • nuxt: Experimental typescript plugin support (#​33314)
  • nuxt,schema: Extract asyncData handlers to chunks (#​33131)
  • schema: Enable setting future.compatibilityVersion to 5 (22f4693a1)
  • kit,vite: Allow enabling vite environment api (#​33492)
  • kit: Add setGlobalHead utility (#​33512)
🔥 Performance
  • nuxt: Precompute renderer dependencies at build time (#​33361)
  • kit,schema: Remove some unnecessary dependencies (7ae2cf563)
🩹 Fixes
  • nuxt: Preserve hash with redirecting based on routeRules (#​33222)
  • kit: Safely cleanup loadNuxtConfig in concurrent calls (#​33420)
  • nuxt: Allow object-format href in <NuxtLink> (c69e4c30d)
  • nuxt: Remove mergeModels from auto imports (#​33344)
  • nuxt: Add back shortPath property (#​33384)
  • nuxt: Do not allow native attrs to shadow nuxt link props (4751a6aca)
  • nuxt: Remove declarationPath from component dirs (191bcb7e9)
  • nuxt: Preserve root route in isPrerendered check (#​33476)
  • nuxt: Exempt webpack vfs from pkg lookup (285eac31c)
  • nitro: Exempt nightly release from import protections (dd522394a)
  • webpack,rspack: Preserve prerender + nitro flags in server builds (#​33503)
  • nuxt: Support component auto-imports as arguments of h() (#​33509)
  • vite: Prevent assignment for rolldown's replacement plugin (#​33526)
  • nuxt: Use sha256 hash for prerender cache keys (#​33505)
  • nuxt: Add NuxtTime relative time numeric prop (#​33552)
  • nuxt: Add NuxtTime relative time relativeStyle prop (#​33557)
  • nuxt: Handle arrays in app config correctly during HMR (#​33555)
  • vite: Unset optimizeDeps.include for server environment (#​33550)
💅 Refactors
  • Remove obsolete shortPath property (#​33384)
  • kit: Extract trace utilities (9687505ac)
  • nuxt,vite,webpack: Allow builders to augment types (#​33427)
  • schema: Deprecate extend, extendConfig, and configResolved hooks (e060b9695)
  • vite: Make vite plugins environment-compatible (#​33445)
  • nitro,nuxt: Extract @nuxt/nitro-server package (#​33462)
  • nuxt: Use RouteLocationNormalizedLoadedGeneric internally (b51cb3067)
📖 Documentation
  • Update link to localisation issue (d32859da2)
  • Add nuxt module addServerPlugin note (#​33409)
  • Remove deprecated node version (#​33411)
  • Update declarationPath in addComponent (#​33380)
  • Reproduction links for Nuxt v4 (#​33429)
  • Add some notes/deprecations for vite hooks (31c5f26a2)
  • Fix incorrect ESM module field info (#​33451)
  • Recommend getLayerDirectories() instead of nuxt.options._layers (#​33484)
  • Add 4.x prefix (5c0bb9285)
  • Add docs for moduleDependencies (#​33499)
  • Clarify extends removal in TypeScript config migration (#​33523)
  • Pin codemod to v0.18.7 for migration recipe (#​33522)
  • Fix links (#​33554)
🏡 Chore
  • Migrate gitpod to ona (#​33159)
  • Use native node to run test:prepare (6ef632b82)
  • Do not use native node to run test:prepare (eca36cfe5)
  • Lint docs (3b9784111)
  • Update valid semantic scopes (3c38d1f8b)
  • Ignore nitro templates (27cf85bdc)
  • Update internal links (aac763017)
  • Remove vue-demi from ignoredBuiltDependencies (#​33494)
  • Update vscode url (#​33360)
  • Correct jsdoc location for function used as parameters (#​33507)
  • Remove code comment (#​33515)
  • Patch changelogen for large numbers of commits (bd36738b8)
  • Link Nuxt 1.x and 2.x (2016–2022) history to main (85838dfd9)
  • Filter out commits before last tag when constructing changelog (1c561daeb)
  • Also respect since date for bump type (08900f610)
  • Also respect since in nightly releases (74ca73ca1)
  • Ignore @rollup/plugin-commonjs (cd12980ce)
Tests
  • Refactor suite to use common matrix utils (#​33483)
🤖 CI
  • Publish @nuxt/nitro-server on pkg-pr-new (b7ccf17bf)
  • Remove nitro-server publish until v4.2 is released (904d4f6ec)
❤️ Contributors

v4.1.3

Compare Source

4.1.3 is a regularly scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • vite: Use rolldown's replace plugin when applicable (#​33258)
🩹 Fixes
  • kit: Add default values when adding type references in prepare:types hook (#​33239)
  • nuxt: Augment app config in server context (#​33287)
  • nuxt: Make lazy component types compatible with h (#​33046)
  • vite: Deduplicate inlined server style chunks (#​33308)
  • nuxt: Support head option on useHead (#​33318)
  • nuxt: Do not relativise importmap if cdnURL is set (#​33333)
  • nuxt: Resolve aliases in imports.dirs (#​33334)
  • nuxt: Add missing element/vnode props for <NuxtLink> (#​33335)
  • nuxt: Do not generate server placeholder components (#​33345)
  • nuxt: Dedupe generated component names (#​33346)
  • webpack: Test watch instance before closing it (0e5a0a5a0)
  • nuxt: Correctly handle island rendering error (#​33302)
  • nuxt: Support v-slot:fallback longform syntax in <DevOnly> (#​33368)
  • nuxt: Support typeFrom when generating auto-import type templates (#​33373)
  • nuxt: Don't trigger scroll when changing trailing slash (#​33358)
  • nuxt: Add stubs for new scripts from @nuxt/scripts (bed410d60)
  • nuxt: Prevent duplicate execution on key change in useAsyncData (#​33325)
  • nuxt: Make middleware _path property configurable for HMR (#​33379)
  • nuxt: Handle non-immediate useAsyncData with different key on ssr (#​33341)
💅 Refactors
  • nuxt: Improve implementation of error composables (#​33234)
  • nuxt: Resolve path of typed-router.d.ts early for consistency (#​33285)
  • nuxt: Move server references to nitro:prepare:types hook (#​33286)
  • nuxt: Place filename into componentsIslandsTemplate definition (#​33394)
  • nuxt,vite: Use environment-api compatible plugins (#​33403)
📖 Documentation
  • Add 4.x prefix to all internal links (#​33264)
  • Fix more links (#​33265)
  • Update usage instructions for Windows users (#​33284)
  • Update app config paths to use app/app.config.ts (#​33297)
  • Remove d suffix in example (#​33298)
  • Move directory structure to top-level (#​33299)
  • Add information about useFetch reactivity (#​33317)
  • Add more 4.x prefixes in urls (47ea684c7)
  • Lint code samples within docs (#​33271)
  • Remove duplicated documentation from nuxt.config page (b438d44e1)
  • Remove docs for outdated asyncData configuration (3e4a999e6)
  • Note prepare command NODE_ENV behavior (#​33330)
  • Update nuxt command pages (#​33336)
🏡 Chore
Tests
  • nuxt: Set locale to en for nuxt-time tests (#​33343)
  • Double gotoPath timeout in CI (f1e5a2d4c)
🤖 CI
  • Add provenance action to check for downgrades in provenance (5ada6861e)
  • Pass commit sha when triggering ecosystem ci (399df6bab)
❤️ Contributors

v4.1.2

Compare Source

4.1.2 is a regularly scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • kit: Do not normalise templates in loop if dst is present (#​33200)
  • nuxt: Remove watcher from hydrate-when lazy hydration strategy (#​33199)
  • nuxt,schema: Normalise components + directories more efficiently (#​33207)
  • kit,nuxt: Reduce unnecessary iteration in nuxt code (#​33212)
  • nuxt: Skip running lazy hydration transform with filter (#​33213)
🩹 Fixes
  • schema: Add pkg-types to dependencies (9fe2541ca)
  • nuxt: Ignore errors when treeshaking composables within other composables (f99eac516)
  • nuxt: Do not tree-shake composables within other composables (#​33153)
  • kit: Ensure module dependencies are typed correctly (4568e8451)
  • nuxt: Prevent Infinity backgroundSize in loading indicator (#​33211)
  • nuxt: Remove unused enabled from components dir options (#​32844)
  • nuxt: Sync watch request in useAsyncData (#​33192)
  • nuxt: Move key imports logic after all modules run (#​33214)
📖 Documentation
  • Update reference to source dir (65712297a)
  • Update language on bridge head migration (c9d986889)
  • Update file path for pinia store (#​33205)
  • Add app/ suffix to a few links (#​33217)
🏡 Chore
Tests
❤️ Contributors

v4.1.1

Compare Source

v4.1.1 is a regularly scheduled patch release

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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: Correct relative path of auto imported components (#​33122)
  • nuxt: Prefer accessing globalThis over window (#​33125)
  • nuxt: Migrate to AST-aware tree-shaking + route injection (#​33128)
  • nuxt: Ignore #components import mapping inside packages that use it internally (#​33049)
  • vite: Remove explicit vite-node configuration of deps.inline (#​33133)
  • nuxt: Include trace in dev-time useRoute usage warning (#​33039)
  • kit: Improve DX by displaying module name when possible (#​33137)
  • nuxt: Print route middleware path in warning (#​33136)
  • nuxt: Include core auto-imports from imports:sources in override warning (#​33050)
  • nuxt: Render relative importmap entry path if required (#​33146)
📖 Documentation
🏡 Chore
🤖 CI
  • Remove default discord reactions from thread (more noise than it's worth) (183913fe2)
  • Rewrite release workflow in ts + support multiple tags (4469ead82)
  • Pass correct flag (711037cda)
  • Pass tag via env variable (fb83cd5ba)
  • Drop 4x tags from releases (1cd8a6857)
❤️ Contributors

v4.1.0

Compare 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:

<!-- Automatically injected import map -->
<script type="importmap">{"imports":{"#entry":"/_nuxt/DC5HVSK5.js"}}</script>

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:

  1. a component is changed slightly - the hash of its JS chunk changes
  2. the page which uses the component has to be updated to reference the new file name
  3. the entry now has its hash changed because it dynamically imports the page
  4. every other file which imports the entry has its hash changed because the entry file name is changed

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.target to include a browser that doesn't support import maps.

And of course you can disable it if needed:

export default defineNuxtConfig({
  experimental: {
    entryImportMap: false
  }
})
🦀 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:

{
  "overrides": {
    "vite": "npm:rolldown-vite@latest"
  }
}

pnpm:

{
  "pnpm": {
    "overrides": {
      "vite": "npm:rolldown-vite@latest"
    }
  }
}

yarn:

{
  "resolutions": {
    "vite": "npm:rolldown-vite@latest"
  }
}

bun:

{
  "overrides": {
    "vite": "npm:rolldown-vite@latest"
  }
}

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.

[!NOTE]
This is experimental and may have some limitations, but offers a glimpse into the future of high-performance bundling in Nuxt.

🧪 Improved Lazy Hydration

Lazy hydration macros now work without auto-imports (#​33037), making them more reliable when component auto-discovery is disabled:

<script setup>
// Works even with components: false
const LazyComponent = defineLazyHydrationComponent(
  'visible',
  () => import('./MyComponent.vue')
)
</script>

This ensures that components that are not "discovered" through Nuxt (e.g., because components is set to false in 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 rules property on NuxtPage objects (#​32897), making them more accessible to modules and improving the overall architecture:

// In your module
nuxt.hook('pages:extend', pages => {
  pages.push({
    path: '/api-docs',
    rules: { 
      prerender: true,
      cors: true,
      headers: { 'Cache-Control': 's-maxage=31536000' }
    }
  })
})

The defineRouteRules function 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:

export default defineNuxtModule({
  meta: {
    name: 'my-module',
  },
  moduleDependencies: {
    'some-module': {
      // You can specify a version constraint for the module
      version: '>=2',
      // By default moduleDependencies will be added to the list of modules 
      // to be installed by Nuxt unless `optional` is set.
      optional: true,
      // Any configuration that should override `nuxt.options`.
      overrides: {},
      // Any configuration that should be set. It will override module defaults but
      // will not override any configuration set in `nuxt.options`.
      defaults: {}
    }
  },
  setup (options, nuxt) {
    // Your module setup logic
  }
})

This replaces the deprecated installModule function 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: onInstall and onUpgrade (#​32397). These hooks allow modules to perform additional setup steps when first installed or when upgraded to a new version:

export default defineNuxtModule({
  meta: {
    name: 'my-module',
    version: '1.0.0',
  },

  onInstall(nuxt) {
    // This will be run when the module is first installed
    console.log('Setting up my-module for the first time!')
  },

  onUpgrade(inlineOptions, nuxt, previousVersion) {
    // This will be run when the module is upgraded
    console.log(`Upgrading my-module from v${previousVersion}`)
  }
})

The hooks are only triggered when both name and version are provided in the module metadata. Nuxt uses the .nuxtrc file internally to track module versions and trigger the appropriate hooks. (If you haven't come across it before, the .nuxtrc file should be committed to version control.)

[!TIP]
This means module authors can begin implementing their own 'setup wizards' to provide a better experience when some setup is required after installing a module.

🙈 Enhanced File Resolution

The new ignore option for resolveFiles (#​32858) allows module authors to exclude specific files based on glob patterns:

// Resolve all .vue files except test files
const files = await resolveFiles(srcDir, '**/*.vue', {
  ignore: ['**/*.test.vue', '**/__tests__/**']
})
📂 Layer Directories Utility

A new getLayerDirectories utility (#​33098) provides a clean interface for accessing layer directories without directly accessing private APIs:

import { getLayerDirectories } from '@&#8203;nuxt/kit'

const layerDirs = await getLayerDirectories(nuxt)
// Access key directories:
// layerDirs.app        - /app/ by default
// layerDirs.appPages   - /app/pages by default
// layerDirs.server     - /server by default
// layerDirs.public     - /public by default
Developer Experience Improvements
🎱 Simplified Kit Utilities

Several kit utilities have been improved for better developer experience:

  • addServerImports now supports single imports (#​32289):
// Before: required array
addServerImports([{ from: 'my-package', name: 'myUtility' }])

// Now: can pass directly
addServerImports({ from: 'my-package', name: 'myUtility' })
🔥 Performance Optimizations

This release includes several internal performance optimizations:

  • Improved route rules cache management (#​32877)
  • Optimized app manifest watching (#​32880)
  • Better TypeScript processing for page metadata (#​32920)
🐛 Notable Fixes
  • Improved useFetch hook typing (#​32891)
  • Better handling of TypeScript expressions in page metadata (#​32902, #​32914)
  • Enhanced route matching and synchronization (#​32899)
  • Reduced verbosity of Vue server warnings in development (#​33018)
  • Better handling of relative time calculations in <NuxtTime> (#​32893)

Upgrading

As usual, our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • kit: Add ignore option to resolveFiles (#​32858)
  • kit: Add onInstall and onUpgrade module hooks (#​32397)
  • nuxt,vite: Add experimental support for rolldown-vite (#​31812)
  • nuxt: Extract defineRouteRules to page rules property (#​32897)
  • nuxt,vite: Use importmap to increase chunk stability (#​33075)
  • nuxt: Lazy hydration macros without auto-imports (#​33037)
  • kit,nuxt,schema: Allow modules to specify dependencies (#​33063)
  • kit,nuxt: Add getLayerDirectories util and refactor to use it (#​33098)
🔥 Performance
  • nuxt: Clear inline route rules cache when pages change (#​32877)
  • nuxt: Stop watching app manifest once a change has been detected (#​32880)
🩹 Fixes
  • nuxt: Handle satisfies in page augmentation (#​32902)
  • nuxt: Type response in useFetch hooks (#​32891)
  • nuxt: Add TS parenthesis and as expression for page meta extraction (#​32914)
  • nuxt: Use correct unit thresholds for relative time (#​32893)
  • nuxt: Handle uncached current build manifests (#​32913)
  • kit: Resolve directories in resolvePath and normalize file extensions (#​32857)
  • schema,vite: Bump requestTimeout + allow configuration (#​32874)
  • nuxt: Deep merge extracted route meta (#​32887)
  • nuxt: Do not expose app components until fully resolved (#​32993)
  • kit: Only exclude node_modules/ if no custom srcDir (#​32987)
  • nuxt: Transform ts before page meta extraction (#​32920)
  • nuxt: Compare final matched routes when syncing route object (#​32899)
  • nuxt: Make vue server warnings much less verbose in dev mode (#​33018)
  • schema: Allow disabling cssnano/autoprefixer postcss plugins (#​33016)
  • kit: Ensure local layers are prioritised alphabetically (#​33030)
  • kit,nuxt: Expose global types to vue compiler (#​33026)
  • deps: Bump devalue (#​33072)
  • nuxt: Support config type inference for defineNuxtModule().with() (#​33081)
  • nuxt: Search for colliding names in route children (b58c139d2)
  • nuxt: Delete nuxtApp._runningTransition on resolve (#​33025)
  • nuxt: Add validation for nuxt island reviver key (#​33069)
💅 Refactors
  • nuxt: Simplify page segment parsing (#​32901)
  • nuxt: Remove unnecessary async/await in afterEach (#​32999)
  • vite: Simplify inline chunk iteration (6f4da1b8c)
  • kit,nuxt,ui-templates,vite: Address deprecations + improve regexp perf (#​33093)
📖 Documentation
  • Switch example to use vitest projects (#​32863)
  • Update testing setupTimeout and add teardownTimeout (#​32868)
  • Update webRoot to use new app directory (df7177bff)
  • Add middleware to layers guide (6fc25ff79)
  • Use app/ directory in layer guide (eee55ea41)
  • Add documentation for --nightly command (#​32907)
  • Update package information in roadmap section (#​32881)
  • Add more info about nuxt spa loader element attributes (#​32871)
  • Update features.inlineStyles default value (6ff3fbebb)
  • Correct filename in example (#​33000)
  • Add more information about using useRoute and accessing route in middleware (#​33004)
  • Avoid variable shadowing in locale example (#​33031)
  • Add documentation for module lifecycle hooks (#​33115)
🏡 Chore
  • config: Migrate renovate config (#​32861)
  • Remove stray test file (ca84285cc)
  • Ignore webpagetest.org when scanning links (6c974f0be)
  • Add type: 'module' in playground (#​33099)
Tests
  • Add failing test for link component duplication (#​32792)
  • Simplify module hook tests (#​32950)
  • Refactor stubbing of import.meta.dev (#​33023)
  • Use findWorkspaceDir rather than relative paths to repo root (a6dec5bd9)
  • Improve router test for global transitions (5d783662c)
  • Use expect.poll (53fb61d5d)
  • Use expect.poll instead of expectWithPolling (357492ca7)
  • Use vi.waitUntil instead of custom retry logic (611e66a47)
🤖 CI
  • Remove double set of tests for docs prs (6bc9dccf4)
  • Add workflow for discord team discussion threads (bc656a24d)
  • Fix some syntax issues with discord + github integrations (f5f01b8c1)
  • Use token for adding issue to project (66afbe0a2)
  • Use discord bot to create thread automatically (618a3cd40)
  • Only use discord bot (bfd30d8ce)
  • Update format of discord message (eb79a2f07)
  • Try bolding entire line (c66124d7b)
  • Oops (38644b933)
  • Add delay after adding each reaction (ecb49019f)
  • Use last lts node version for testing (e06e37d02)
  • Try npm trusted publisher (85f1e05eb)
  • Use npm trusted publisher for main releases (abf5d9e9f)
  • Change wording (#​32979)
  • Add github ai moderator (#​33077)
❤️ Contributors

v4.0.3

Compare Source

4.0.3 is a regularly scheduled patch release.

👉 Changelog

compare changes

🔥 Performance
  • kit: Get absolute path from tinyglobby in resolveFiles (#​32846)
🩹 Fixes
  • nuxt: Do not throw undefined error variable (#​32807)
  • vite: Include tsconfig references during typeCheck (#​32835)
  • nuxt: Add sourcemap path transformation for client builds (#​32313)
  • nuxt: Add warning for lazy-hydration missing prefix (#​32832)
  • nuxt: Trigger call once navigation even when no suspense (#​32827)
  • webpack: Handle null result from webpack call (84816d8a1)
  • kit,nuxt: Use reverseResolveAlias for better errors (#​32853)
📖 Documentation
  • Fix publicDir alias (#​32841)
  • Mention bun.lock for lockfile (#​32820)
  • Add a section about augmenting types with TS project references (#​32843)
  • Improve explanation of global middleware (#​32855)
🏡 Chore
Tests
  • Move tests for defineNuxtComponent out of e2e test (#​32848)
🤖 CI
  • Move nightly releases into different concurrency group (664041be7)
❤️ Contributors

v4.0.2

Compare Source

4.0.2 is the next patch release.

Timetable: 28 July.

👉 Changelog

compare changes

🩹 Fixes
  • nuxt: Provide typed slots for <ClientOnly> and <DevOnly> (#​32707)
  • kit,nuxt,schema: Add trailing slash to some dir aliases (#​32755)
  • nuxt: Constrain global defineAppConfig type (#​32760)
  • kit: Include module types in app context (#​32758)
  • nuxt: Include source base url for remote islands (#​32772)
  • vite: Use vite node server to transform requests (#​32791)
  • kit: Use mlly to parse module paths (#​32386)
  • nuxt: Execute all plugins after error rendering error.vue (#​32744)
📖 Documentation
  • Update Nuxt installation command to use npm create nuxt@latest (#​32726)
  • Add AI-assisted contribution guidelines (#​32725)
  • Hydration best practice (#​32746)
  • Add example for module .with() (#​32757)
  • Replace dead Vue Router docs links (#​32779)
  • Update nightly version references (#​32776)
🏡 Chore
  • Update reproduction links for bug-report template (#​32722)
  • Update unbuild and use absolute path in dev stubs (#​32759)
Tests
  • Ignore vue module.exports export (c4317e057)
🤖 CI
  • Release pkg.pr.new for main/3.x branches as well (b0f289550)
  • Apply 3x tag to latest v3 release (5f6c27509)
❤️ Contributors

v4.0.1

Compare Source

v4.0.1 is the first regularly scheduled patch release of v4

It will be followed up later this week with v3.18, which will backport a number of the features/fixes from Nuxt v4 to v3.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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: Add nuxt.schema files to node tsconfig context (#​32644)
  • nuxt,vite: Unpin nitropack (ed5ad64ad)
  • nuxt: Expose shared aliases within shared/ dir (#​32676)
💅 Refactors
  • nuxt: Pass file language directly to parser options (#​32665)
📖 Documentation
📦 Build
  • vite: Specify nitropack types as external (39be1b3a9)
🏡 Chore
🤖 CI
  • Trigger website redeploy on main branch (#​32695)
❤️ Contributors

v4.0.0

Compare 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:

  • Cleaner project organization with the new app/ directory structure
  • Smarter data fetching - we've taken the opportunity to address some inconsistencies and improve performance with the data layer
  • Better TypeScript support with project-based separation between the different contexts in your project - app code, server code, shared/ folder, and configuration
  • Faster CLI and development with adoption of internal sockets and a faster CLI

Why 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:

my-nuxt-app/
├─ app/
│  ├─ components/
│  ├─ pages/
│  ├─ layouts/
│  └─ app.vue
├─ public/
├─ shared/
├─ server/
└─ nuxt.config.ts

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.

[!TIP]
Don't want to migrate? That's totally fine! Nuxt will detect your existing structure and keep working exactly as before.

🎨 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 useAsyncData and useFetch work 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.

[!TIP]
With Nuxt 4, you will only need one tsconfig.json file in your project root!

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.

  • Faster cold starts - Development server startup is noticeably faster
  • Node.js compile cache - Automatic reuse of the v8 compile cache
  • Native file watching - Uses fs.watch APIs for fewer system resources
  • Socket-based communication - The CLI and Vite dev server now communicate via internal sockets instead of network ports, reducing overhead — particularly on Windows

These 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 2 compatibility has been removed from @nuxt/kit. (This will particularly affect module authors.)
  • Some legacy utilities and deprecated features have been cleaned up.
  • The new TypeScript setup might surface some type issues that were hidden before.
  • A few modules might need further updates for full Nuxt 4 compatibility.

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:

npx nuxt upgrade --dedupe

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:

npx codemod@latest nuxt/4/migration-recipe
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
  • ui-templates: Update template branding for v4 (#​27843)
  • deps: Upgrade to latest versions of c12, jiti and unbuild (#​27995)
  • kit: Reimplement cjs utils using mlly (#​28012)
  • nuxt: Generate basic jsdoc for module config entry (#​27689)
  • schema: Split dev/prod build directories (#​28594)
  • nuxt: Cache vue app build outputs (#​28726)
  • deps: Update dependency vite to v6 (main) (#​30042)
  • nuxt: Add integration with chrome devtools workspaces (#​32084)
  • kit: Support single import in addServerImports (#​32289)
  • nuxt: Add onWatcherCleanup to imports presets (#​32396)
  • kit,nuxt,schema: Separate ts projects for node/app/nitro (#​30665)
  • nuxt: Support lazy hydration macros (#​31192)
  • nuxt: Export <NuxtTime> prop types (#​32547)
  • nuxt: Add route announcer to default app.vue (#​32621)
  • nuxt: Expose page routes to nitro for o11y (#​32617)
🔥 Performance
  • nuxt: ⚠️ Don't call render:html for server islands (#​27889)
  • vite: Don't write stub manifest for legacy bundler (#​27957)
  • kit: Update env expansion regex to match nitro (#​30766)
  • vite: Communicate with vite-node via internal socket (#​32417)
🩹 Fixes
  • schema,vite: ⚠️ Do not allow configuring vite dev bundler (#​27707)
  • schema: ⚠️ Default to compatibilityVersion: 4 (#​27710)
  • nuxt: ⚠️ Emit absolute paths in builder:watch hook (#​27709)
  • nuxt: ⚠️ Improve default asyncData value behaviour (#​27718)
  • nuxt: ⚠️ Remove old experimental options (#​27749)
  • kit: ⚠️ Support loading nuxt 4 and drop support for <=2 (#​27837)
  • nuxt: ⚠️ Remove __NUXT__ after hydration (#​27745)
  • ui-templates: Add default title back (3415241a6)
  • kit: ⚠️ Drop support for building nuxt 2 projects (1beddba6a)
  • nuxt: ⚠️ Bump internal majorVersion to 4 (7aae4033b)
  • kit: Mark resolvePath utils as sync (655e1473d)
  • kit: Revert change to tryResolveModule (2d136e04c)
  • kit: Add back requireModule and tryRequireModule (#​28013)
  • nuxt: Hide unhandled error messages in prod (#​28156)
  • nuxt: Add useScriptCrisp scripts stub (0c3cc4cf3)
  • nuxt: ⚠️ Remove unused globalName property (#​28391)
  • nuxt: Use static import for updateAppConfig in HMR (#​28349)
  • vite: Write dev manifest when ssr: false (#​28488)
  • kit,nuxt,schema: ⚠️ Remove other support for nuxt2/bridge (#​28936)
  • webpack: Only insert dynamic require plugin when building (b619b35e9)
  • nuxt: Guard window access (d874726ff)
  • nuxt: Remove unneeded subpath import (18a6ef1ca)
  • webpack: Handle new webpack chunk format (d293c06d2)
  • kit: ⚠️ Do not check compatibility for nuxt version < 2.13 (f94cda4c8)
  • ui-templates: Fix examples link and add bluesky (#​30866)
  • vite: Use resolveId from vite-node to resolve deps (#​30922)
  • nuxt: Import isEqual from main ohash export (3ec1a1e5e)
  • vite: Don't set output.preserveModules (ce49734aa)
  • nuxt: Ignore #app-manifest import in dev mode (#​31539)
  • nuxt: Ensure layer array-type config is merged in order (#​31507)
  • schema: Turn off purgeCachedData until v4 (7aa3a01ae)
  • schema: Re-enable purgeCachedData by default (06745604c)
  • webpack: Expand dynamic require regexp to match new pattern (62e700daa)
  • nuxt: Add back missing reset of .execute (d79e14612)
  • nuxt,schema: ⚠️ Remove support for compatibilityVersion: 3 (#​32255)
  • kit,nuxt,schema,vite: ⚠️ Remove support for some deprecated options (#​32257)
  • nuxt: ⚠️ Don't rerun asyncdata w/ existing data in useAsyncData (#​32170)
  • nuxt: Scan nitro handlers before writing types (a3698c08b)
  • nuxt: Force asyncData errorValue/value to be undefined (7e4eac655)
  • nuxt: ⚠️ Remove public and assets aliases (#​32119)
  • webpack: Update dynamic require pattern (#​32278)
  • schema: ⚠️ Remove top level generate option (#​32355)
  • ui-templates: Add aria tag on Nuxt logo (#​32429)
  • nuxt: Augment runtime config in server context (#​32482)
  • kit: Do not skip layer with defined srcDir (#​32487)
  • deps: Upgrade to rc version of @nuxt/cli (#​32488)
  • kit: Ensure legacy tsConfig doesn't exclude too many types (#​32528)
  • kit: Ensure types of module entrypoints are in node project (#​32551)
  • kit: Add layer app/ and server/ folders into tsconfigs (#​32592)
  • schema: Disable changing compat version (#​32600)
  • nuxt: Allow modules to add to typescript.hoist (#​32601)
  • nuxt: Include shared declarations in tsconfig.server.json (#​32594)
  • nuxt: Retain old data when computed key changes (#​32616)
  • nuxt: ⚠️ Bump compatibilityDate to 2025-07-15 (e35e1ccb9)
  • nuxt: Only use scrollBehaviorType for hash scrolling (#​32622)
💅 Refactors
  • kit,nuxt: ⚠️ Drop nuxt 2 + ejs template compile support (#​27706)
  • nuxt: ⚠️ Move #app/components/layout -> #app/components/nuxt-layout (209e81b60)
  • kit,nuxt,vite,webpack: ⚠️ Remove legacy require utils (#​28008)
  • nuxt: Simplify check of dedupe option (#​28151)
  • nuxt: Use direct import of installNuxtModule (501ccc375)
  • kit: Remove internal function (#​32189)
  • schema: ⚠️ Remove config.schema.json export + defaults (#​32254)
  • nuxt: Migrate to oxc-walker (#​32250)
  • nuxt,schema: Use oxc for onPrehydrate transform (#​32045)
📖 Documentation
  • Indicate what useAsyncData must return (#​28259)
  • Update deep default for useAsyncData & useFetch (#​28564)
  • Fix link to issue (4d13f1027)
  • Improve wording for deep option (bec85dfcd)
  • Update v4 docs with new folder structure (#​32348)
  • Update .nuxtignore examples for v4 structure (#​32489)
  • Add reference to useNuxtData in data fetching composable pages (#​32589)
  • Temporarily use v4 template for v4 docs (850a879d3)
  • Document the --modules flag in the init command (#​32599)
📦 Build
  • deps: Bump esbuild from 0.23.1 to 0.25.0 (#​31247)
🏡 Chore
Tests
  • Remove unused experimental options (6d971ddc9)
  • Add additional attw test for built packages (#​30206)
  • Add minimal pages fixture (#​30457)
  • Update bundle size assertion (f458153d9)
  • Update bundle size assertion (4cce6bf8d)
  • Benchmark minimal fixture instead (#​31174)
  • Normalise scoped css + pass logger to configResolved (8d3bd4f9f)
  • More precise asyncData tests (023fb13eb)
  • Extend timeout when waiting for hydration (f34c6c240)
  • Also assert status (4f6bdf755)
🤖 CI
⚠️ Breaking Changes
  • nuxt: ⚠️ Don't call render:html for server islands (#​27889)
  • schema,vite: ⚠️ Do not allow configuring vite dev bundler (#​27707)
  • schema: ⚠️ Default to compatibilityVersion: 4 (#​27710)
  • nuxt: ⚠️ Emit absolute paths in builder:watch hook (#​27709)
  • nuxt: ⚠️ Improve default asyncData value behaviour (#​27718)
  • nuxt: ⚠️ Remove old experimental options (#​27749)
  • kit: ⚠️ Support loading nuxt 4 and drop support for <=2 (#​27837)
  • nuxt: ⚠️ Remove __NUXT__ after hydration (#​27745)
  • kit: ⚠️ Drop support for building nuxt 2 projects (1beddba6a)
  • nuxt: ⚠️ Bump internal majorVersion to 4 (7aae4033b)
  • nuxt: ⚠️ Remove unused globalName property (#​28391)
  • kit,nuxt,schema: ⚠️ Remove other support for nuxt2/bridge (#​28936)
  • kit: ⚠️ Do not check compatibility for nuxt version < 2.13 (f94cda4c8)
  • nuxt,schema: ⚠️ Remove support for compatibilityVersion: 3 (#​32255)
  • kit,nuxt,schema,vite: ⚠️ Remove support for some deprecated options (#​32257)
  • nuxt: ⚠️ Don't rerun asyncdata w/ existing data in useAsyncData (#​32170)
  • nuxt: ⚠️ Remove public and assets aliases (#​32119)
  • schema: ⚠️ Remove top level generate option (#​32355)
  • nuxt: ⚠️ Bump compatibilityDate to 2025-07-15 (e35e1ccb9)
  • kit,nuxt: ⚠️ Drop nuxt 2 + ejs template compile support (#​27706)
  • nuxt: ⚠️ Move #app/components/layout -> #app/components/nuxt-layout (209e81b60)
  • kit,nuxt,vite,webpack: ⚠️ Remove legacy require utils (#​28008)
  • schema: ⚠️ Remove config.schema.json export + defaults (#​32254)
❤️ Contributors

v3.20.2

Compare Source

3.20.2 is the next patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe --channel=v3

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.

[!NOTE]
This will only work if you already have a version of @nuxt/cli which has the --channel flag. If this does not work, you can instead run npx nuxi@latest for the initial upgrade.

👉 Changelog

compare changes

🩹 Fixes
  • nitro: Do not show pretty error handler when testing (cc75ce409)
  • nuxt: Generate valid references for component declaration items (#​33388)
  • nuxt: Sync internal route before calling page:finish hook (#​33707)
  • nitro: Ensure html is a string before injecting error handler (6f51a25e9)
  • nitro: Include layer server directories in tsconfig.server.json (#​33510)
  • nuxt: Ensure deduped async data executions return latest promise (#​33740)
  • kit,nuxt: Type + respect moduleDependencies by meta name (#​33774)
  • nuxt,schema: Ignore .d.vue.ts declarations (9a6a770ab)
  • kit,nuxt: Protect against resolved nuxt module subpath (#​33767)
  • nuxt: Re-execute callOnce during HMR (#​33810)
  • nuxt: Resolve watch callback after reactive key change in useAsyncData (#​33802)
  • nuxt: Escape HTML in development error page stack trace (#​33820)
  • kit: Do not add resolved rootDir to cached layer config (#​33779)
  • kit,schema: Add moduleDependencies -> installModule (#​33689)
💅 Refactors
  • nuxt: Improve type safety within callOnce function (#​33825)
📖 Documentation
🏡 Chore
  • Update pnpm to 10.21 and enable trust policy (1cb55efc0)
  • Revert pnpm trust policy and restore provenance action (103ae1351)
  • Update markdownlint config to ignore mdc issues (d4933e26e)
  • Pin to single version of unstorage (619956e7f)
Tests
  • Add patchProp and nodeOps to excluded Vue helpers (#​33754)
  • Use fake timers for watch params test (58607fbea)
  • Update test for v3 defaults (daa002638)
🤖 CI
  • Add --pnpm flag to correctly publish prerelease (#​33688)
  • Update action lint config (#​33710)
❤️ Contributors

v3.20.1

Compare Source

3.20.1 is the next patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe --channel=v3

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
  • vite: Unset optimizeDeps.include for server environment (#​33550)
  • kit,nuxt,schema: Deprecate ImportPresetWithDeprecation (#​33596)
  • nuxt: Correct warning message for prefetch/noPrefetch conflict (#​33617)
  • nitro: Remove <nuxt-error-overlay> iframe border (#​33625)
  • vite: Use rolldown replace only in build (#​33615)
  • nitro: Use directory paths in moduleEntryPaths (#​33628)
  • nitro: Start error overlay minimized based on status code (#​33658)
  • vite: Ensure optimizeDeps config is applied before other plugins (#​33586)
  • nuxt: Respect layer priority order for scanned components (#​33654)
  • nuxt: Process prerender routes on pages:resolved (#​33662)
  • nuxt: Remove abort signal event listeners after render (#​33665)
  • nuxt: Cleanup event listener with cleanup signal (#​33667)
  • vite: Respect vite proxy in dev middleware (#​33670)
💅 Refactors
  • kit,nitro,nuxt,schema,vite: Explicitly import process/performance (#​33650)
📖 Documentation
  • Fix typo in eslint flat config description (#​33569)
  • Add signal support to useAsyncData examples (#​33601)
  • Note that cookieStore is true by default (#​33572)
  • Document pending as alias of status === 'pending' (#​33221)
  • Clarify route middleware doesn't affect API routes (#​33643)
  • Improve docs for useHead/useHydration/useLazy* (#​33626)
  • Typo (#​33655)
🏡 Chore
🤖 CI
  • Disable cache in release action (885df65f4)
❤️ Contributors

v3.20.0

Compare Source

3.20.0 is the next minor release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe --channel=v3

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
  • nuxt: Allow specifying component declarationPath (#​33419)
  • kit: Add extensions option for resolveModule (#​33328)
  • nuxt: Add abortController option to useAsyncData (#​32531)
  • nuxt: Display youch error page w/ user error page in dev (#​33359)
  • nuxt: Experimental typescript plugin support (#​33314)
  • nuxt,schema: Extract asyncData handlers to chunks (#​33131)
  • kit: Add setGlobalHead utility (#​33512)
  • kit,vite: Allow enabling vite environment api (#​33492)
🔥 Performance
  • nuxt: Precompute renderer dependencies at build time (#​33361)
  • kit,schema: Remove some unnecessary dependencies (bdf34c263)
🩹 Fixes
  • nuxt: Preserve hash with redirecting based on routeRules (#​33222)
  • kit: Safely cleanup loadNuxtConfig in concurrent calls (#​33420)
  • nuxt: Allow object-format href in <NuxtLink> (b97ae2f70)
  • nuxt: Remove mergeModels from auto imports (#​33344)
  • nuxt: Add back shortPath property (#​33384)
  • nuxt: Do not allow native attrs to shadow nuxt link props (0981990a7)
  • nuxt: Remove declarationPath from component dirs (e384ba3cb)
  • nuxt: Preserve root route in isPrerendered check (#​33476)
  • nuxt: Exempt webpack vfs from pkg lookup (4df1e8275)
  • nitro: Exempt nightly release from import protections (272d9abbe)
  • webpack,rspack: Preserve prerender + nitro flags in server builds (#​33503)
  • nuxt: Support component auto-imports as arguments of h() (#​33509)
  • vite: Prevent assignment for rolldown's replacement plugin (#​33526)
  • nuxt: Use sha256 hash for prerender cache keys (#​33505)
  • nuxt: Add NuxtTime relative time numeric prop (#​33552)
  • nuxt: Add NuxtTime relative time relativeStyle prop (#​33557)
  • nuxt: Handle arrays in app config correctly during HMR (#​33555)
💅 Refactors
  • Remove obsolete shortPath property (#​33384)
  • kit: Extract trace utilities (ddaedfa51)
  • nuxt,vite,webpack: Allow builders to augment types (#​33427)
  • schema: Deprecate extend, extendConfig, and configResolved hooks (932a80dc6)
  • nitro,nuxt: Extract @nuxt/nitro-server package (#​33462)
  • nuxt: Use RouteLocationNormalizedLoadedGeneric internally (aa211fb4f)
  • vite: Make vite plugins environment-compatible (#​33445)
📖 Documentation
  • Add nuxt module addServerPlugin note (#​33409)
  • Remove deprecated node version (#​33411)
  • Update declarationPath in addComponent (#​33380)
  • Add some notes/deprecations for vite hooks (2c6912d2f)
  • Fix incorrect ESM module field info (#​33451)
  • Recommend getLayerDirectories() instead of nuxt.options._layers (#​33484)
  • Add docs for moduleDependencies (#​33499)
  • Pin codemod to v0.18.7 for migration recipe (#​33522)
🏡 Chore
  • Migrate gitpod to ona (#​33159)
  • Use native node to run test:prepare (cbad63c02)
  • Do not use native node to run test:prepare (672c09423)
  • Update valid semantic scopes (4ca29168b)
  • Ignore nitro templates (ec59aceeb)
  • Remove vue-demi from ignoredBuiltDependencies (#​33494)
  • Update vscode url (#​33360)
  • Correct jsdoc location for function used as parameters (#​33507)
  • Remove code comment (#​33515)
  • Patch changelogen for large numbers of commits (b6530b5b6)
  • Filter out commits before last tag when constructing changelog (257049712)
  • Ignore @rollup/plugin-commonjs (c2bd323b8)
  • Pin @rollup/plugin-commonjs (a524522ea)
Tests
  • Update runtime test to use asyncDataDefaults.errorValue (b6f1c9b0d)
  • Refactor suite to use common matrix utils (#​33483)
  • Update typed router test (c55db2854)
🤖 CI
  • Publish @nuxt/nitro-server on pkg-pr-new (d37ef17b0)
  • Remove nitro-server publish until v4.2 is released (e34c2f52f)
  • For now, use tag push to trigger release (0705b835f)
❤️ Contributors

v3.19.3

Compare Source

3.19.3 is a regularly scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • vite: Use rolldown's replace plugin when applicable (#​33258)
🩹 Fixes
  • nuxt: Make lazy component types compatible with h (#​33046)
  • vite: Deduplicate inlined server style chunks (#​33308)
  • nuxt: Support head option on useHead (#​33318)
  • nuxt: Do not relativise importmap if cdnURL is set (#​33333)
  • nuxt: Resolve aliases in imports.dirs (#​33334)
  • nuxt: Add missing element/vnode props for <NuxtLink> (#​33335)
  • nuxt: Do not generate server placeholder components (#​33345)
  • nuxt: Dedupe generated component names (#​33346)
  • webpack: Test watch instance before closing it (3314bc9a1)
  • nuxt: Correctly handle island rendering error (#​33302)
  • nuxt: Support v-slot:fallback longform syntax in <DevOnly> (#​33368)
  • nuxt: Support typeFrom when generating auto-import type templates (#​33373)
  • nuxt: Don't trigger scroll when changing trailing slash (#​33358)
  • nuxt: Add stubs for new scripts from @nuxt/scripts (057ade490)
  • nuxt: Prevent duplicate execution on key change in useAsyncData (#​33325)
  • nuxt: Make middleware _path property configurable for HMR (#​33379)
  • nuxt: Handle non-immediate useAsyncData with different key on ssr (#​33341)
💅 Refactors
  • nuxt: Improve implementation of error composables (#​33234)
  • nuxt: Resolve path of typed-router.d.ts early for consistency (#​33285)
  • nuxt: Place filename into componentsIslandsTemplate definition (#​33394)
  • nuxt,vite: Use environment-api compatible plugins (#​33403)
📖 Documentation
  • Update usage instructions for Windows users (#​33284)
  • Remove d suffix in example (#​33298)
  • Move directory structure to top-level (#​33299)
  • Add 3.x prefix to all internal links (0fef864d6)
  • Add information about useFetch reactivity (#​33317)
  • Lint code samples within docs (#​33271)
  • Note prepare command NODE_ENV behavior (#​33330)
  • Update nuxt command pages (#​33336)
🏡 Chore
Tests
  • nuxt: Set locale to en for nuxt-time tests (#​33343)
  • Double gotoPath timeout in CI (9d336cc76)
🤖 CI
  • Add provenance action to check for downgrades in provenance (18ab6e5fa)
  • Pass commit sha when triggering ecosystem ci (7b2949a3c)
❤️ Contributors

v3.19.2

Compare Source

3.19.2 is a regularly scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • kit: Do not normalise templates in loop if dst is present (#​33200)
  • nuxt: Remove watcher from hydrate-when lazy hydration strategy (#​33199)
  • nuxt,schema: Normalise components + directories more efficiently (#​33207)
  • kit,nuxt: Reduce unnecessary iteration in nuxt code (#​33212)
  • nuxt: Skip running lazy hydration transform with filter (#​33213)
🩹 Fixes
  • schema: Add pkg-types to dependencies (a6e5dd756)
  • nuxt: Ignore errors when treeshaking composables within other composables (e3e42ac77)
  • nuxt: Do not tree-shake composables within other composables (#​33153)
  • kit: Ensure module dependencies are typed correctly (ea16d182a)
  • nuxt: Prevent Infinity backgroundSize in loading indicator (#​33211)
  • nuxt: Remove unused enabled from components dir options (#​32844)
  • nuxt: Sync watch request in useAsyncData (#​33192)
  • nuxt: Move key imports logic after all modules run (#​33214)
📖 Documentation
  • Update language on bridge head migration (32e76f609)
🏡 Chore
❤️ Contributors

v3.19.1

Compare Source

v3.19.1 is a regularly scheduled patch release

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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: Correct relative path of auto imported components (#​33122)
  • nuxt: Prefer accessing globalThis over window (#​33125)
  • nuxt: Migrate to AST-aware tree-shaking + route injection (#​33128)
  • nuxt: Ignore #components import mapping inside packages that use it internally (#​33049)
  • vite: Remove explicit vite-node configuration of deps.inline (#​33133)
  • nuxt: Include trace in dev-time useRoute usage warning (#​33039)
  • nuxt: Print route middleware path in warning (#​33136)
  • nuxt: Include core auto-imports from imports:sources in override warning (#​33050)
  • nuxt: Render relative importmap entry path if required (#​33146)
📖 Documentation
  • Add documentation for module lifecycle hooks (#​33115)
  • Add -- to bun create command (ab6aa8ee5)
  • Add JSDoc for navigateTo (#​21442)
🏡 Chore
Tests
🤖 CI
  • Remove default discord reactions from thread (more noise than it's worth) (2e3c91e0c)
  • Rewrite release workflow in ts + support multiple tags (478c64342)
  • Pass correct flag (a954f383f)
  • Pass tag via env variable (dcfc82688)
  • Drop 4x tags from releases (e3aa50d11)
❤️ Contributors

v3.19.0

Compare 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:

npx nuxt upgrade --dedupe

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
  • kit: Add ignore option to resolveFiles (#​32858)
  • kit: Add onInstall and onUpgrade module hooks (#​32397)
  • nuxt,vite: Add experimental support for rolldown-vite (#​31812)
  • nuxt: Extract defineRouteRules to page rules property (#​32897)
  • nuxt,vite: Use importmap to increase chunk stability (#​33075)
  • nuxt: Lazy hydration macros without auto-imports (#​33037)
  • kit,nuxt,schema: Allow modules to specify dependencies (#​33063)
  • kit,nuxt: Add getLayerDirectories util and refactor to use it (#​33098)
🔥 Performance
  • nuxt: Clear inline route rules cache when pages change (#​32877)
  • nuxt: Stop watching app manifest once a change has been detected (#​32880)
🩹 Fixes
  • nuxt: Handle satisfies in page augmentation (#​32902)
  • nuxt: Type response in useFetch hooks (#​32891)
  • nuxt: Add TS parenthesis and as expression for page meta extraction (#​32914)
  • nuxt: Use correct unit thresholds for relative time (#​32893)
  • nuxt: Handle uncached current build manifests (#​32913)
  • kit: Resolve directories in resolvePath and normalize file extensions (#​32857)
  • schema,vite: Bump requestTimeout + allow configuration (#​32874)
  • nuxt: Deep merge extracted route meta (#​32887)
  • nuxt: Do not expose app components until fully resolved (#​32993)
  • kit: Only exclude node_modules/ if no custom srcDir (#​32987)
  • nuxt: Compare final matched routes when syncing route object (#​32899)
  • nuxt: Make vue server warnings much less verbose in dev mode (#​33018)
  • schema: Allow disabling cssnano/autoprefixer postcss plugins (#​33016)
  • kit: Ensure local layers are prioritised alphabetically (#​33030)
  • kit,nuxt: Expose global types to vue compiler (#​33026)
  • nuxt: Support config type inference for defineNuxtModule().with() (#​33081)
  • nuxt: Search for colliding names in route children (31a9282c2)
  • nuxt: Delete nuxtApp._runningTransition on resolve (#​33025)
  • nuxt: Add validation for nuxt island reviver key (#​33069)
  • kit: Prioritise local layers over extended layers (ae8b0d2b8)
  • kit: Address merge conflict (89ccbbebb)
  • kit: Do not resolve public dir aliases (5d87d3a80)
💅 Refactors
  • nuxt: Simplify page segment parsing (#​32901)
  • nuxt: Remove unnecessary async/await in afterEach (#​32999)
  • vite: Simplify inline chunk iteration (9ea90fc33)
  • kit,nuxt,ui-templates,vite: Address deprecations + improve regexp perf (#​33093)
📖 Documentation
  • Add a section about augmenting types with TS project references (#​32843)
  • Switch example to use vitest projects (#​32863)
  • Update testing setupTimeout and add teardownTimeout (#​32868)
  • Add middleware to layers guide (fa516d440)
  • Add documentation for --nightly command (#​32907)
  • Update package information in roadmap section (#​32881)
  • Add more info about nuxt spa loader element attributes (#​32871)
  • Correct filename in example (#​33000)
  • Add more information about using useRoute and accessing route in middleware (#​33004)
  • Avoid variable shadowing in locale example (#​33031)
🏡 Chore
  • Remove stray test file (42fd247a4)
  • Ignore webpagetest.org when scanning links (cb18f4960)
  • Add type: 'module' in playground (#​33099)
Tests
  • Add failing test for link component duplication (#​32792)
  • Simplify module hook tests (#​32950)
  • Refactor stubbing of import.meta.dev (#​33023)
  • Use findWorkspaceDir rather than relative paths to repo root (c4c3ada96)
  • Improve router test for global transitions (7e6a6fc35)
  • Use expect.poll (f4354203a)
  • Use expect.poll instead of expectWithPolling (15ca5be95)
  • Use vi.waitUntil instead of custom retry logic (4c8c13090)
  • Update test for app creation (9a3b44515)
  • Update bundle size snapshot (76988ce97)
🤖 CI
  • Remove double set of tests for docs prs (14c006ac4)
  • Add workflow for discord team discussion threads (f14854fc3)
  • Fix some syntax issues with discord + github integrations (c059f7cd1)
  • Use token for adding issue to project (51661bac3)
  • Use discord bot to create thread automatically (37f9eb27b)
  • Only use discord bot (38ce2dcbb)
  • Update format of discord message (0047b3059)
  • Try bolding entire line (6e9f40eb9)
  • Oops (8b044cad2)
  • Add delay after adding each reaction (37b7e2108)
  • Use last lts node version for testing (98719c065)
  • Try npm trusted publisher (ea33502c3)
  • Use npm trusted publisher for main releases (31a55437f)
  • Change wording (#​32979)
  • Add github ai moderator (#​33077)
❤️ Contributors

v3.18.1

Compare Source

3.18.1 is a regularly scheduled patch release.

👉 Changelog

compare changes

🔥 Performance
  • kit: Get absolute path from tinyglobby in resolveFiles (#​32846)
🩹 Fixes
  • nuxt: Do not throw undefined error variable (#​32807)
  • vite: Include tsconfig references during typeCheck (#​32835)
  • nuxt: Add sourcemap path transformation for client builds (#​32313)
  • nuxt: Add warning for lazy-hydration missing prefix (#​32832)
  • nuxt: Trigger call once navigation even when no suspense (#​32827)
  • webpack: Handle null result from webpack call (65aa17158)
  • kit,nuxt: Use reverseResolveAlias for better errors (#​32853)
📖 Documentation
  • Update nightly version references (#​32776)
  • Improve explanation of global middleware (#​32855)
🏡 Chore
Tests
  • Move tests for defineNuxtComponent out of e2e test (#​32848)
🤖 CI
  • Move nightly releases into different concurrency group (26f9baa6a)
❤️ Contributors

v3.18.0

Compare Source

3.18.0 is the next minor release.

👀 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:

<script setup lang="ts">
const LazyHydrationMyComponent = defineLazyHydrationComponent(
  'visible',
  () => import('./components/MyComponent.vue')
)
</script>
<template>
  <div>
    <!-- 
      Hydration will be triggered when
      the element(s) is 100px away from entering the viewport.
    -->
    <LazyHydrationMyComponent :hydrate-on-visible="{ rootMargin: '100px' }" />
  </div>
</template>

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-in app.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 an app.vue in your project. If you do, please keep <NuxtRouteAnnouncer> in your app.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:

  • Typed slots for <ClientOnly> and <DevOnly> (#​32707) - better IntelliSense and error checking
  • Exported <NuxtTime> prop types (#​32547) - easier to extend and customize
New Auto-Import: onWatcherCleanup

The onWatcherCleanup function from vue is now available as an auto-import (#​32396), making it easier to clean up watchers and prevent memory leaks:

const { data } = useAsyncData('users', fetchUsers)

watch(data, (newData) => {
  const interval = setInterval(() => {
    // Some periodic task
  }, 1000)
  
  // Clean up when the watcher is stopped
  onWatcherCleanup(() => {
    clearInterval(interval)
  })
})
📊 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 addServerImports kit utility now supports single imports (#​32289), making it easier to add individual server utilities:

// Before: had to wrap in array
addServerImports([{ from: 'my-package', name: 'myUtility' }])

// Now: can pass directly
addServerImports({ from: 'my-package', name: 'myUtility' })
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:

  • Improved Vite-node communication via internal socket (#​32417) for faster development builds
  • Migration to oxc-walker (#​32250) and oxc for onPrehydrate transforms (#​32045) for faster code transformations
🐛 Bug Fixes

This release also includes several important fixes:

  • Improved data fetching: When computed keys change, old data is now properly retained (#​32616)
  • Better scroll behavior: scrollBehaviorType is now only used for hash scrolling (#​32622)
  • Fixed directory aliases: Added trailing slashes to some directory aliases for better consistency (#​32755)
Upgrading

As usual, our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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: Expose page routes to nitro for o11y (#​32617)
  • nuxt: Export <NuxtTime> prop types (#​32547)
  • nuxt: Add integration with chrome devtools workspaces (#​32084)
  • kit: Support single import in addServerImports (#​32289)
  • nuxt: Add onWatcherCleanup to imports presets (#​32396)
  • nuxt: Add route announcer to default app.vue (#​32621)
  • nuxt: Support lazy hydration macros (#​31192)
🔥 Performance
  • vite: Communicate with vite-node via internal socket (#​32417)
  • kit: Update env expansion regex to match nitro (#​30766)
🩹 Fixes
  • nuxt: Allow modules to add to typescript.hoist (#​32601)
  • nuxt: Retain old data when computed key changes (#​32616)
  • nuxt: Only use scrollBehaviorType for hash scrolling (#​32622)
  • nuxt: Add missing async (fd312af03)
  • nuxt: Fix transform/minify types + bump oxc-transform (d2ba19963)
  • nuxt: Provide typed slots for <ClientOnly> and <DevOnly> (#​32707)
  • kit,nuxt,schema: Add trailing slash to some dir aliases (#​32755)
  • nuxt: Include source base url for remote islands (#​32772)
  • vite: Use vite node server to transform requests (#​32791)
  • kit: Use mlly to parse module paths (#​32386)
  • nuxt: Execute all plugins after error rendering error.vue (#​32744)
💅 Refactors
  • nuxt: Migrate to oxc-walker (#​32250)
  • nuxt,schema: Use oxc for onPrehydrate transform (#​32045)
  • nuxt: Pass file language directly to parser options (#​32665)
  • nuxt: Use direct import of installNuxtModule (228e3585e)
📖 Documentation
  • Pass v3 template to create nuxt examples (03182202f)
  • Add reference to useNuxtData in data fetching composable pages (#​32589)
  • Document the --modules flag in the init command (#​32599)
  • Added new Shared folder to the example of v4 folder structure (#​32630)
  • Improve grammar (#​32640)
  • Typos (#​32567)
  • Fix abbreviation (#​32613)
  • Reference noUncheckedIndexedAccess rule change in v4 guide (#​32643)
  • Fix links to Nitro docs (#​32691)
  • Add best practices section (#​31609)
  • Correct alias for local fonts in styling guide (#​32680)
  • Update nuxt.new links to v4 (#​32639)
  • Set correct default value for deep option in usefetch (#​32724)
  • Fix link to issue (ca03f533f)
  • Add AI-assisted contribution guidelines (#​32725)
  • Update Nuxt installation command to use npm create nuxt@latest (#​32726)
  • Hydration best practice (#​32746)
  • Add example for module .with() (#​32757)
  • Replace dead Vue Router docs links (#​32779)
🏡 Chore
  • Handle missing commit details (0af98763d)
  • Update reproduction links for bug-report template (#​32722)
  • Update unbuild and use absolute path in dev stubs (#​32759)
Tests
🤖 CI
  • Trigger website redeploy on main branch (#​32695)
  • Release pkg.pr.new for main/3.x branches as well (ca4f0b1da)
  • Apply 3x tag to latest v3 release (5e8dfc150)
❤️ Contributors

v3.17.7

Compare Source

3.17.7 is the last patch release before v3.18.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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: Safe-guard extraPageMetaExtractionKeys (#​32510)
  • nuxt: Expose loadBuilder error cause (8f13ce3c2)
  • vite: Handle resolving string vite input (#​32527)
  • nuxt: Wrap only server components with island generic (#​32540)
  • vite: Ignore when client entry cannot be resolved (19a292f34)
  • nuxt: Normalize segment catchall pattern before checking for parent (#​32413)
  • nuxt: Update warning message to warn against null values (c1b83eab5)
  • nuxt: Ensure semver.satisfies returns true for pre-release versions (#​32574)
  • nuxt: Scroll to anchor if present when changing page without saved position (#​32376)
  • nuxt: Handle execute being passed to watch` (#​32591)
📖 Documentation
  • Update fetch types (#​32522)
  • Clarify that runtime env variables must start with NUXT_ (#​32223)
  • Fix key change behavior in useAsyncData and useFetch migration (#​32560)
  • Change return type of async data from undefined to null in v3 docs (#​32562)
  • Add section on custom hooks for Nuxt modules (#​32586)
  • Provide async keyword (#​32587)
  • Move augmenting hook types in hooks page (#​32595)
  • Add section about module loading order (#​32597)
Tests
  • Reenable skipped unit tests (8fc9b9ee9)
  • Update test snapshot for generateTypes (c0855439d)
  • Improve page scanning test stability (84b96f3de)
  • Pass timeZone in to <NuxtTime> test (#​32558)
  • Add more useAsyncData + useFetch tests (#​32585)
  • Avoid hard-coding async-data keys (bfca95118)
❤️ Contributors

v3.17.6

Compare Source

3.17.6 is a regularly scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • nuxt: Decrease if checks when prerendering (#​32455)
🩹 Fixes
  • nuxt: Generate correct types for async data defaults based on nuxt.config (#​32324)
  • nuxt: Reload at base URL in nuxt:chunk-reload-immediate (#​32382)
  • nuxt: Use rollup to calculate island component filenames (#​32421)
  • nuxt: Append set-cookie headers in error handler (#​32483)
  • nuxt: Ensure asyncData runs if changing key while fetcher is running (#​32466)
  • nuxt: Handle pure hash link clicks with navigateTo (#​32393)
  • nuxt: Skip external <NuxtLink>'s custom on click handler (#​32499)
  • nuxt: Update component loader regexp for minified code (#​32298)
  • nuxt: Allow camelCase for lazy hydration attributes (#​32297)
  • nuxt: Respect inheritAttrs: false in createClientOnly fn (#​32323)
  • kit: Do not double-urlify file urls when resolving schema (#​32354)
  • nuxt: Align scroll behavior with page transition completion (#​32239)
  • nuxt: Set output.generatedCode.symbols for nitro build (#​32358)
  • nuxt: Lazily access runtimeConfig (#​32428)
💅 Refactors
  • vite: Migrate plugins internally to vite environments (#​32461)
📖 Documentation
  • Clarify where logging tag is displayed (#​32440)
  • Remove kit playground auto-import note (#​32415)
  • Remove webstorm warning (#​32513)
  • Migrate to h3js (#​32243)
  • Update the fetch clear function description (#​32287)
  • defineNuxtPlugin function documentation (#​32328)
  • Mention that <NuxtLink> encodes query params (#​32361)
  • Enhance documentation for Nuxt composables (#​32218)
  • Adjust wording to reduce confusion in lifecycle section (#​32503)
  • Improve useCookie example (367b85405)
  • Capitalise title (#​32426)
  • Mention bun.lock for lockfile (#​32427)
🏡 Chore
  • Update stackblitz reproduction link (6ab5bac66)
  • Update copilot instructions (220439055)
  • Rename deprecated vitest workspace to projects (#​32388)
  • Remove space in URL in comment (#​32394)
  • Allow setting TAG on commandline (d387e07a3)
Tests
  • nuxt: Add case for key only changes with immediate: false (#​32473)
  • Separate nuxt legacy runtime tests (#​32481)
🤖 CI
❤️ Contributors

v3.17.5

Compare Source

3.17.5 is a regularly scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

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
  • nuxt: Replace remaining instance of globby (#​31688)
🩹 Fixes
  • nuxt: Export useScriptRybbitAnalytics from script stubs (d275ae1a0)
  • nuxt: Remove unneeded pattern from regexp (2954c092c)
  • nuxt: Ensure appConfig sources are not duplicated (#​32216)
  • nuxt: Wrap slot with h() in ClientOnly (#​30664)
  • kit: Ensure template filename uses safe patterns (4372b24dd)
  • nuxt: Access asyncData state from nuxt app instance (#​32232)
  • nuxt: Make patterns relative to srcDir in buildCache (#​32260)
  • nuxt: Return non-existent route component in RouteProvider (#​32266)
  • nuxt: Use single asyncData watcher (#​32247)
  • vite: Use arrow functions in dynamic imports (#​32285)
  • webpack: Use plugin for rollup-compatible dynamic imports (#​32281)
📖 Documentation
  • Update addRouteMiddleware path in example (#​32171)
  • Narrow link to just middleware (#​32203)
  • Use optional chaining in error example (#​32214)
  • Give example of using --env-file (29f6392cd)
  • Recommend nuxt command consistently (#​32237)
  • Fix typos (#​30413)
  • Add props to special metadata (#​29708)
  • Fix wrong alert with warning in /guide/pages (#​32270)
  • Update upgrade guide + roadmap (0040ee5e7)
📦 Build
🏡 Chore
Tests
  • Add regression test for useAsyncData + transition (29f7c8cb4)
  • Ensure builder tests run sequentially (defa32829)
❤️ Contributors

v3.17.4

Compare Source

3.17.4 is a regularly-scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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
  • nuxt: Use Set for circular dep plugin (#​32110)
  • Refactor Array.includes checks to use Sets (#​32133)
  • nuxt: Use shallowRef for primitive values (#​32152)
  • nuxt: Skip route rules processing for empty child array (#​32166)
  • nuxt: Use Intl.Collator instead of localeCompare (#​32167)
🩹 Fixes
  • nuxt: Do not await lazy asyncData inside <ClientOnly> (#​32101)
  • nuxt: Respect cachedData with multiple asyncData calls (#​32099)
  • nuxt: Clear async data after a tick (#​32096)
  • nuxt: Support reactive keys in useLazyAsyncData (#​32092)
  • rspack: Use ts-checker-rspack-plugin (#​32115)
  • nuxt: Clear previous head in island-renderer (#​32100)
  • nuxt: Handle virtual files prefixed with / (#​32129)
  • schema: Remove nitro options from DeepPartial (#​31990)
  • nuxt: Ensure legacy async data remains reactive (#​32134)
  • nuxt: Pass attrs down to single child of <ClientOnly> (#​32131)
  • nuxt: Fix merge conflicts (7044450d4)
  • nuxt: Clone vnode when passing attrs down to client-only (b3acf0c78)
  • vite: Do not replace global with globalThis (#​32130)
  • nuxt: Suppress client-side errors by crawlers (#​32137)
  • nuxt: Use fresh route when <NuxtLayout> first renders (#​24673)
  • nuxt: Add additional logging when skipping error page for bot (68c270083)
  • nuxt: Add watch paths outside srcDir to parcel strategy (#​32139)
📖 Documentation
  • Use emphasis instead of quotes (#​32078)
  • Update useNuxtData default return to undefined (#​32054)
  • Capitalise headings (#​32095)
  • Prefix imports.dirs with alias (0dbf314d9)
  • Mention node v20 is minimum requirement for nuxt setup (#​32148)
  • Use more descriptive link text (d0b1b9d35)
🏡 Chore
Tests
  • Add universal routing tests + clean up output (64178b6f4)
  • nuxt: Add unit tests for watch strategies (#​32138)
  • Resolve watch path (8fb562c04)
  • Use fake timers instead of setTimeout mock (#​32142)
🤖 CI
❤️ Contributors

v3.17.3

Compare Source

3.17.3 is a regularly-scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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
  • nuxt: Pre-calculate extension glob before app resolution (#​32052)
  • nuxt: Improve islands client components chunks (#​32015)
🩹 Fixes
  • nuxt: Preload async layouts (#​32002)
  • nuxt: Handle File within FormData (#​32013)
  • schema: Respect user-provided ignore patterns (#​32020)
  • nuxt: Allow loading virtual files with query params (#​32022)
  • nuxt: Don't use reactive key for useFetch with watch: false (#​32019)
  • nuxt: Do not clear data if custom getCachedData is provided (#​32003)
  • nuxt: Provide nuxtApp for asyncData functions run on server (#​32038)
  • vite: Strip queries when skipping vite transform middleware (#​32041)
  • nuxt: Sort hash sources and files (#​32048)
  • nuxt: Do not suppress chunk import error (#​32064)
💅 Refactors
  • nuxt: Directly access initialised asyncData (e779d6cd5)
📖 Documentation
🤖 CI
  • Convert bug/enhancement labels to issue types (3ff743fe0)
  • Update payload for issue types (791e5f443)
❤️ Contributors

v3.17.2

Compare Source

3.17.2 is a regularly-scheduled patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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
  • nuxt: Tree-shake router's handleHotUpdate in production (#​31971)
🩹 Fixes
  • nuxt: Ensure asyncData is initialised before effects run (#​31946)
  • nuxt: Skip view transition if user agent provides one before defining transition (#​31945)
  • nuxt: Improve hashing for complex body in useFetch (#​31963)
  • nuxt: Immediately call asyncData within client-only components (#​31964)
  • nuxt: Don't render errors if event is already handled (#​31966)
  • nuxt: Track whether need to reinit asyncData separately from deps (#​31965)
  • nuxt: Preserve params/meta/matched with universal router (#​31950)
  • nuxt: Respect scroll behavior set by scrollToTop (#​31914)
  • nuxt: Load live data from vfs even if a file exists in buildDir (#​31969)
  • nuxt: Short circuit middleware when validate returns false (#​31967)
  • nuxt: Ensure useAsyncData reactive to key changes when immediate: false (#​31987)
  • nuxt: Resolve real paths imported into virtual files (0bb07f129)
  • webpack: Broaden WarningFilter type (2a79dbd68)
  • schema: Broaden warningIgnoreFilters (a62e808ac)
📖 Documentation
🏡 Chore
Tests
🤖 CI
  • Run docs workflow against pull requests (08f968903)
  • Run tests against node v20 (3c97d3493)
❤️ Contributors

v3.17.1

Compare Source

3.17.1 is the next patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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: Check if match exists with new unplugin filter (#​31929)
  • nuxt: Reinitialise stale async data (#​31940)
  • nuxt: Skip view transition if user agent is providing one (#​31938)
  • nuxt: Trigger execute when non-immediate fetch key changes (#​31941)
  • nuxt: Don't redirect when route has trailing slash (#​31902)
  • ui-templates: Use escapeHTML from vue (8e4b8d62f)
  • schema: Add @vue/shared dependency (7d445c963)
📦 Build
  • Copy README/LICENSE from repo root (8e287d556)
🏡 Chore
Tests
❤️ Contributors

v3.17.0

Compare 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 useAsyncData and useFetch.

Although we have aimed to maintain backward compatibility and put breaking changes behind the experimental.granularCachedData flag (disabled by default), we recommend testing your application thoroughly after upgrading. You can also disable experimental.purgeCachedData to revert to the previous behavior if you are relying on cached data being available indefinitely after components using useAsyncData are unmounted.

👉 Read the the original PR for full details (#​31373), but here are a few highlights.

Consistent Data Across Components

All calls to useAsyncData or useFetch with the same key now share the underlying refs, ensuring consistency across your application:

<!-- ComponentA.vue -->
<script setup>
const { data: users, pending } = useAsyncData('users', fetchUsers)
</script>

<!-- ComponentB.vue -->
<script setup>
// This will reference the same data state as ComponentA
const { data: users, status } = useAsyncData('users', fetchUsers)
// When either component refreshes the data, both will update consistently
</script>

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:

const userId = ref('123')
const { data: user } = useAsyncData(
  computed(() => `user-${userId.value}`),
  () => fetchUser(userId.value)
)

// Changing the userId will automatically trigger a new data fetch
// and clean up the old data if no other components are using it
userId.value = '456'
Optimized Data Refetching

Multiple components watching the same data source will now trigger only a single data fetch when dependencies change:

// In multiple components:
const { data } = useAsyncData(
  'users', 
  () => $fetch(`/api/users?page=${route.query.page}`),
  { watch: [() => route.query.page] }
)

// When route.query.page changes, only one fetch operation will occur
// All components using this key will update simultaneously
🎭 Built-In Nuxt Components
<NuxtTime> - A new component for safe time display

We've added a new <NuxtTime> component for SSR-safe time display, which resolves hydration mismatches when working with dates (#​31876):

<template>
  <NuxtTime :datetime="Date.now()" />
</template>

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 exposes error and clearError from the component - as well as in the error slot types, giving you greater ability to handle errors in your templates and via useTemplateRef (#​31847):

<NuxtErrorBoundary @&#8203;error="handleError">
  <template #error="{ error, clearError }">
    <div>
      <p>{{ error.message }}</p>
      <button @&#8203;click="clearError">Try again</button>
    </div>
  </template>
  
  <!-- Content that might error -->
  <MyComponent />
</NuxtErrorBoundary>
🔗 Router Improvements

<NuxtLink> now accepts a trailingSlash prop, giving you more control over URL formatting (#​31820):

<NuxtLink to="/about" trailing-slash>About</NuxtLink>
<!-- Will render <a href="/about/"> -->
🔄 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 bar
  • resetDelay: Controls how long to wait before resetting loading indicator state
<template>
  <NuxtLoadingIndicator :hide-delay="500" :reset-delay="300" />
</template>
📚 Documentation as a Package

The Nuxt documentation is now available as an npm package! You can install @nuxt/docs to 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:

  • Warning when server components don't have a root element #​31365
  • Warning when using the reserved runtimeConfig.app namespace #​31774
  • Warning when core auto-import presets are overridden #​29971
  • Error when definePageMeta is used more than once in a file #​31634
🔌 Enhanced Module Development

Module authors will be happy to know:

  • A new experimental.enforceModuleCompatibility allows 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.
  • You can now automatically register every component exported via named exports from a file with addComponentExports #​27155
🔥 Performance Improvements

Several performance improvements have been made:

  • Switched to tinyglobby for faster file globbing #​31668
  • Excluded .data directory from type-checking for faster builds #​31738
  • Improved tree-shaking by hoisting the purgeCachedData check #​31785

Upgrading

Our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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: Accept hideDelay and resetDelay props for loading indicator (#​31532)
  • nuxt: Warn server components need root element (#​31365)
  • docs: Publish raw markdown/yaml docs as @nuxt/docs (#​31353)
  • kit,nuxt: Pass dotenv values from loadNuxtConfig to nitro (#​31680)
  • nuxt,vite: Support disabling scripts in dev mode (#​31724)
  • nuxt: Warn if user uses reserved runtimeConfig.app namespace (#​31774)
  • kit,schema: Allow throwing error if modules aren't compatible (#​31657)
  • nuxt: Extract middleware when scanning page metadata (#​30708)
  • nuxt: Warn if core auto-import presets are overridden (#​29971)
  • nuxt: Scan named exports with addComponentExports (#​27155)
  • nuxt: Convert <NuxtErrorBoundary> to SFC + expose error/clearError (#​31847)
  • nuxt: Add <NuxtTime> component for ssr-safe time display (#​31876)
  • nuxt: Add trailingSlash prop to <NuxtLink> (#​31820)
🔥 Performance
  • kit,rspack,webpack: Switch to tinyglobby (#​31668)
  • kit: Exclude .data directory from type-checking (#​31738)
  • nuxt: Hoist purgeCachedData check to improve tree-shaking (#​31785)
  • nuxt: Remove oxc-parser manual wasm fallback logic (#​31484)
  • nuxt: Remove unecessary type check for useFetch (#​31910)
🩹 Fixes
  • kit,vite: Ensure all modulesDir paths are added to fs.allow (#​31540)
  • nuxt: Pass slots through to lazy hydrated components (#​31649)
  • vite: Do not return 404 for dev server handlers which shadow /_nuxt/ (#​31646)
  • nuxt: Sync error types for useLazyAsyncData (#​31676)
  • nuxt: Strip base url from error.url (#​31679)
  • nuxt: Render inline styles before app:rendered is called (#​31686)
  • nuxt: Update nitro imports (0bec0bd26)
  • nuxt: Check for fallback attribute when stripping <DevOnly> (c1d735c27)
  • vite: Invalidate files not present in module graph (ecae2cd54)
  • nuxt: Do not add manifest preload when noScripts (c9572e953)
  • nuxt: Do not prompt to update compatibilityDate (#​31725)
  • nuxt: Show brotli size by default when analyzing bundle (#​31784)
  • nuxt: Always pass statusMessage when rendering html error (#​31761)
  • nuxt: Error when definePageMeta is used more than once (#​31634)
  • nuxt: Parse error.data before rendering error.vue (#​31571)
  • nuxt: Use single synced asyncdata instance per key (#​31373)
  • nuxt: Use useAsyncData in console log (#​31801)
  • nuxt: Wait for suspense to resolve before handling NuxtErrorBoundary error (#​31791)
  • vite: Disable preserveModules (#​31839)
  • nuxt: Align pending with status value for v4 (#​25864)
  • nuxt: Consider full path when de-duplicating routes (#​31849)
  • nuxt: Augment nuxt/app in generated middleware and layouts declarations (#​31808)
  • nuxt: Correct order of args passed to withoutBase (f956407bb)
  • vite: Dedupe vue in vite-node dev server (f3882e004)
  • ui-templates: Pass pointer events through spotlight div in error dev template (#​31887)
  • kit: Include user-defined types before internal ones in tsconfig.json (#​31882)
  • nuxt: Do not purge nuxt data if active useNuxtData (#​31893)
  • nuxt: Do not include components of key in useFetch watch sources (#​31903)
  • nuxt: Use first existing modulesDir to store build cache files (#​31907)
💅 Refactors
  • nuxt: Use shallowRef for primitives as well (#​31662)
  • nuxt: Move island renderer into its own event handler (#​31386)
  • nuxt: Remove unneeded import (#​31750)
  • nuxt: Use _replaceAppConfig when applying hmr (#​31786)
  • nuxt: Use new unplugin filter options (#​31868)
  • schema: Do not generate types for ConfigSchema (#​31894)
📖 Documentation
  • Add note on extending auto-imports (#​31640)
  • Improve description of app.vue (#​31645)
  • Use video-accordion video and add more videos (#​31655)
  • Add description of templateParams to seo docs (#​31583)
  • Refine auto-imports documentation (#​31700)
  • Fix nuxt logo on website badge (#​31704)
  • Update tailwindcss link (b5741cb5a)
  • Adjust description of useHydration (#​31712)
  • Remove trailing slash (#​31751)
  • Remove comment about callOnce returning value (#​31747)
  • Use vs. consistently (#​31760)
  • Update nitro addServerHandler example (#​31769)
  • Add supporting shared folder video (#​31651)
  • Update example for component auto-import in nuxt modules (#​31757)
  • Refine nuxt kit components documentation (#​31714)
  • Use trailing slash for vitest link (82de8bcf8)
  • Fix casing (#​31805)
  • Add discord and nuxters links (#​31888)
  • Fix typos (#​31898)
📦 Build
  • nuxt: Use vue-sfc-transformer to process sfcs (#​31691)
🏡 Chore
Tests
  • nuxt: Add customizable test api for pages tests (#​31619)
  • kit: Fix tests when running on Windows (#​31694)
  • Update page metadata snapshot (89a596075)
  • Add basic runtime tests for <NuxtErrorBoundary> (4df92c45f)
  • Add version to mock nuxt (915fae2fd)
  • Update assertion for pendingWhenIdle (08f2224c8)
  • Remove incorrect assertions (fdc4b5343)
  • Update tests for purgeCachedData (c6411eb17)
🤖 CI
  • Add notify-nuxt-website workflow (#​31726)
❤️ Contributors

v3.16.2

Compare Source

3.16.2 is the next patch release.

Upgrading

Our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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
  • nuxt: Improve tree-shaking of useRequestEvent on client (#​31586)
🩹 Fixes
  • nuxt: Pass down attrs to <Body> and <Html> (#​31513)
  • nuxt: Use greedy catchall when /index is the last segment (#​31528)
  • nuxt: Reset page:loading:end hook before navigation (#​31504)
  • nuxt: Write initial cookie value if different from document.cookie (#​31517)
  • nuxt: Support template string quotes in resolveComponent (#​31526)
  • nuxt: Show fatal errors thrown in middleware (#​31518)
  • nuxt: Use name to index route providers in dev (#​31544)
  • nuxt: Improve default scroll behaviour (#​31545)
  • vite: Return 404 for non-existent _nuxt/ paths in development (#​31543)
  • nuxt: Pass error data to error.vue (#​31573)
  • nuxt: Use unhead v2 api in default welcome + error pages (#​31584)
  • nuxt: Improve consistency of page metadata extraction (#​31306)
  • nuxt: Do not remove meta when scanPageMeta is disabled (0ba454b21)
💅 Refactors
  • nuxt: Simplify conditional branches of <NuxtPage> (#​31561)
  • Replace useServerHead in onPrehydrate with useHead (#​31585)
📖 Documentation
  • Move custom directories note to the correct place (#​29100)
  • Update example to useTemplateRef (#​31458)
  • Provide async function for $fetch (#​31459)
  • Mention the possibility to scan pages based on a pattern (#​31462)
  • Add dedupe flag (#​31467)
  • Improve refreshNuxtData docs (#​31448)
  • Add missing -- before --template (#​31469)
  • Migrate to @​nuxt/content v3 (#​31150)
  • Fix icon for main docs (e7828d9c6)
  • Save selected package manager (#​31520)
  • Improve refresh nuxt data example (#​31487)
  • Note that middleware runs on error pages as well (df14c0263)
  • Replace all 'Nuxt 3' with 'Nuxt' in documentation (#​31519)
  • resolveComponent only auto-imports components with literal strings (#​31511)
  • Add ticks around tsconfig.json (#​31473)
  • Capitalize heading (#​31523)
  • Update links to unhead.unjs.io (1913febbb)
  • Document that props are passed via server components via query (db7688219)
  • Improve description of page:start and page:finish hooks (#​31570)
🏡 Chore
Tests
  • Avoid invalid nested font face (#​31524)
  • Add test for loading indicator with custom key (25ca9b819)
  • Add test for custom prop + loading indicator (94bfed031)
  • Update snapshot (55134fc2a)
❤️ Contributors

v3.16.1

Compare Source

compare changes

🔥 Performance
  • nuxt: Use browser cache for payloads (#​31379)
🩹 Fixes
  • nuxt: Restore nuxt aliases to nitro compilerOptions.paths (#​31278)
  • nuxt: Use new mocked-exports (#​31295)
  • nuxt: Check resolved options for polyfills (#​31307)
  • nuxt: Render style component html (#​31337)
  • nuxt: Add missing lazy hydration prop in regex (#​31359)
  • nuxt: Fully resolve nuxt dependencies (#​31436)
  • vite: Don't show interim vite build output files (#​31439)
  • nuxt: Ignore prerendering unprefixed public assets (151912ec3)
  • nuxt: Use more performant router catchall pattern (#​31450)
  • nuxt: Prevent param duplication in typedPages implementation (#​31331)
  • nuxt: Sort route paths before creating route tree (#​31454)
📖 Documentation
  • Update link to vercel edge network (ec20802a5)
  • Improve HMR performance note for Windows users (#​31301)
  • Correct WSL note phrasing (#​31322)
  • Fix typo (#​31341)
  • Adjust app.head example (#​31350)
  • Include package manager options in update script (#​31346)
  • Add missing comma (#​31362)
  • Add mention of addServerTemplate to modules guide (#​31369)
  • Add rspack and remove test-utils for monorepo guide (#​31371)
  • Adjust example (#​31372)
  • Update experimental docs (#​31388)
  • Use ini syntax block highlighting for .env files (f79fabe46)
  • Improve useHydration docs (#​31427)
  • Update broken docs links (#​31430)
  • Mention possibility of prerendering api routes (#​31234)
🏡 Chore
Tests
  • Migrate runtime compiler test to playwright (+ add test cases) (#​31405)
  • Migrate spa preloader tests to playwright (#​31273)
  • Use srvx and random port for remote provider (#​31432)
🤖 CI
❤️ Contributors

v3.16.0

Compare 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:

npm create nuxt

screenshot of create nuxt app

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 unhead v2, the engine behind Nuxt's <head> management. This major version removes deprecations and improves how context works:

  • For Nuxt 3 users, we're shipping a legacy compatibility build so nothing breaks
  • The context implementation is now more direct via Nuxt itself
// Nuxt now re-exports composables while properly resolving the context
export function useHead(input, options = {}) {
  const unhead = injectHead(options.nuxt)
  return head(input, { head: unhead, ...options })
}

If you're using Unhead directly in your app, keep in mind:

  1. Import from Nuxt's auto-imports or #app/composables/head instead of @unhead/vue
  2. Importing directly from @unhead/vue might lose async context

Don'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:

  1. Using exsolve for module resolution (#​31124) along with the rest of the unjs ecosystem (nitro, c12, pkg-types, and more) - which dramatically speeds up module resolution
  2. Smarter module resolution paths (#​31037) - prioritizes direct imports for better efficiency
  3. Eliminated duplicated Nitro alias resolution (#​31088) - leaner file handling
  4. Streamlined loadNuxt by skipping unnecessary resolution steps (#​31176) - faster startups
  5. Adopt oxc-parser for 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.

<template>
  <!-- Hydrate when component becomes visible in viewport -->
  <LazyExpensiveComponent hydrate-on-visible />
  
  <!-- Hydrate when browser is idle -->
  <LazyHeavyComponent hydrate-on-idle />
  
  <!-- Hydrate on interaction (mouseover in this case) -->
  <LazyDropdown hydrate-on-interaction="mouseover" />
  
  <!-- Hydrate when media query matches -->
  <LazyMobileMenu hydrate-on-media-query="(max-width: 768px)" />
  
  <!-- Hydrate after a specific delay in milliseconds -->
  <LazyFooter :hydrate-after="2000" />
</template>

You can also listen for when hydration happens with the @hydrated event:

<LazyComponent hydrate-on-visible @&#8203;hydrated="onComponentHydrated" />

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:

export default defineNuxtConfig({
  pages: {
    // Filter specific files or directories
    pattern: ['**/*.vue'],
  }
})
🔍 Enhanced Debugging

We've made debugging with the debug option more flexible! Now you can enable just the debug logs you need (#​30578):

export default defineNuxtConfig({
  debug: {
    // Enable specific debugging features
    templates: true,
    modules: true,
    watchers: true,
    hooks: {
      client: true,
      server: true,
    },
    nitro: true,
    router: true,
    hydration: true,
  }
})

Or keep it simple with debug: true to 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.

export default defineNuxtConfig({
  experimental: {
    decorators: true
  }
})
function something (_method: () => unknown) {
  return () => 'decorated'
}

class SomeClass {
  @&#8203;something
  public someMethod () {
    return 'initial'
  }
}

const value = new SomeClass().someMethod()
// returns 'decorated'
📛 Named Layer Aliases

It's been much requested, and it's here! Auto-scanned local layers (from your ~~/layers directory) now automatically create aliases. You can access your ~~/layers/test layer via #layers/test (#​30948) - no configuration needed.

If you want named aliases for other layers, you can add a name to your layer configuration:

export default defineNuxtConfig({
  $meta: {
    name: 'example-layer',
  },
})

This creates the alias #layers/example-layer pointing to your layer - making imports cleaner and more intuitive.

🧪 Error Handling Improvements

We've greatly improved error messages and source tracking (#​31144):

  1. Better warnings for undefined useAsyncData calls with precise file location information
  2. Error pages now appear correctly on island page errors (#​31081)

Plus, 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):

// Inside your Nuxt module
export default defineNuxtModule({
  setup(options, nuxt) {
    addTypeTemplate({
      filename: 'types/my-module.d.ts',
      getContents: () => `
        declare module 'nitropack' {
          interface NitroRouteConfig {
            myCustomOption?: boolean
          }
        }
      `
    }, { nitro: true })
  }
})
⚙️ 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 unjs Major Versions

This release includes several major version upgrades from the unjs ecosystem, focused on performance and smaller bundle sizes through ESM-only distributions:

  • unenv upgraded to v2 (full rewrite)
  • db0 upgraded to v0.3 (ESM-only, native node:sql, improvements)
  • ohash upgraded to v2 (ESM-only, native node:crypto support, much faster)
  • untyped upgraded to v2 (ESM-only, smaller install size)
  • unimport upgraded to v4 (improvements)
  • c12 upgraded to v3 (ESM-only)
  • pathe upgraded to v2 (ESM-only)
  • cookie-es upgraded to v2 (ESM-only)
  • esbuild upgraded to v0.25
  • chokidar upgraded to v4

Upgrading

As usual, our recommendation for upgrading is to run:

npx nuxi@latest upgrade --dedupe

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: Upgrade @nuxt/devtools to v2 (#​30889)
  • nuxt: Granular debug options (#​30578)
  • nuxt: Add type hints for NuxtPage (#​30704)
  • nuxt: Support tracking changes to nuxt options by modules (#​30555)
  • nuxt: Allow disabling auto-imported polyfills (#​30332)
  • schema: Add runtime + internal type validation (#​30844)
  • kit,nuxt,schema: Support experimental decorators syntax (#​27672)
  • kit,nuxt: Allow multiple nuxts to run in one process (#​30510)
  • kit: Add named layer aliases (#​30948)
  • kit,nuxt,vite: directoryToURL to normalise paths (#​30986)
  • nuxt: Allow forcing start/set in loading indicator (#​30989)
  • nuxt: Allow specifying glob patterns for scanning pages/ (#​31090)
  • nuxt: Add types for default NuxtLink slot (#​31104)
  • nuxt: Delayed/lazy hydration support (#​26468)
  • vite: Add vite's modulepreload polyfill (#​31164)
  • nuxt: Show source file when warning about undefined useAsyncData (#​31144)
  • kit,nuxt: Augment nitro types with addTypeTemplate (#​31079)
  • kit,nuxt: Resolve template imports from originating module (#​31175)
  • nuxt: Use oxc-parser instead of esbuild + acorn (#​30066)
  • nuxt: Upgrade to unhead v2 (#​31169)
  • nuxt: Align nuxt error handling with nitro (#​31230)
🔥 Performance
  • nuxt: Remove duplicated nitro alias resolution (#​31088)
  • kit: Try non-subpath routes first to resolve nuxt modules (#​31037)
  • nuxt: Migrate to use exsolve for module resolution (#​31124)
  • kit: Skip extra module resolution step in loadNuxt (#​31176)
🩹 Fixes
  • nuxt: Ensure <NuxtLayout> fallback prop is typed (#​30832)
  • nuxt: Assign slot to be rendered for client components (#​30768)
  • nuxt,vite: Do not override vite import conditions (#​30887)
  • nuxt: Prevent keepalive cache reset (#​30807)
  • nuxt: Remove div wrapper in client-only pages (#​30425)
  • schema: Update type import to nitropack (aba75bd5a)
  • vite: Use resolveId from vite-node to resolve deps (#​30922)
  • schema: Normalise additional experimental options (63e0c342c)
  • nuxt: Delete existing properties in app config HMR (#​30918)
  • schema: Return null from resolve functions (d68e8ce57)
  • schema: Check if app.head.meta values are undefined (#​30959)
  • nuxt: Make shared/ directories available within layers (#​30843)
  • kit: Ensure nuxt is loaded from cwd rather than parent dir (#​30910)
  • ui-templates: Remove extra <pre> when rendering dev errors (9aab69ec4)
  • nuxt: Use tsx loader for jsx blocks as well (#​31014)
  • Remove unimplemented page:transition:start type (#​31040)
  • kit: Expose module dependency errors (#​31035)
  • nuxt: Deprioritise layer css imports (#​31020)
  • nuxt: Ensure provide / inject work in setup of defineNuxtComponent (#​30982)
  • nuxt: Decode URI components in cache driver methods (#​30973)
  • nuxt: Use _ for NuxtIsland name on server pages (#​31072)
  • nuxt: Use ohash to calculate legacy async data key without hash (#​31087)
  • nuxt,schema: Resolve shared dir from config (#​31091)
  • kit,schema: Set esbuild target for experimental decorators (#​31089)
  • nuxt: Set nuxt.options.pages to detected configuration (#​31101)
  • nuxt: Warn when definePageMeta does not receive an object (#​31156)
  • nuxt: Fix nitro import statements for v2 (151cf7d49)
  • nuxt: Update path to no-ssr middleware handler (a99c59fbd)
  • nuxt: Align type of custom navigate with vue-router (7a1934509)
  • nuxt: Show error page on island page error (#​31081)
  • nuxt: Do not render payloads if disabled, and correct regexp (#​31167)
  • nuxt: Add backwards-compatible serialisation for nuxt.options.pages (fa480e0a0)
  • ui-templates: Escape inline scripts correctly in ui templates (39c2b0a2c)
  • nuxt: Add back fallback nuxtlink type signature (a8856de59)
  • kit: Provide default extensions in resolveModule (6fb5c9c15)
  • nuxt: Provide default extensions in resolveTypePath (a0f9ddfe2)
  • nuxt: Strip query before generating payload url (34ddc2d2f)
  • schema: Resolve workspaceDir to closest git config (7a2fbce01)
  • kit: Include declaration files when resolving compilerOptions.paths (835e89404)
  • nuxt: Consolidate head component context (#​31209)
  • nuxt: Resolve shared externals to absolute paths (#​31227)
  • nuxt: Skip deep merge in dev mode for prototype keys (#​31205)
  • schema: Use RawVueCompilerOptions for unresolved tsconfig (#​31202)
  • nuxt: Ensure externals are resolved first (#​31235)
  • nuxt: Ensure we strip all chars in payload url (4f067f601)
  • nuxt: Exempt nitro from import protections (#​31246)
  • nuxt: Normalise error url to pathname (87b69c9ae)
  • nuxt: Ensure head components are reactive (#​31248)
  • nuxt: Preserve query/hash when calling navigateTo with replace (#​31244)
  • nuxt: Apply ignore rules to nitro devStorage (#​31233)
  • nuxt: Fall back to wasm if oxc native bindings are missing (#​31190)
  • nuxt: Pass useFetch function name on server for warning (#​31213)
  • vite: Prevent overriding server build chunks (89a29e760)
  • nuxt: Strip query in x-nitro-prerender header (2476cab9a)
💅 Refactors
  • nuxt: Prefer logical assignment operators (#​31004)
  • nuxt: Use isEqual from ohash/utils (2e27cd30c)
  • nuxt: Update to noScripts route rule (#​31083)
  • nuxt: Re-organize internal runtime/nitro files (#​31131)
  • nuxt: Explicitly type internal request fetch (54cb80319)
  • nuxt: Use relative imports (1bce3dc3b)
  • nuxt: Early return island response (#​31094)
📖 Documentation
  • Tiny typo (#​30799)
  • Fix typo (#​30817)
  • Remove backslashes in spaLoadingTemplate example (#​30830)
  • Update path to nuxt binary (8992c4ea0)
  • Add nuxt lifecycle (#​30726)
  • Add additional information about NuxtPage (#​30781)
  • Improve navigateTo docs with clearer structure and examples (#​30876)
  • Add auto import info about shared utils (#​30858)
  • Fix typo and improve data fetching examples (#​30935)
  • Clarify that local layers are scanned from rootDir (27e356fe6)
  • Fix typo (#​30963)
  • Update links to unhead sources (6c520ef74)
  • Fix typo (#​30971)
  • Add tips on how to override layers aliases (#​30970)
  • Add description for vue:setup and app:data:refresh hooks (#​31001)
  • Mention requirement to wrap middleware in defineNuxtRouteMiddleware (#​31005)
  • Add port option to preview command (#​30999)
  • Remove link to deleted nuxt 2 section (#​31077)
  • Link to the scripts releases page (#​31095)
  • Add .nuxtrc documentation (#​31093)
  • Fix typo in example command (#​31112)
  • Explain why headers not forwarded when using $fetch on the server (#​31114)
  • Fix links to nitro directory structure (5a696176d)
  • Update to use create nuxt command (fe82af4c9)
  • Update getCachedData types (#​31208)
  • Update code example for nightly release to default to 3x (a243f8fcf)
  • Clarify lifecycle behavior of <NuxtPage> during page changes (#​31116)
  • Mention workaround for typedPages in unhoisted pnpm setups (#​31262)
📦 Build
  • nuxt: Add subpath imports for type support (8ef3fcc4d)
🏡 Chore
Tests
  • Add benchmarks for dev server initial build (#​30742)
  • Exclude urls from lychee crawler used in test suite (8e2d9a640)
  • Prepare environment to ensure more reproducible dev tests (bc89ef867)
  • Update unit test (5a71ef8ac)
  • Add major version to unit test (676447239)
  • Slightly improve coverage (d992c0da9)
  • Bump timeout for route hmr (cbe38cf52)
  • Update unit test snapshot for jsx (4910959b9)
  • Disable codspeed outside of ci (71de708a0)
  • Add some more stability in hmr tests (9a9fcdab5)
  • Skip testing spa-preloader in dev (6cf97bfe5)
  • Fix time-based hydration test (da3b39d67)
  • Simplify further (ad306f472)
  • Filter out dev server logs 🙈 (ee040eea3)
  • Update unit test snapshot (97ec3143a)
  • Provide nuxt extensions in unit test (358729e96)
  • Add benchmark for vite client build (#​31118)
  • Update build benchmark (82ca08f93)
  • Ensure dev tests have separate buildDirs (d7623f884)
  • Update nitro type import (8f61d0090)
  • Update import to #internal/nitro/app (a1b855cc5)
  • Try to improve dev test stability (#​31218)
  • Migrate hmr test to use playwright runner (#​31241)
❤️ 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.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [nuxt](https://nuxt.com) ([source](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt)) | [`^3.15.4` -> `^4.0.0`](https://renovatebot.com/diffs/npm/nuxt/3.15.4/4.2.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nuxt/4.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nuxt/3.15.4/4.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nuxt/nuxt (nuxt)</summary> ### [`v4.2.2`](https://github.com/nuxt/nuxt/releases/tag/v4.2.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.2.1...v4.2.2) > 4.2.2 is the next patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v4.2.1...v4.2.2) ##### 🩹 Fixes - **nitro:** Do not show pretty error handler when testing ([243261edb](https://github.com/nuxt/nuxt/commit/243261edb)) - **nuxt:** Generate valid references for component declaration items ([#&#8203;33388](https://github.com/nuxt/nuxt/pull/33388)) - **nuxt:** Sync internal route before calling `page:finish` hook ([#&#8203;33707](https://github.com/nuxt/nuxt/pull/33707)) - **kit:** Add TypeScript path alias support for test files ([#&#8203;33672](https://github.com/nuxt/nuxt/pull/33672)) - **nitro:** Ensure html is a string before injecting error handler ([f70b70c97](https://github.com/nuxt/nuxt/commit/f70b70c97)) - **nitro:** Include layer server directories in `tsconfig.server.json` ([#&#8203;33510](https://github.com/nuxt/nuxt/pull/33510)) - **nuxt:** Ensure deduped async data executions return latest promise ([#&#8203;33740](https://github.com/nuxt/nuxt/pull/33740)) - **kit,nuxt:** Type + respect `moduleDependencies` by meta name ([#&#8203;33774](https://github.com/nuxt/nuxt/pull/33774)) - **nuxt,schema:** Ignore `.d.vue.ts` declarations ([1c73525a2](https://github.com/nuxt/nuxt/commit/1c73525a2)) - **kit,nuxt:** Protect against resolved nuxt module subpath ([#&#8203;33767](https://github.com/nuxt/nuxt/pull/33767)) - **nuxt:** Re-execute `callOnce` during HMR ([#&#8203;33810](https://github.com/nuxt/nuxt/pull/33810)) - **nuxt:** Resolve watch callback after reactive key change in `useAsyncData` ([#&#8203;33802](https://github.com/nuxt/nuxt/pull/33802)) - **nuxt:** Escape HTML in development error page stack trace ([#&#8203;33820](https://github.com/nuxt/nuxt/pull/33820)) - **kit:** Do not add resolved `rootDir` to cached layer config ([#&#8203;33779](https://github.com/nuxt/nuxt/pull/33779)) - **kit,schema:** Add `moduleDependencies` -> `installModule` ([#&#8203;33689](https://github.com/nuxt/nuxt/pull/33689)) ##### 💅 Refactors - **nuxt:** Improve type safety within `callOnce` function ([#&#8203;33825](https://github.com/nuxt/nuxt/pull/33825)) ##### 📖 Documentation - Split directory structure and re-order guides (v4) ([#&#8203;33691](https://github.com/nuxt/nuxt/pull/33691)) - Add hints release ([#&#8203;33701](https://github.com/nuxt/nuxt/pull/33701)) - Fix link to vitest globals config ([#&#8203;33702](https://github.com/nuxt/nuxt/pull/33702)) - Add mcp server and llms.txt ([#&#8203;33371](https://github.com/nuxt/nuxt/pull/33371)) - Fix 404 link ([98c2f1397](https://github.com/nuxt/nuxt/commit/98c2f1397)) - Text consistency ([#&#8203;33709](https://github.com/nuxt/nuxt/pull/33709)) - Type `error` as non-optional prop ([#&#8203;33763](https://github.com/nuxt/nuxt/pull/33763)) - Reformat tables ([#&#8203;33813](https://github.com/nuxt/nuxt/pull/33813)) ##### 🏡 Chore - Update pnpm to 10.21 and enable trust policy ([d2c9711c0](https://github.com/nuxt/nuxt/commit/d2c9711c0)) - Revert pnpm trust policy and restore provenance action ([f9d0e0a3d](https://github.com/nuxt/nuxt/commit/f9d0e0a3d)) - Update markdownlint config to ignore mdc issues ([e7fff7132](https://github.com/nuxt/nuxt/commit/e7fff7132)) - Pin to single version of unstorage ([ec316eae8](https://github.com/nuxt/nuxt/commit/ec316eae8)) ##### ✅ Tests - Add `patchProp` and `nodeOps` to excluded Vue helpers ([#&#8203;33754](https://github.com/nuxt/nuxt/pull/33754)) - Use fake timers for watch params test ([08d9d2f3b](https://github.com/nuxt/nuxt/commit/08d9d2f3b)) ##### 🤖 CI - Add `--pnpm` flag to correctly publish prerelease ([#&#8203;33688](https://github.com/nuxt/nuxt/pull/33688)) - Update action lint config ([#&#8203;33710](https://github.com/nuxt/nuxt/pull/33710)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Konstantin Telyakov ([@&#8203;kTelyakov](https://github.com/kTelyakov)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Dheeraj Joshi ([@&#8203;dheeraj3587](https://github.com/dheeraj3587)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Edwin Samodra ([@&#8203;edwinsamodra](https://github.com/edwinsamodra)) - edison ([@&#8203;edison1105](https://github.com/edison1105)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Hugo ([@&#8203;HugoRCD](https://github.com/HugoRCD)) - pierreoa ([@&#8203;pierreoa](https://github.com/pierreoa)) - Maxime Pauvert ([@&#8203;maximepvrt](https://github.com/maximepvrt)) ### [`v4.2.1`](https://github.com/nuxt/nuxt/releases/tag/v4.2.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.2.0...v4.2.1) > **4.2.1** is the next patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v4.2.0...v4.2.1) ##### 🩹 Fixes - **kit,nuxt,schema:** Deprecate `ImportPresetWithDeprecation` ([#&#8203;33596](https://github.com/nuxt/nuxt/pull/33596)) - **nuxt:** Correct warning message for prefetch/noPrefetch conflict ([#&#8203;33617](https://github.com/nuxt/nuxt/pull/33617)) - **nitro:** Remove `<nuxt-error-overlay>` iframe border ([#&#8203;33625](https://github.com/nuxt/nuxt/pull/33625)) - **vite:** Use rolldown replace only in build ([#&#8203;33615](https://github.com/nuxt/nuxt/pull/33615)) - **nitro:** Use directory paths in `moduleEntryPaths` ([#&#8203;33628](https://github.com/nuxt/nuxt/pull/33628)) - **nitro:** Start error overlay minimized based on status code ([#&#8203;33658](https://github.com/nuxt/nuxt/pull/33658)) - **vite:** Ensure `optimizeDeps` config is applied before other plugins ([#&#8203;33586](https://github.com/nuxt/nuxt/pull/33586)) - **nuxt:** Respect layer priority order for scanned components ([#&#8203;33654](https://github.com/nuxt/nuxt/pull/33654)) - **nuxt:** Process prerender routes on `pages:resolved` ([#&#8203;33662](https://github.com/nuxt/nuxt/pull/33662)) - **nuxt:** Remove abort signal event listeners after render ([#&#8203;33665](https://github.com/nuxt/nuxt/pull/33665)) - **nuxt:** Cleanup event listener with cleanup signal ([#&#8203;33667](https://github.com/nuxt/nuxt/pull/33667)) - **vite:** Update `vite-node` ([#&#8203;33663](https://github.com/nuxt/nuxt/pull/33663)) - **vite:** Respect vite proxy in dev middleware ([#&#8203;33670](https://github.com/nuxt/nuxt/pull/33670)) ##### 💅 Refactors - **kit,nitro,nuxt,schema,vite:** Explicitly import process/performance ([#&#8203;33650](https://github.com/nuxt/nuxt/pull/33650)) ##### 📖 Documentation - Fix typo in eslint flat config description ([#&#8203;33569](https://github.com/nuxt/nuxt/pull/33569)) - Add signal support to useAsyncData examples ([#&#8203;33601](https://github.com/nuxt/nuxt/pull/33601)) - Document `pending` as alias of `status === 'pending'` ([#&#8203;33221](https://github.com/nuxt/nuxt/pull/33221)) - Note that `cookieStore` is `true` by default ([#&#8203;33572](https://github.com/nuxt/nuxt/pull/33572)) - Add information on types for server context ([#&#8203;33511](https://github.com/nuxt/nuxt/pull/33511)) - Mark webstorm issue resolved ([#&#8203;33608](https://github.com/nuxt/nuxt/pull/33608)) - Clarify route middleware doesn't affect API routes ([#&#8203;33643](https://github.com/nuxt/nuxt/pull/33643)) - Improve docs for `useHead`/`useHydration`/`useLazy*` ([#&#8203;33626](https://github.com/nuxt/nuxt/pull/33626)) - Update link to nitro source to v2 branch ([08018af4f](https://github.com/nuxt/nuxt/commit/08018af4f)) - Add typescript documentation for module authors ([#&#8203;33637](https://github.com/nuxt/nuxt/pull/33637)) - Typo ([#&#8203;33655](https://github.com/nuxt/nuxt/pull/33655)) ##### 🏡 Chore - Update URLs ([#&#8203;33567](https://github.com/nuxt/nuxt/pull/33567)) - Add `verifyDepsBeforeRun: install` ([#&#8203;33603](https://github.com/nuxt/nuxt/pull/33603)) - Reduce redirects in docs links ([1cc539325](https://github.com/nuxt/nuxt/commit/1cc539325)) - Lint docs ([0b5fa5dea](https://github.com/nuxt/nuxt/commit/0b5fa5dea)) ##### 🤖 CI - Disable cache in release action ([ff37598bc](https://github.com/nuxt/nuxt/commit/ff37598bc)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Anthony Fu ([@&#8203;antfu](https://github.com/antfu)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Peter Budai ([@&#8203;peterbud](https://github.com/peterbud)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Max ([@&#8203;onmax](https://github.com/onmax)) - 纸鹿/Zhilu ([@&#8203;L33Z22L11](https://github.com/L33Z22L11)) - Hinata Oishi ([@&#8203;te19oishi](https://github.com/te19oishi)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Maxime Pauvert ([@&#8203;maximepvrt](https://github.com/maximepvrt)) - Raed Abdennadher ([@&#8203;RaedAbr](https://github.com/RaedAbr)) ### [`v4.2.0`](https://github.com/nuxt/nuxt/releases/tag/v4.2.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.1.3...v4.2.0) > 4.2.0 is the next minor release. #### 👀 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 `AbortController` signals directly within `useAsyncData`, giving you fine-grained control over request cancellation ([#&#8203;32531](https://github.com/nuxt/nuxt/pull/32531)). This works by passing an internal signal to your `useAsyncData` `handler` to cancel any promise that can be canceled, such as `$fetch`. ```vue <script setup lang="ts"> const controller = new AbortController() const { data, error, clear, refresh } = await useAsyncData('users', (_nuxtApp, { signal }) => $fetch('/api/users', { signal })) refresh() // will actually cancel the $fetch request (if dedupe: cancel) refresh() // will actually cancel the $fetch request (if dedupe: cancel) refresh() clear() // will cancel the latest pending handler </script> ``` You also pass an `AbortController` signal directly to `refresh`/`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. ```ts const { data, refresh } = await useAsyncData('posts', fetchPosts) // Abort an ongoing refresh const abortController = new AbortController() refresh({ signal: abortController.signal }) // Later... abortController.abort() ``` ##### 🎨 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 ([#&#8203;33359](https://github.com/nuxt/nuxt/pull/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. ![Screenshot of the new development error page](https://github.com/user-attachments/assets/397d0a52-3f59-4923-91de-c9dfcb5fa624) 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](https://vite.dev/guide/api-environment) ([#&#8203;33492](https://github.com/nuxt/nuxt/pull/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. ```ts [nuxt.config.ts] export default defineNuxtConfig({ experimental: { viteEnvironmentApi: true } }) ``` This is also the first breaking change for Nuxt v5. You can opt in to these breaking changes by setting `compatibilityVersion` to `5`: ```ts [nuxt.config.ts] export default defineNuxtConfig({ future: { compatibilityVersion: 5 }, }) ``` 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. > \[!WARNING] > This is highly experimental and the API may change. Only enable if you're prepared for potential breaking changes and want to help shape the future of Nuxt! ##### 📦 New `@nuxt/nitro-server` Package We've extracted Nitro server integration into its own package: `@nuxt/nitro-server` ([#&#8203;33462](https://github.com/nuxt/nuxt/pull/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+). > \[!NOTE] > This is an internal refactor – no changes should be required in your code. ##### ⚡ Performance Improvements We've also shipped several performance enhancements: - **Precomputed renderer dependencies** – We now compute renderer dependencies at build time rather than runtime, improving cold start and initial render performance ([#&#8203;33361](https://github.com/nuxt/nuxt/pull/33361)) - **Reduced dependencies** – Removed unnecessary dependencies from kit and schema packages ([7ae2cf563](https://github.com/nuxt/nuxt/commit/7ae2cf563)) ##### 📉 Async Data Handler Extraction One of the most exciting performance improvements is the new experimental async data handler extraction ([#&#8203;33131](https://github.com/nuxt/nuxt/pull/33131)). When enabled, handler functions passed to `useAsyncData` and `useLazyAsyncData` are 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. > \[!NOTE] > In testing with a previous version of nuxt.com, this feature **reduced JavaScript bundle size by 39%**! Of course, your mileage may vary depending on how much data fetching logic you have. ```vue [pages/blog/[slug\\].vue] <script setup lang="ts"> // This handler will be extracted into a separate chunk // and only loaded when needed const { data: post } = await useAsyncData('post', async () => { const content = await queryContent(`/blog/${route.params.slug}`).findOne() // Complex data processing that you don't want in the client bundle const processed = await processMarkdown(content) const related = await findRelatedPosts(content.tags) return { ...processed, related } }) </script> ``` For static/prerendered sites, enable it in your config: ```ts [nuxt.config.ts] export default defineNuxtConfig({ experimental: { extractAsyncDataHandlers: true } }) ``` 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/nuxt`](https://github.com/KazariEX/dxup) module. This module adds a number of TypeScript plugins that aim to improve your experience when using Nuxt-specific features: - **Smart component renaming**: Automatically updates all references when you rename auto-imported component files - **Go to definition for dynamic imports**: Navigate directly to files when using glob patterns like `import(\`\~/assets/${name}.webp\`)\` - **Nitro route navigation**: Jump to server route handlers from data fetching functions (`$fetch`, `useFetch`, `useLazyFetch`) - **Runtime config navigation**: Go to definition works seamlessly with runtime config properties - **Enhanced auto-import support**: Includes the [`@dxup/unimport`](https://github.com/KazariEX/dxup/tree/main/packages/unimport) plugin for better navigation with auto-imported composables and utilities > \[!NOTE] > Read more in **[the documentation](https://nuxt.com/docs/guide/directory-structure/nuxt-config#typescript-plugin)**. To enable this feature, set `experimental.typescriptPlugin` to `true` in your Nuxt configuration: ```ts [nuxt.config.ts] export default defineNuxtConfig({ experimental: { typescriptPlugin: true } }) ``` Once enabled, the module will be automatically installed and configured by Nuxt. > \[!IMPORTANT] > This feature also requires selecting the workspace TypeScript version in VS Code. Run the "TypeScript: Select TypeScript Version" command and choose "Use Workspace Version". ##### 🎁 Other Improvements - **Component `declarationPath`** – You can now specify a custom declaration path for components ([#&#8203;33419](https://github.com/nuxt/nuxt/pull/33419)) - **Module resolution extensions** – Kit's `resolveModule` now accepts an `extensions` option ([#&#8203;33328](https://github.com/nuxt/nuxt/pull/33328)) - **Global head utility** – New `setGlobalHead` utility in kit for easier head management ([#&#8203;33512](https://github.com/nuxt/nuxt/pull/33512)) ##### 🩹 Important Fixes - Route hash is now preserved when redirecting based on `routeRules` ([#&#8203;33222](https://github.com/nuxt/nuxt/pull/33222)) - Fixed concurrent calls to `loadNuxtConfig` with proper cleanup ([#&#8203;33420](https://github.com/nuxt/nuxt/pull/33420)) - Object-format `href` now works correctly in `<NuxtLink>` ([c69e4c30d](https://github.com/nuxt/nuxt/commit/c69e4c30d)) - Component auto-imports now work as arguments to Vue's `h()` function ([#&#8203;33509](https://github.com/nuxt/nuxt/pull/33509)) - Fixed app config array handling during HMR ([#&#8203;33555](https://github.com/nuxt/nuxt/pull/33555)) ##### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v4.1.3...v4.2.0) ##### 🚀 Enhancements - **nuxt:** Allow specifying component `declarationPath` ([#&#8203;33419](https://github.com/nuxt/nuxt/pull/33419)) - **kit:** Add `extensions` option for `resolveModule` ([#&#8203;33328](https://github.com/nuxt/nuxt/pull/33328)) - **nuxt:** Add abortController option to `useAsyncData` ([#&#8203;32531](https://github.com/nuxt/nuxt/pull/32531)) - **nuxt:** Display youch error page w/ user error page in dev ([#&#8203;33359](https://github.com/nuxt/nuxt/pull/33359)) - **nuxt:** Experimental typescript plugin support ([#&#8203;33314](https://github.com/nuxt/nuxt/pull/33314)) - **nuxt,schema:** Extract asyncData handlers to chunks ([#&#8203;33131](https://github.com/nuxt/nuxt/pull/33131)) - **schema:** Enable setting `future.compatibilityVersion` to `5` ([22f4693a1](https://github.com/nuxt/nuxt/commit/22f4693a1)) - **kit,vite:** Allow enabling vite environment api ([#&#8203;33492](https://github.com/nuxt/nuxt/pull/33492)) - **kit:** Add `setGlobalHead` utility ([#&#8203;33512](https://github.com/nuxt/nuxt/pull/33512)) ##### 🔥 Performance - **nuxt:** Precompute renderer dependencies at build time ([#&#8203;33361](https://github.com/nuxt/nuxt/pull/33361)) - **kit,schema:** Remove some unnecessary dependencies ([7ae2cf563](https://github.com/nuxt/nuxt/commit/7ae2cf563)) ##### 🩹 Fixes - **nuxt:** Preserve hash with redirecting based on `routeRules` ([#&#8203;33222](https://github.com/nuxt/nuxt/pull/33222)) - **kit:** Safely cleanup `loadNuxtConfig` in concurrent calls ([#&#8203;33420](https://github.com/nuxt/nuxt/pull/33420)) - **nuxt:** Allow object-format `href` in `<NuxtLink>` ([c69e4c30d](https://github.com/nuxt/nuxt/commit/c69e4c30d)) - **nuxt:** Remove `mergeModels` from auto imports ([#&#8203;33344](https://github.com/nuxt/nuxt/pull/33344)) - **nuxt:** Add back `shortPath` property ([#&#8203;33384](https://github.com/nuxt/nuxt/pull/33384)) - **nuxt:** Do not allow native attrs to shadow nuxt link props ([4751a6aca](https://github.com/nuxt/nuxt/commit/4751a6aca)) - **nuxt:** Remove `declarationPath` from component dirs ([191bcb7e9](https://github.com/nuxt/nuxt/commit/191bcb7e9)) - **nuxt:** Preserve root route in `isPrerendered` check ([#&#8203;33476](https://github.com/nuxt/nuxt/pull/33476)) - **nuxt:** Exempt webpack vfs from pkg lookup ([285eac31c](https://github.com/nuxt/nuxt/commit/285eac31c)) - **nitro:** Exempt nightly release from import protections ([dd522394a](https://github.com/nuxt/nuxt/commit/dd522394a)) - **webpack,rspack:** Preserve prerender + nitro flags in server builds ([#&#8203;33503](https://github.com/nuxt/nuxt/pull/33503)) - **nuxt:** Support component auto-imports as arguments of `h()` ([#&#8203;33509](https://github.com/nuxt/nuxt/pull/33509)) - **vite:** Prevent assignment for rolldown's replacement plugin ([#&#8203;33526](https://github.com/nuxt/nuxt/pull/33526)) - **nuxt:** Use sha256 hash for prerender cache keys ([#&#8203;33505](https://github.com/nuxt/nuxt/pull/33505)) - **nuxt:** Add `NuxtTime` relative time `numeric` prop ([#&#8203;33552](https://github.com/nuxt/nuxt/pull/33552)) - **nuxt:** Add `NuxtTime` relative time `relativeStyle` prop ([#&#8203;33557](https://github.com/nuxt/nuxt/pull/33557)) - **nuxt:** Handle arrays in app config correctly during HMR ([#&#8203;33555](https://github.com/nuxt/nuxt/pull/33555)) - **vite:** Unset `optimizeDeps.include` for server environment ([#&#8203;33550](https://github.com/nuxt/nuxt/pull/33550)) ##### 💅 Refactors - Remove obsolete `shortPath` property ([#&#8203;33384](https://github.com/nuxt/nuxt/pull/33384)) - **kit:** Extract trace utilities ([9687505ac](https://github.com/nuxt/nuxt/commit/9687505ac)) - **nuxt,vite,webpack:** Allow builders to augment types ([#&#8203;33427](https://github.com/nuxt/nuxt/pull/33427)) - **schema:** Deprecate `extend`, `extendConfig`, and `configResolved` hooks ([e060b9695](https://github.com/nuxt/nuxt/commit/e060b9695)) - **vite:** Make vite plugins environment-compatible ([#&#8203;33445](https://github.com/nuxt/nuxt/pull/33445)) - **nitro,nuxt:** Extract `@nuxt/nitro-server` package ([#&#8203;33462](https://github.com/nuxt/nuxt/pull/33462)) - **nuxt:** Use `RouteLocationNormalizedLoadedGeneric` internally ([b51cb3067](https://github.com/nuxt/nuxt/commit/b51cb3067)) ##### 📖 Documentation - Update link to localisation issue ([d32859da2](https://github.com/nuxt/nuxt/commit/d32859da2)) - Add nuxt module `addServerPlugin` note ([#&#8203;33409](https://github.com/nuxt/nuxt/pull/33409)) - Remove deprecated node version ([#&#8203;33411](https://github.com/nuxt/nuxt/pull/33411)) - Update `declarationPath` in `addComponent` ([#&#8203;33380](https://github.com/nuxt/nuxt/pull/33380)) - Reproduction links for Nuxt v4 ([#&#8203;33429](https://github.com/nuxt/nuxt/pull/33429)) - Add some notes/deprecations for vite hooks ([31c5f26a2](https://github.com/nuxt/nuxt/commit/31c5f26a2)) - Fix incorrect ESM module field info ([#&#8203;33451](https://github.com/nuxt/nuxt/pull/33451)) - Recommend `getLayerDirectories()` instead of `nuxt.options._layers` ([#&#8203;33484](https://github.com/nuxt/nuxt/pull/33484)) - Add `4.x` prefix ([5c0bb9285](https://github.com/nuxt/nuxt/commit/5c0bb9285)) - Add docs for `moduleDependencies` ([#&#8203;33499](https://github.com/nuxt/nuxt/pull/33499)) - Clarify extends removal in TypeScript config migration ([#&#8203;33523](https://github.com/nuxt/nuxt/pull/33523)) - Pin codemod to v0.18.7 for migration recipe ([#&#8203;33522](https://github.com/nuxt/nuxt/pull/33522)) - Fix links ([#&#8203;33554](https://github.com/nuxt/nuxt/pull/33554)) ##### 🏡 Chore - Migrate gitpod to ona ([#&#8203;33159](https://github.com/nuxt/nuxt/pull/33159)) - Use native node to run `test:prepare` ([6ef632b82](https://github.com/nuxt/nuxt/commit/6ef632b82)) - Do not use native node to run `test:prepare` ([eca36cfe5](https://github.com/nuxt/nuxt/commit/eca36cfe5)) - Lint docs ([3b9784111](https://github.com/nuxt/nuxt/commit/3b9784111)) - Update valid semantic scopes ([3c38d1f8b](https://github.com/nuxt/nuxt/commit/3c38d1f8b)) - Ignore nitro templates ([27cf85bdc](https://github.com/nuxt/nuxt/commit/27cf85bdc)) - Update internal links ([aac763017](https://github.com/nuxt/nuxt/commit/aac763017)) - Remove `vue-demi` from `ignoredBuiltDependencies` ([#&#8203;33494](https://github.com/nuxt/nuxt/pull/33494)) - Update vscode url ([#&#8203;33360](https://github.com/nuxt/nuxt/pull/33360)) - Correct jsdoc location for function used as parameters ([#&#8203;33507](https://github.com/nuxt/nuxt/pull/33507)) - Remove code comment ([#&#8203;33515](https://github.com/nuxt/nuxt/pull/33515)) - Patch changelogen for large numbers of commits ([bd36738b8](https://github.com/nuxt/nuxt/commit/bd36738b8)) - Link Nuxt 1.x and 2.x (2016–2022) history to main ([85838dfd9](https://github.com/nuxt/nuxt/commit/85838dfd9)) - Filter out commits before last tag when constructing changelog ([1c561daeb](https://github.com/nuxt/nuxt/commit/1c561daeb)) - Also respect since date for bump type ([08900f610](https://github.com/nuxt/nuxt/commit/08900f610)) - Also respect `since` in nightly releases ([74ca73ca1](https://github.com/nuxt/nuxt/commit/74ca73ca1)) - Ignore `@rollup/plugin-commonjs` ([cd12980ce](https://github.com/nuxt/nuxt/commit/cd12980ce)) ##### ✅ Tests - Refactor suite to use common matrix utils ([#&#8203;33483](https://github.com/nuxt/nuxt/pull/33483)) ##### 🤖 CI - Publish `@nuxt/nitro-server` on pkg-pr-new ([b7ccf17bf](https://github.com/nuxt/nuxt/commit/b7ccf17bf)) - Remove nitro-server publish until v4.2 is released ([904d4f6ec](https://github.com/nuxt/nuxt/commit/904d4f6ec)) ##### ❤️ Contributors - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Trung Dang ([@&#8203;NamesMT](https://github.com/NamesMT)) - 纸鹿/Zhilu ([@&#8203;L33Z22L11](https://github.com/L33Z22L11)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Max ([@&#8203;onmax](https://github.com/onmax)) - Daniel Slepov ([@&#8203;imslepov](https://github.com/imslepov)) - Octavio Araiza ([@&#8203;8ctavio](https://github.com/8ctavio)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - DipakHalkude ([@&#8203;DipakHalkude](https://github.com/DipakHalkude)) - Aleksander Błaszkiewicz ([@&#8203;ablaszkiewicz](https://github.com/ablaszkiewicz)) ### [`v4.1.3`](https://github.com/nuxt/nuxt/releases/tag/v4.1.3) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.1.2...v4.1.3) > **4.1.3** is a regularly scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v4.1.2...v4.1.3) ##### 🔥 Performance - **vite:** Use rolldown's replace plugin when applicable ([#&#8203;33258](https://github.com/nuxt/nuxt/pull/33258)) ##### 🩹 Fixes - **kit:** Add default values when adding type references in `prepare:types` hook ([#&#8203;33239](https://github.com/nuxt/nuxt/pull/33239)) - **nuxt:** Augment app config in server context ([#&#8203;33287](https://github.com/nuxt/nuxt/pull/33287)) - **nuxt:** Make lazy component types compatible with `h` ([#&#8203;33046](https://github.com/nuxt/nuxt/pull/33046)) - **vite:** Deduplicate inlined server style chunks ([#&#8203;33308](https://github.com/nuxt/nuxt/pull/33308)) - **nuxt:** Support `head` option on `useHead` ([#&#8203;33318](https://github.com/nuxt/nuxt/pull/33318)) - **nuxt:** Do not relativise importmap if `cdnURL` is set ([#&#8203;33333](https://github.com/nuxt/nuxt/pull/33333)) - **nuxt:** Resolve aliases in `imports.dirs` ([#&#8203;33334](https://github.com/nuxt/nuxt/pull/33334)) - **nuxt:** Add missing element/vnode props for `<NuxtLink>` ([#&#8203;33335](https://github.com/nuxt/nuxt/pull/33335)) - **nuxt:** Do not generate server placeholder components ([#&#8203;33345](https://github.com/nuxt/nuxt/pull/33345)) - **nuxt:** Dedupe generated component names ([#&#8203;33346](https://github.com/nuxt/nuxt/pull/33346)) - **webpack:** Test watch instance before closing it ([0e5a0a5a0](https://github.com/nuxt/nuxt/commit/0e5a0a5a0)) - **nuxt:** Correctly handle island rendering error ([#&#8203;33302](https://github.com/nuxt/nuxt/pull/33302)) - **nuxt:** Support `v-slot:fallback` longform syntax in `<DevOnly>` ([#&#8203;33368](https://github.com/nuxt/nuxt/pull/33368)) - **nuxt:** Support `typeFrom` when generating auto-import type templates ([#&#8203;33373](https://github.com/nuxt/nuxt/pull/33373)) - **nuxt:** Don't trigger scroll when changing trailing slash ([#&#8203;33358](https://github.com/nuxt/nuxt/pull/33358)) - **nuxt:** Add stubs for new scripts from `@nuxt/scripts` ([bed410d60](https://github.com/nuxt/nuxt/commit/bed410d60)) - **nuxt:** Prevent duplicate execution on key change in `useAsyncData` ([#&#8203;33325](https://github.com/nuxt/nuxt/pull/33325)) - **nuxt:** Make middleware `_path` property configurable for HMR ([#&#8203;33379](https://github.com/nuxt/nuxt/pull/33379)) - **nuxt:** Handle non-immediate `useAsyncData` with different key on ssr ([#&#8203;33341](https://github.com/nuxt/nuxt/pull/33341)) ##### 💅 Refactors - **nuxt:** Improve implementation of error composables ([#&#8203;33234](https://github.com/nuxt/nuxt/pull/33234)) - **nuxt:** Resolve path of `typed-router.d.ts` early for consistency ([#&#8203;33285](https://github.com/nuxt/nuxt/pull/33285)) - **nuxt:** Move server references to `nitro:prepare:types` hook ([#&#8203;33286](https://github.com/nuxt/nuxt/pull/33286)) - **nuxt:** Place `filename` into `componentsIslandsTemplate` definition ([#&#8203;33394](https://github.com/nuxt/nuxt/pull/33394)) - **nuxt,vite:** Use environment-api compatible plugins ([#&#8203;33403](https://github.com/nuxt/nuxt/pull/33403)) ##### 📖 Documentation - Add `4.x` prefix to all internal links ([#&#8203;33264](https://github.com/nuxt/nuxt/pull/33264)) - Fix more links ([#&#8203;33265](https://github.com/nuxt/nuxt/pull/33265)) - Update usage instructions for Windows users ([#&#8203;33284](https://github.com/nuxt/nuxt/pull/33284)) - Update app config paths to use app/app.config.ts ([#&#8203;33297](https://github.com/nuxt/nuxt/pull/33297)) - Remove d suffix in example ([#&#8203;33298](https://github.com/nuxt/nuxt/pull/33298)) - Move directory structure to top-level ([#&#8203;33299](https://github.com/nuxt/nuxt/pull/33299)) - Add information about `useFetch` reactivity ([#&#8203;33317](https://github.com/nuxt/nuxt/pull/33317)) - Add more `4.x` prefixes in urls ([47ea684c7](https://github.com/nuxt/nuxt/commit/47ea684c7)) - Lint code samples within docs ([#&#8203;33271](https://github.com/nuxt/nuxt/pull/33271)) - Remove duplicated documentation from `nuxt.config` page ([b438d44e1](https://github.com/nuxt/nuxt/commit/b438d44e1)) - Remove docs for outdated asyncData configuration ([3e4a999e6](https://github.com/nuxt/nuxt/commit/3e4a999e6)) - Note `prepare` command `NODE_ENV` behavior ([#&#8203;33330](https://github.com/nuxt/nuxt/pull/33330)) - Update `nuxt` command pages ([#&#8203;33336](https://github.com/nuxt/nuxt/pull/33336)) ##### 🏡 Chore - Temporarily disable link to github sponsors ([7e5375390](https://github.com/nuxt/nuxt/commit/7e5375390)) - Update markdownlint ignore ([19fc9abbb](https://github.com/nuxt/nuxt/commit/19fc9abbb)) - Migrate pnpm settings out of `.npmrc` ([14514329b](https://github.com/nuxt/nuxt/commit/14514329b)) - Ignore errors from npmjs ([50febbbba](https://github.com/nuxt/nuxt/commit/50febbbba)) - Lint ([09a16d9df](https://github.com/nuxt/nuxt/commit/09a16d9df)) - **nuxt:** Align global components indent ([#&#8203;33340](https://github.com/nuxt/nuxt/pull/33340)) - Remove tea.yaml ([5f567c79b](https://github.com/nuxt/nuxt/commit/5f567c79b)) - Remove todo comment as resolved ([#&#8203;33389](https://github.com/nuxt/nuxt/pull/33389)) ##### ✅ Tests - **nuxt:** Set locale to en for nuxt-time tests ([#&#8203;33343](https://github.com/nuxt/nuxt/pull/33343)) - Double `gotoPath` timeout in CI ([f1e5a2d4c](https://github.com/nuxt/nuxt/commit/f1e5a2d4c)) ##### 🤖 CI - Add provenance action to check for downgrades in provenance ([5ada6861e](https://github.com/nuxt/nuxt/commit/5ada6861e)) - Pass commit sha when triggering ecosystem ci ([399df6bab](https://github.com/nuxt/nuxt/commit/399df6bab)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Ondrej Brendy ([@&#8203;bandiasek](https://github.com/bandiasek)) - Octavio Araiza ([@&#8203;8ctavio](https://github.com/8ctavio)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Harlan Wilton ([@&#8203;harlan-zw](https://github.com/harlan-zw)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Ben Hong ([@&#8203;bencodezen](https://github.com/bencodezen)) - Daniel Slepov ([@&#8203;imslepov](https://github.com/imslepov)) - Huseyn Guliyev ([@&#8203;husayt](https://github.com/husayt)) - Hillary ([@&#8203;hillaryke](https://github.com/hillaryke)) ### [`v4.1.2`](https://github.com/nuxt/nuxt/releases/tag/v4.1.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.1.1...v4.1.2) > **4.1.2** is a regularly scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v4.1.1...v4.1.2) ##### 🔥 Performance - **kit:** Do not normalise templates in loop if `dst` is present ([#&#8203;33200](https://github.com/nuxt/nuxt/pull/33200)) - **nuxt:** Remove watcher from `hydrate-when` lazy hydration strategy ([#&#8203;33199](https://github.com/nuxt/nuxt/pull/33199)) - **nuxt,schema:** Normalise components + directories more efficiently ([#&#8203;33207](https://github.com/nuxt/nuxt/pull/33207)) - **kit,nuxt:** Reduce unnecessary iteration in nuxt code ([#&#8203;33212](https://github.com/nuxt/nuxt/pull/33212)) - **nuxt:** Skip running lazy hydration transform with filter ([#&#8203;33213](https://github.com/nuxt/nuxt/pull/33213)) ##### 🩹 Fixes - **schema:** Add `pkg-types` to dependencies ([9fe2541ca](https://github.com/nuxt/nuxt/commit/9fe2541ca)) - **nuxt:** Ignore errors when treeshaking composables within other composables ([f99eac516](https://github.com/nuxt/nuxt/commit/f99eac516)) - **nuxt:** Do not tree-shake composables within other composables ([#&#8203;33153](https://github.com/nuxt/nuxt/pull/33153)) - **kit:** Ensure module dependencies are typed correctly ([4568e8451](https://github.com/nuxt/nuxt/commit/4568e8451)) - **nuxt:** Prevent Infinity `backgroundSize` in loading indicator ([#&#8203;33211](https://github.com/nuxt/nuxt/pull/33211)) - **nuxt:** Remove unused `enabled` from components dir options ([#&#8203;32844](https://github.com/nuxt/nuxt/pull/32844)) - **nuxt:** Sync watch request in useAsyncData ([#&#8203;33192](https://github.com/nuxt/nuxt/pull/33192)) - **nuxt:** Move key imports logic after all modules run ([#&#8203;33214](https://github.com/nuxt/nuxt/pull/33214)) ##### 📖 Documentation - Update reference to source dir ([65712297a](https://github.com/nuxt/nuxt/commit/65712297a)) - Update language on bridge head migration ([c9d986889](https://github.com/nuxt/nuxt/commit/c9d986889)) - Update file path for pinia store ([#&#8203;33205](https://github.com/nuxt/nuxt/pull/33205)) - Add `app/` suffix to a few links ([#&#8203;33217](https://github.com/nuxt/nuxt/pull/33217)) ##### 🏡 Chore - Dedupe lockfile ([d054c90d9](https://github.com/nuxt/nuxt/commit/d054c90d9)) - Suppress htmlnano type error ([ff2e77809](https://github.com/nuxt/nuxt/commit/ff2e77809)) - **nuxt:** Unpin tinyglobby ([b9ec6507b](https://github.com/nuxt/nuxt/commit/b9ec6507b)) ##### ✅ Tests - Update bundle size test ([4d9feb00d](https://github.com/nuxt/nuxt/commit/4d9feb00d)) ##### ❤️ Contributors - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Adrien Foulon ([@&#8203;Tofandel](https://github.com/Tofandel)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Антон Стасюк ([@&#8203;11Alone11](https://github.com/11Alone11)) - wuiyang ([@&#8203;wuiyang](https://github.com/wuiyang)) - Revadike ([@&#8203;Revadike](https://github.com/Revadike)) ### [`v4.1.1`](https://github.com/nuxt/nuxt/releases/tag/v4.1.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.1.0...v4.1.1) > **v4.1.1** is a regularly scheduled patch release #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v4.1.0...v4.1.1) ##### 🩹 Fixes - **nuxt:** Correct relative path of auto imported components ([#&#8203;33122](https://github.com/nuxt/nuxt/pull/33122)) - **nuxt:** Prefer accessing `globalThis` over `window` ([#&#8203;33125](https://github.com/nuxt/nuxt/pull/33125)) - **nuxt:** Migrate to AST-aware tree-shaking + route injection ([#&#8203;33128](https://github.com/nuxt/nuxt/pull/33128)) - **nuxt:** Ignore #components import mapping inside packages that use it internally ([#&#8203;33049](https://github.com/nuxt/nuxt/pull/33049)) - **vite:** Remove explicit vite-node configuration of `deps.inline` ([#&#8203;33133](https://github.com/nuxt/nuxt/pull/33133)) - **nuxt:** Include trace in dev-time `useRoute` usage warning ([#&#8203;33039](https://github.com/nuxt/nuxt/pull/33039)) - **kit:** Improve DX by displaying module name when possible ([#&#8203;33137](https://github.com/nuxt/nuxt/pull/33137)) - **nuxt:** Print route middleware path in warning ([#&#8203;33136](https://github.com/nuxt/nuxt/pull/33136)) - **nuxt:** Include core auto-imports from `imports:sources` in override warning ([#&#8203;33050](https://github.com/nuxt/nuxt/pull/33050)) - **nuxt:** Render relative importmap entry path if required ([#&#8203;33146](https://github.com/nuxt/nuxt/pull/33146)) ##### 📖 Documentation - Add `--` to bun create command ([5e661f0ca](https://github.com/nuxt/nuxt/commit/5e661f0ca)) - Add `app/` prefix in lots of cases ([#&#8203;33117](https://github.com/nuxt/nuxt/pull/33117)) - Add JSDoc for `navigateTo` ([#&#8203;21442](https://github.com/nuxt/nuxt/pull/21442)) ##### 🏡 Chore - Correct `rou3` github url ([#&#8203;33130](https://github.com/nuxt/nuxt/pull/33130)) - Include `.ts` extension ([db9d840e1](https://github.com/nuxt/nuxt/commit/db9d840e1)) - Build before releasing ([25f9282a4](https://github.com/nuxt/nuxt/commit/25f9282a4)) ##### 🤖 CI - Remove default discord reactions from thread (more noise than it's worth) ([183913fe2](https://github.com/nuxt/nuxt/commit/183913fe2)) - Rewrite release workflow in ts + support multiple tags ([4469ead82](https://github.com/nuxt/nuxt/commit/4469ead82)) - Pass correct flag ([711037cda](https://github.com/nuxt/nuxt/commit/711037cda)) - Pass tag via env variable ([fb83cd5ba](https://github.com/nuxt/nuxt/commit/fb83cd5ba)) - Drop `4x` tags from releases ([1cd8a6857](https://github.com/nuxt/nuxt/commit/1cd8a6857)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Octavio Araiza ([@&#8203;8ctavio](https://github.com/8ctavio)) - Michael Brevard ([@&#8203;GalacticHypernova](https://github.com/GalacticHypernova)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) ### [`v4.1.0`](https://github.com/nuxt/nuxt/releases/tag/v4.1.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.0.3...v4.1.0) #### 👀 Highlights ##### 🔥 Build and Performance Improvements ##### 🍫 Enhanced Chunk Stability Build stability has been significantly improved with import maps ([#&#8203;33075](https://github.com/nuxt/nuxt/pull/33075)). This prevents cascading hash changes that could invalidate large portions of your build when small changes are made: ```html <!-- Automatically injected import map --> <script type="importmap">{"imports":{"#entry":"/_nuxt/DC5HVSK5.js"}}</script> ``` 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: 1. a component is changed slightly - the hash of its JS chunk changes 2. the page which uses the component has to be updated to reference the new file name 3. the *entry* now has its hash changed because it dynamically imports the page 4. ***every other file*** which imports the entry has its hash changed because the entry file name is changed 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](https://caniuse.com/import-maps), but Nuxt will automatically disable it if you have configured `vite.build.target` to include a browser that doesn't support import maps. And of course you can disable it if needed: ```ts [nuxt.config.ts] export default defineNuxtConfig({ experimental: { entryImportMap: false } }) ``` ##### 🦀 Experimental Rolldown Support Nuxt now includes experimental support for `rolldown-vite` ([#&#8203;31812](https://github.com/nuxt/nuxt/pull/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**: ```json { "overrides": { "vite": "npm:rolldown-vite@latest" } } ``` **pnpm**: ```json { "pnpm": { "overrides": { "vite": "npm:rolldown-vite@latest" } } } ``` **yarn**: ```json { "resolutions": { "vite": "npm:rolldown-vite@latest" } } ``` **bun**: ```json { "overrides": { "vite": "npm:rolldown-vite@latest" } } ``` 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](https://vite.dev/guide/rolldown). > \[!NOTE] > This is experimental and may have some limitations, but offers a glimpse into the future of high-performance bundling in Nuxt. ##### 🧪 Improved Lazy Hydration Lazy hydration macros now work without auto-imports ([#&#8203;33037](https://github.com/nuxt/nuxt/pull/33037)), making them more reliable when component auto-discovery is disabled: ```vue <script setup> // Works even with components: false const LazyComponent = defineLazyHydrationComponent( 'visible', () => import('./MyComponent.vue') ) </script> ``` This ensures that components that are not "discovered" through Nuxt (e.g., because `components` is set to `false` in 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 `rules` property on `NuxtPage` objects ([#&#8203;32897](https://github.com/nuxt/nuxt/pull/32897)), making them more accessible to modules and improving the overall architecture: ```ts // In your module nuxt.hook('pages:extend', pages => { pages.push({ path: '/api-docs', rules: { prerender: true, cors: true, headers: { 'Cache-Control': 's-maxage=31536000' } } }) }) ``` The `defineRouteRules` function 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 ([#&#8203;33063](https://github.com/nuxt/nuxt/pull/33063)). This enables better module integration and ensures proper setup order: ```ts export default defineNuxtModule({ meta: { name: 'my-module', }, moduleDependencies: { 'some-module': { // You can specify a version constraint for the module version: '>=2', // By default moduleDependencies will be added to the list of modules // to be installed by Nuxt unless `optional` is set. optional: true, // Any configuration that should override `nuxt.options`. overrides: {}, // Any configuration that should be set. It will override module defaults but // will not override any configuration set in `nuxt.options`. defaults: {} } }, setup (options, nuxt) { // Your module setup logic } }) ``` This replaces the deprecated `installModule` function 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: `onInstall` and `onUpgrade` ([#&#8203;32397](https://github.com/nuxt/nuxt/pull/32397)). These hooks allow modules to perform additional setup steps when first installed or when upgraded to a new version: ```ts export default defineNuxtModule({ meta: { name: 'my-module', version: '1.0.0', }, onInstall(nuxt) { // This will be run when the module is first installed console.log('Setting up my-module for the first time!') }, onUpgrade(inlineOptions, nuxt, previousVersion) { // This will be run when the module is upgraded console.log(`Upgrading my-module from v${previousVersion}`) } }) ``` The hooks are only triggered when both `name` and `version` are provided in the module metadata. Nuxt uses the `.nuxtrc` file internally to track module versions and trigger the appropriate hooks. (If you haven't come across it before, the `.nuxtrc` file should be committed to version control.) > \[!TIP] > This means module authors can begin implementing their own 'setup wizards' to provide a better experience when some setup is required after installing a module. ##### 🙈 Enhanced File Resolution The new `ignore` option for `resolveFiles` ([#&#8203;32858](https://github.com/nuxt/nuxt/pull/32858)) allows module authors to exclude specific files based on glob patterns: ```ts // Resolve all .vue files except test files const files = await resolveFiles(srcDir, '**/*.vue', { ignore: ['**/*.test.vue', '**/__tests__/**'] }) ``` ##### 📂 Layer Directories Utility A new `getLayerDirectories` utility ([#&#8203;33098](https://github.com/nuxt/nuxt/pull/33098)) provides a clean interface for accessing layer directories without directly accessing private APIs: ```ts import { getLayerDirectories } from '@&#8203;nuxt/kit' const layerDirs = await getLayerDirectories(nuxt) // Access key directories: // layerDirs.app - /app/ by default // layerDirs.appPages - /app/pages by default // layerDirs.server - /server by default // layerDirs.public - /public by default ``` ##### ✨ Developer Experience Improvements ##### 🎱 Simplified Kit Utilities Several kit utilities have been improved for better developer experience: - `addServerImports` now supports single imports ([#&#8203;32289](https://github.com/nuxt/nuxt/pull/32289)): ```ts // Before: required array addServerImports([{ from: 'my-package', name: 'myUtility' }]) // Now: can pass directly addServerImports({ from: 'my-package', name: 'myUtility' }) ``` ##### 🔥 Performance Optimizations This release includes several internal performance optimizations: - Improved route rules cache management ([#&#8203;32877](https://github.com/nuxt/nuxt/pull/32877)) - Optimized app manifest watching ([#&#8203;32880](https://github.com/nuxt/nuxt/pull/32880)) - Better TypeScript processing for page metadata ([#&#8203;32920](https://github.com/nuxt/nuxt/pull/32920)) ##### 🐛 Notable Fixes - Improved `useFetch` hook typing ([#&#8203;32891](https://github.com/nuxt/nuxt/pull/32891)) - Better handling of TypeScript expressions in page metadata ([#&#8203;32902](https://github.com/nuxt/nuxt/pull/32902), [#&#8203;32914](https://github.com/nuxt/nuxt/pull/32914)) - Enhanced route matching and synchronization ([#&#8203;32899](https://github.com/nuxt/nuxt/pull/32899)) - Reduced verbosity of Vue server warnings in development ([#&#8203;33018](https://github.com/nuxt/nuxt/pull/33018)) - Better handling of relative time calculations in `<NuxtTime>` ([#&#8203;32893](https://github.com/nuxt/nuxt/pull/32893)) #### ✅ Upgrading As usual, our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v4.0.3...v4.1.0) ##### 🚀 Enhancements - **kit:** Add `ignore` option to `resolveFiles` ([#&#8203;32858](https://github.com/nuxt/nuxt/pull/32858)) - **kit:** Add `onInstall` and `onUpgrade` module hooks ([#&#8203;32397](https://github.com/nuxt/nuxt/pull/32397)) - **nuxt,vite:** Add experimental support for `rolldown-vite` ([#&#8203;31812](https://github.com/nuxt/nuxt/pull/31812)) - **nuxt:** Extract `defineRouteRules` to page `rules` property ([#&#8203;32897](https://github.com/nuxt/nuxt/pull/32897)) - **nuxt,vite:** Use importmap to increase chunk stability ([#&#8203;33075](https://github.com/nuxt/nuxt/pull/33075)) - **nuxt:** Lazy hydration macros without auto-imports ([#&#8203;33037](https://github.com/nuxt/nuxt/pull/33037)) - **kit,nuxt,schema:** Allow modules to specify dependencies ([#&#8203;33063](https://github.com/nuxt/nuxt/pull/33063)) - **kit,nuxt:** Add `getLayerDirectories` util and refactor to use it ([#&#8203;33098](https://github.com/nuxt/nuxt/pull/33098)) ##### 🔥 Performance - **nuxt:** Clear inline route rules cache when pages change ([#&#8203;32877](https://github.com/nuxt/nuxt/pull/32877)) - **nuxt:** Stop watching app manifest once a change has been detected ([#&#8203;32880](https://github.com/nuxt/nuxt/pull/32880)) ##### 🩹 Fixes - **nuxt:** Handle `satisfies` in page augmentation ([#&#8203;32902](https://github.com/nuxt/nuxt/pull/32902)) - **nuxt:** Type response in `useFetch` hooks ([#&#8203;32891](https://github.com/nuxt/nuxt/pull/32891)) - **nuxt:** Add TS parenthesis and as expression for page meta extraction ([#&#8203;32914](https://github.com/nuxt/nuxt/pull/32914)) - **nuxt:** Use correct unit thresholds for relative time ([#&#8203;32893](https://github.com/nuxt/nuxt/pull/32893)) - **nuxt:** Handle uncached current build manifests ([#&#8203;32913](https://github.com/nuxt/nuxt/pull/32913)) - **kit:** Resolve directories in `resolvePath` and normalize file extensions ([#&#8203;32857](https://github.com/nuxt/nuxt/pull/32857)) - **schema,vite:** Bump `requestTimeout` + allow configuration ([#&#8203;32874](https://github.com/nuxt/nuxt/pull/32874)) - **nuxt:** Deep merge extracted route meta ([#&#8203;32887](https://github.com/nuxt/nuxt/pull/32887)) - **nuxt:** Do not expose app components until fully resolved ([#&#8203;32993](https://github.com/nuxt/nuxt/pull/32993)) - **kit:** Only exclude `node_modules/` if no custom `srcDir` ([#&#8203;32987](https://github.com/nuxt/nuxt/pull/32987)) - **nuxt:** Transform ts before page meta extraction ([#&#8203;32920](https://github.com/nuxt/nuxt/pull/32920)) - **nuxt:** Compare final matched routes when syncing `route` object ([#&#8203;32899](https://github.com/nuxt/nuxt/pull/32899)) - **nuxt:** Make vue server warnings much less verbose in dev mode ([#&#8203;33018](https://github.com/nuxt/nuxt/pull/33018)) - **schema:** Allow disabling cssnano/autoprefixer postcss plugins ([#&#8203;33016](https://github.com/nuxt/nuxt/pull/33016)) - **kit:** Ensure local layers are prioritised alphabetically ([#&#8203;33030](https://github.com/nuxt/nuxt/pull/33030)) - **kit,nuxt:** Expose global types to vue compiler ([#&#8203;33026](https://github.com/nuxt/nuxt/pull/33026)) - **deps:** Bump devalue ([#&#8203;33072](https://github.com/nuxt/nuxt/pull/33072)) - **nuxt:** Support config type inference for `defineNuxtModule().with()` ([#&#8203;33081](https://github.com/nuxt/nuxt/pull/33081)) - **nuxt:** Search for colliding names in route children ([b58c139d2](https://github.com/nuxt/nuxt/commit/b58c139d2)) - **nuxt:** Delete `nuxtApp._runningTransition` on resolve ([#&#8203;33025](https://github.com/nuxt/nuxt/pull/33025)) - **nuxt:** Add validation for nuxt island reviver key ([#&#8203;33069](https://github.com/nuxt/nuxt/pull/33069)) ##### 💅 Refactors - **nuxt:** Simplify page segment parsing ([#&#8203;32901](https://github.com/nuxt/nuxt/pull/32901)) - **nuxt:** Remove unnecessary `async/await` in `afterEach` ([#&#8203;32999](https://github.com/nuxt/nuxt/pull/32999)) - **vite:** Simplify inline chunk iteration ([6f4da1b8c](https://github.com/nuxt/nuxt/commit/6f4da1b8c)) - **kit,nuxt,ui-templates,vite:** Address deprecations + improve regexp perf ([#&#8203;33093](https://github.com/nuxt/nuxt/pull/33093)) ##### 📖 Documentation - Switch example to use vitest projects ([#&#8203;32863](https://github.com/nuxt/nuxt/pull/32863)) - Update testing `setupTimeout` and add `teardownTimeout` ([#&#8203;32868](https://github.com/nuxt/nuxt/pull/32868)) - Update `webRoot` to use new app directory ([df7177bff](https://github.com/nuxt/nuxt/commit/df7177bff)) - Add middleware to layers guide ([6fc25ff79](https://github.com/nuxt/nuxt/commit/6fc25ff79)) - Use `app/` directory in layer guide ([eee55ea41](https://github.com/nuxt/nuxt/commit/eee55ea41)) - Add documentation for `--nightly` command ([#&#8203;32907](https://github.com/nuxt/nuxt/pull/32907)) - Update package information in roadmap section ([#&#8203;32881](https://github.com/nuxt/nuxt/pull/32881)) - Add more info about nuxt spa loader element attributes ([#&#8203;32871](https://github.com/nuxt/nuxt/pull/32871)) - Update `features.inlineStyles` default value ([6ff3fbebb](https://github.com/nuxt/nuxt/commit/6ff3fbebb)) - Correct filename in example ([#&#8203;33000](https://github.com/nuxt/nuxt/pull/33000)) - Add more information about using `useRoute` and accessing route in middleware ([#&#8203;33004](https://github.com/nuxt/nuxt/pull/33004)) - Avoid variable shadowing in locale example ([#&#8203;33031](https://github.com/nuxt/nuxt/pull/33031)) - Add documentation for module lifecycle hooks ([#&#8203;33115](https://github.com/nuxt/nuxt/pull/33115)) ##### 🏡 Chore - **config:** Migrate renovate config ([#&#8203;32861](https://github.com/nuxt/nuxt/pull/32861)) - Remove stray test file ([ca84285cc](https://github.com/nuxt/nuxt/commit/ca84285cc)) - Ignore webpagetest.org when scanning links ([6c974f0be](https://github.com/nuxt/nuxt/commit/6c974f0be)) - Add `type: 'module'` in playground ([#&#8203;33099](https://github.com/nuxt/nuxt/pull/33099)) ##### ✅ Tests - Add failing test for link component duplication ([#&#8203;32792](https://github.com/nuxt/nuxt/pull/32792)) - Simplify module hook tests ([#&#8203;32950](https://github.com/nuxt/nuxt/pull/32950)) - Refactor stubbing of `import.meta.dev` ([#&#8203;33023](https://github.com/nuxt/nuxt/pull/33023)) - Use `findWorkspaceDir` rather than relative paths to repo root ([a6dec5bd9](https://github.com/nuxt/nuxt/commit/a6dec5bd9)) - Improve router test for global transitions ([5d783662c](https://github.com/nuxt/nuxt/commit/5d783662c)) - Use `expect.poll` ([53fb61d5d](https://github.com/nuxt/nuxt/commit/53fb61d5d)) - Use `expect.poll` instead of `expectWithPolling` ([357492ca7](https://github.com/nuxt/nuxt/commit/357492ca7)) - Use `vi.waitUntil` instead of custom retry logic ([611e66a47](https://github.com/nuxt/nuxt/commit/611e66a47)) ##### 🤖 CI - Remove double set of tests for docs prs ([6bc9dccf4](https://github.com/nuxt/nuxt/commit/6bc9dccf4)) - Add workflow for discord team discussion threads ([bc656a24d](https://github.com/nuxt/nuxt/commit/bc656a24d)) - Fix some syntax issues with discord + github integrations ([f5f01b8c1](https://github.com/nuxt/nuxt/commit/f5f01b8c1)) - Use token for adding issue to project ([66afbe0a2](https://github.com/nuxt/nuxt/commit/66afbe0a2)) - Use discord bot to create thread automatically ([618a3cd40](https://github.com/nuxt/nuxt/commit/618a3cd40)) - Only use discord bot ([bfd30d8ce](https://github.com/nuxt/nuxt/commit/bfd30d8ce)) - Update format of discord message ([eb79a2f07](https://github.com/nuxt/nuxt/commit/eb79a2f07)) - Try bolding entire line ([c66124d7b](https://github.com/nuxt/nuxt/commit/c66124d7b)) - Oops ([38644b933](https://github.com/nuxt/nuxt/commit/38644b933)) - Add delay after adding each reaction ([ecb49019f](https://github.com/nuxt/nuxt/commit/ecb49019f)) - Use last lts node version for testing ([e06e37d02](https://github.com/nuxt/nuxt/commit/e06e37d02)) - Try npm trusted publisher ([85f1e05eb](https://github.com/nuxt/nuxt/commit/85f1e05eb)) - Use npm trusted publisher for main releases ([abf5d9e9f](https://github.com/nuxt/nuxt/commit/abf5d9e9f)) - Change wording ([#&#8203;32979](https://github.com/nuxt/nuxt/pull/32979)) - Add github ai moderator ([#&#8203;33077](https://github.com/nuxt/nuxt/pull/33077)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - kyumoon ([@&#8203;kyumoon](https://github.com/kyumoon)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Rich Harris ([@&#8203;Rich-Harris](https://github.com/Rich-Harris)) - mustafa60x ([@&#8203;mustafa60x](https://github.com/mustafa60x)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Amitav Chris Mostafa ([@&#8203;semibroiled](https://github.com/semibroiled)) - Romain Hamel ([@&#8203;romhml](https://github.com/romhml)) - Jacky Lam ([@&#8203;jackylamhk](https://github.com/jackylamhk)) - Mukund Shah ([@&#8203;mukundshah](https://github.com/mukundshah)) - Luke Nelson ([@&#8203;luc122c](https://github.com/luc122c)) - letianpailove ([@&#8203;letianpailove](https://github.com/letianpailove)) - Erwan Jugand ([@&#8203;erwanjugand](https://github.com/erwanjugand)) - Alexander ([@&#8203;TheColorman](https://github.com/TheColorman)) - Ryota Watanabe ([@&#8203;wattanx](https://github.com/wattanx)) - Yizack Rangel ([@&#8203;Yizack](https://github.com/Yizack)) ### [`v4.0.3`](https://github.com/nuxt/nuxt/releases/tag/v4.0.3) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.0.2...v4.0.3) > 4.0.3 is a regularly scheduled patch release. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v4.0.2...v4.0.3) ##### 🔥 Performance - **kit:** Get absolute path from `tinyglobby` in `resolveFiles` ([#&#8203;32846](https://github.com/nuxt/nuxt/pull/32846)) ##### 🩹 Fixes - **nuxt:** Do not throw undefined `error` variable ([#&#8203;32807](https://github.com/nuxt/nuxt/pull/32807)) - **vite:** Include tsconfig references during `typeCheck` ([#&#8203;32835](https://github.com/nuxt/nuxt/pull/32835)) - **nuxt:** Add sourcemap path transformation for client builds ([#&#8203;32313](https://github.com/nuxt/nuxt/pull/32313)) - **nuxt:** Add warning for lazy-hydration missing prefix ([#&#8203;32832](https://github.com/nuxt/nuxt/pull/32832)) - **nuxt:** Trigger call once navigation even when no suspense ([#&#8203;32827](https://github.com/nuxt/nuxt/pull/32827)) - **webpack:** Handle `null` result from webpack call ([84816d8a1](https://github.com/nuxt/nuxt/commit/84816d8a1)) - **kit,nuxt:** Use `reverseResolveAlias` for better errors ([#&#8203;32853](https://github.com/nuxt/nuxt/pull/32853)) ##### 📖 Documentation - Fix publicDir alias ([#&#8203;32841](https://github.com/nuxt/nuxt/pull/32841)) - Mention `bun.lock` for lockfile ([#&#8203;32820](https://github.com/nuxt/nuxt/pull/32820)) - Add a section about augmenting types with TS project references ([#&#8203;32843](https://github.com/nuxt/nuxt/pull/32843)) - Improve explanation of global middleware ([#&#8203;32855](https://github.com/nuxt/nuxt/pull/32855)) ##### 🏡 Chore - Update reproduction help text links ([#&#8203;32803](https://github.com/nuxt/nuxt/pull/32803)) - Update pnpm ignored build scripts ([#&#8203;32849](https://github.com/nuxt/nuxt/pull/32849)) - Improve internal types ([052b98a35](https://github.com/nuxt/nuxt/commit/052b98a35)) ##### ✅ Tests - Move tests for `defineNuxtComponent` out of e2e test ([#&#8203;32848](https://github.com/nuxt/nuxt/pull/32848)) ##### 🤖 CI - Move nightly releases into different concurrency group ([664041be7](https://github.com/nuxt/nuxt/commit/664041be7)) ##### ❤️ Contributors - RDistinct ([@&#8203;RDistinct](https://github.com/RDistinct)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Oskar Lebuda ([@&#8203;OskarLebuda](https://github.com/OskarLebuda)) - Peter Budai ([@&#8203;peterbud](https://github.com/peterbud)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) ### [`v4.0.2`](https://github.com/nuxt/nuxt/releases/tag/v4.0.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.0.1...v4.0.2) > 4.0.2 is the next patch release. > > **Timetable**: 28 July. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v4.0.1...v4.0.2) ##### 🩹 Fixes - **nuxt:** Provide typed slots for `<ClientOnly>` and `<DevOnly>` ([#&#8203;32707](https://github.com/nuxt/nuxt/pull/32707)) - **kit,nuxt,schema:** Add trailing slash to some dir aliases ([#&#8203;32755](https://github.com/nuxt/nuxt/pull/32755)) - **nuxt:** Constrain global `defineAppConfig` type ([#&#8203;32760](https://github.com/nuxt/nuxt/pull/32760)) - **kit:** Include module types in `app` context ([#&#8203;32758](https://github.com/nuxt/nuxt/pull/32758)) - **nuxt:** Include source base url for remote islands ([#&#8203;32772](https://github.com/nuxt/nuxt/pull/32772)) - **vite:** Use vite node server to transform requests ([#&#8203;32791](https://github.com/nuxt/nuxt/pull/32791)) - **kit:** Use `mlly` to parse module paths ([#&#8203;32386](https://github.com/nuxt/nuxt/pull/32386)) - **nuxt:** Execute all plugins after error rendering error.vue ([#&#8203;32744](https://github.com/nuxt/nuxt/pull/32744)) ##### 📖 Documentation - Update Nuxt installation command to use `npm create nuxt@latest` ([#&#8203;32726](https://github.com/nuxt/nuxt/pull/32726)) - Add AI-assisted contribution guidelines ([#&#8203;32725](https://github.com/nuxt/nuxt/pull/32725)) - Hydration best practice ([#&#8203;32746](https://github.com/nuxt/nuxt/pull/32746)) - Add example for module `.with()` ([#&#8203;32757](https://github.com/nuxt/nuxt/pull/32757)) - Replace dead Vue Router docs links ([#&#8203;32779](https://github.com/nuxt/nuxt/pull/32779)) - Update nightly version references ([#&#8203;32776](https://github.com/nuxt/nuxt/pull/32776)) ##### 🏡 Chore - Update reproduction links for bug-report template ([#&#8203;32722](https://github.com/nuxt/nuxt/pull/32722)) - Update `unbuild` and use absolute path in dev stubs ([#&#8203;32759](https://github.com/nuxt/nuxt/pull/32759)) ##### ✅ Tests - Ignore vue `module.exports` export ([c4317e057](https://github.com/nuxt/nuxt/commit/c4317e057)) ##### 🤖 CI - Release `pkg.pr.new` for `main`/`3.x` branches as well ([b0f289550](https://github.com/nuxt/nuxt/commit/b0f289550)) - Apply `3x` tag to latest v3 release ([5f6c27509](https://github.com/nuxt/nuxt/commit/5f6c27509)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Bobby ([@&#8203;xanzhu](https://github.com/xanzhu)) - Dog ([@&#8203;dgxo](https://github.com/dgxo)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Stephen Jason Wang ([@&#8203;stephenjason89](https://github.com/stephenjason89)) - Mateleo ([@&#8203;Mateleo](https://github.com/Mateleo)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) ### [`v4.0.1`](https://github.com/nuxt/nuxt/releases/tag/v4.0.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v4.0.0...v4.0.1) > **v4.0.1** is the first regularly scheduled patch release of v4 > > It will be followed up later this week with v3.18, which will backport a number of the features/fixes from Nuxt v4 to v3. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.7...v4.0.1) ##### 🩹 Fixes - **nuxt:** Add `nuxt.schema` files to node tsconfig context ([#&#8203;32644](https://github.com/nuxt/nuxt/pull/32644)) - **nuxt,vite:** Unpin `nitropack` ([ed5ad64ad](https://github.com/nuxt/nuxt/commit/ed5ad64ad)) - **nuxt:** Expose shared aliases within `shared/` dir ([#&#8203;32676](https://github.com/nuxt/nuxt/pull/32676)) ##### 💅 Refactors - **nuxt:** Pass file language directly to parser options ([#&#8203;32665](https://github.com/nuxt/nuxt/pull/32665)) ##### 📖 Documentation - Remove rc tag in guide ([232b14e2f](https://github.com/nuxt/nuxt/commit/232b14e2f)) - Remove `-t v4` tag from getting started ([343f59235](https://github.com/nuxt/nuxt/commit/343f59235)) - Added new Shared folder to the example of v4 folder structure ([#&#8203;32630](https://github.com/nuxt/nuxt/pull/32630)) - Update nuxt.new links to v4 ([#&#8203;32639](https://github.com/nuxt/nuxt/pull/32639)) - Improve grammar ([#&#8203;32640](https://github.com/nuxt/nuxt/pull/32640)) - Typos ([#&#8203;32567](https://github.com/nuxt/nuxt/pull/32567)) - Fix abbreviation ([#&#8203;32613](https://github.com/nuxt/nuxt/pull/32613)) - Reference `noUncheckedIndexedAccess` rule change in v4 guide ([#&#8203;32643](https://github.com/nuxt/nuxt/pull/32643)) - Add missing import in alias config example ([#&#8203;32648](https://github.com/nuxt/nuxt/pull/32648)) - Correct alias for local fonts in styling guide ([#&#8203;32680](https://github.com/nuxt/nuxt/pull/32680)) - Add best practices section ([#&#8203;31609](https://github.com/nuxt/nuxt/pull/31609)) - Fix links to Nitro docs ([#&#8203;32691](https://github.com/nuxt/nuxt/pull/32691)) ##### 📦 Build - **vite:** Specify `nitropack` types as external ([39be1b3a9](https://github.com/nuxt/nuxt/commit/39be1b3a9)) ##### 🏡 Chore - Handle missing commit details ([5018ed23a](https://github.com/nuxt/nuxt/commit/5018ed23a)) ##### 🤖 CI - Trigger website redeploy on main branch ([#&#8203;32695](https://github.com/nuxt/nuxt/pull/32695)) ##### ❤️ Contributors - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Alois Sečkár ([@&#8203;AloisSeckar](https://github.com/AloisSeckar)) - Hashim Kalam ([@&#8203;hashimkalam](https://github.com/hashimkalam)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Peter Buglavecz ([@&#8203;buglavecz](https://github.com/buglavecz)) - Haythem Frikha ([@&#8203;Flamenate](https://github.com/Flamenate)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Thomas ([@&#8203;ThomasWT](https://github.com/ThomasWT)) ### [`v4.0.0`](https://github.com/nuxt/nuxt/releases/tag/v4.0.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.20.2...v4.0.0) **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: - **Cleaner project organization** with the new `app/` directory structure - **Smarter data fetching** - we've taken the opportunity to address some inconsistencies and improve performance with the data layer - **Better TypeScript support** with project-based separation between the different contexts in your project - app code, server code, `shared/` folder, and configuration - **Faster CLI and development** with adoption of internal sockets and a faster CLI Why 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](https://nuxt.com/docs/4.x/getting-started/upgrade) 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: ```bash my-nuxt-app/ ├─ app/ │ ├─ components/ │ ├─ pages/ │ ├─ layouts/ │ └─ app.vue ├─ public/ ├─ shared/ ├─ server/ └─ nuxt.config.ts ``` 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. > \[!TIP] > **Don't want to migrate?** That's totally fine! Nuxt will detect your existing structure and keep working exactly as before. ##### 🎨 Updated UI templates Nuxt’s starter templates have an all new look, with improved accessibility, default titles, and template polish ([#&#8203;27843](https://github.com/nuxt/nuxt/pull/27843)). ##### 🔄 Smarter data fetching We've made `useAsyncData` and `useFetch` work 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. > \[!TIP] > With Nuxt 4, you will only need one `tsconfig.json` file in your project root! 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`. - **Faster cold starts** - Development server startup is noticeably faster - **Node.js compile cache** - Automatic reuse of the v8 compile cache - **Native file watching** - Uses `fs.watch` APIs for fewer system resources - **Socket-based communication** - The CLI and Vite dev server now communicate via internal sockets instead of network ports, reducing overhead — particularly on Windows These 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 2 compatibility has been removed from `@nuxt/kit`. (This will particularly affect module authors.) - Some legacy utilities and deprecated features have been cleaned up. - The new TypeScript setup might surface some type issues that were hidden before. - A few modules might need further updates for full Nuxt 4 compatibility. 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: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/codemod-com/codemod) to automate many, though not all, migration steps: ```bash npx codemod@latest nuxt/4/migration-recipe ``` ##### 3. Test and adjust Run your tests, check that everything builds correctly, and fix any issues that come up. The [upgrade guide](/docs/4.x/getting-started/upgrade) 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 ([#&#8203;4753](https://github.com/nuxt/nuxt/issues/4753)), a first-party accessibility module ([#&#8203;23255](https://github.com/nuxt/nuxt/issues/23255)), built-in fetch caching strategies ([#&#8203;26017](https://github.com/nuxt/nuxt/issues/26017)), more strongly typed fetch calls (landing in Nitro v3), dynamic route discovery ([#&#8203;32196](https://github.com/nuxt/nuxt/issues/32196)), multi-app support ([#&#8203;21635](https://github.com/nuxt/nuxt/issues/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](https://github.com/nuxt/nuxt/compare/v3.17.7...v4.0.0) ##### 🚀 Enhancements - **ui-templates:** Update template branding for v4 ([#&#8203;27843](https://github.com/nuxt/nuxt/pull/27843)) - **deps:** Upgrade to latest versions of c12, jiti and unbuild ([#&#8203;27995](https://github.com/nuxt/nuxt/pull/27995)) - **kit:** Reimplement cjs utils using `mlly` ([#&#8203;28012](https://github.com/nuxt/nuxt/pull/28012)) - **nuxt:** Generate basic jsdoc for module config entry ([#&#8203;27689](https://github.com/nuxt/nuxt/pull/27689)) - **schema:** Split dev/prod build directories ([#&#8203;28594](https://github.com/nuxt/nuxt/pull/28594)) - **nuxt:** Cache vue app build outputs ([#&#8203;28726](https://github.com/nuxt/nuxt/pull/28726)) - **deps:** Update dependency vite to v6 (main) ([#&#8203;30042](https://github.com/nuxt/nuxt/pull/30042)) - **nuxt:** Add integration with chrome devtools workspaces ([#&#8203;32084](https://github.com/nuxt/nuxt/pull/32084)) - **kit:** Support single import in `addServerImports` ([#&#8203;32289](https://github.com/nuxt/nuxt/pull/32289)) - **nuxt:** Add `onWatcherCleanup` to imports presets ([#&#8203;32396](https://github.com/nuxt/nuxt/pull/32396)) - **kit,nuxt,schema:** Separate ts projects for node/app/nitro ([#&#8203;30665](https://github.com/nuxt/nuxt/pull/30665)) - **nuxt:** Support lazy hydration macros ([#&#8203;31192](https://github.com/nuxt/nuxt/pull/31192)) - **nuxt:** Export `<NuxtTime>` prop types ([#&#8203;32547](https://github.com/nuxt/nuxt/pull/32547)) - **nuxt:** Add route announcer to default app.vue ([#&#8203;32621](https://github.com/nuxt/nuxt/pull/32621)) - **nuxt:** Expose page routes to nitro for o11y ([#&#8203;32617](https://github.com/nuxt/nuxt/pull/32617)) ##### 🔥 Performance - **nuxt:** ⚠️ Don't call `render:html` for server islands ([#&#8203;27889](https://github.com/nuxt/nuxt/pull/27889)) - **vite:** Don't write stub manifest for legacy bundler ([#&#8203;27957](https://github.com/nuxt/nuxt/pull/27957)) - **kit:** Update env expansion regex to match nitro ([#&#8203;30766](https://github.com/nuxt/nuxt/pull/30766)) - **vite:** Communicate with vite-node via internal socket ([#&#8203;32417](https://github.com/nuxt/nuxt/pull/32417)) ##### 🩹 Fixes - **schema,vite:** ⚠️ Do not allow configuring vite dev bundler ([#&#8203;27707](https://github.com/nuxt/nuxt/pull/27707)) - **schema:** ⚠️ Default to `compatibilityVersion: 4` ([#&#8203;27710](https://github.com/nuxt/nuxt/pull/27710)) - **nuxt:** ⚠️ Emit absolute paths in `builder:watch` hook ([#&#8203;27709](https://github.com/nuxt/nuxt/pull/27709)) - **nuxt:** ⚠️ Improve default `asyncData` value behaviour ([#&#8203;27718](https://github.com/nuxt/nuxt/pull/27718)) - **nuxt:** ⚠️ Remove old experimental options ([#&#8203;27749](https://github.com/nuxt/nuxt/pull/27749)) - **kit:** ⚠️ Support loading nuxt 4 and drop support for <=2 ([#&#8203;27837](https://github.com/nuxt/nuxt/pull/27837)) - **nuxt:** ⚠️ Remove `__NUXT__` after hydration ([#&#8203;27745](https://github.com/nuxt/nuxt/pull/27745)) - **ui-templates:** Add default title back ([3415241a6](https://github.com/nuxt/nuxt/commit/3415241a6)) - **kit:** ⚠️ Drop support for building nuxt 2 projects ([1beddba6a](https://github.com/nuxt/nuxt/commit/1beddba6a)) - **nuxt:** ⚠️ Bump internal majorVersion to `4` ([7aae4033b](https://github.com/nuxt/nuxt/commit/7aae4033b)) - **kit:** Mark `resolvePath` utils as sync ([655e1473d](https://github.com/nuxt/nuxt/commit/655e1473d)) - **kit:** Revert change to `tryResolveModule` ([2d136e04c](https://github.com/nuxt/nuxt/commit/2d136e04c)) - **kit:** Add back `requireModule` and `tryRequireModule` ([#&#8203;28013](https://github.com/nuxt/nuxt/pull/28013)) - **nuxt:** Hide unhandled error messages in prod ([#&#8203;28156](https://github.com/nuxt/nuxt/pull/28156)) - **nuxt:** Add `useScriptCrisp` scripts stub ([0c3cc4cf3](https://github.com/nuxt/nuxt/commit/0c3cc4cf3)) - **nuxt:** ⚠️ Remove unused `globalName` property ([#&#8203;28391](https://github.com/nuxt/nuxt/pull/28391)) - **nuxt:** Use static import for `updateAppConfig` in HMR ([#&#8203;28349](https://github.com/nuxt/nuxt/pull/28349)) - **vite:** Write dev manifest when `ssr: false` ([#&#8203;28488](https://github.com/nuxt/nuxt/pull/28488)) - **kit,nuxt,schema:** ⚠️ Remove other support for nuxt2/bridge ([#&#8203;28936](https://github.com/nuxt/nuxt/pull/28936)) - **webpack:** Only insert dynamic require plugin when building ([b619b35e9](https://github.com/nuxt/nuxt/commit/b619b35e9)) - **nuxt:** Guard `window` access ([d874726ff](https://github.com/nuxt/nuxt/commit/d874726ff)) - **nuxt:** Remove unneeded subpath import ([18a6ef1ca](https://github.com/nuxt/nuxt/commit/18a6ef1ca)) - **webpack:** Handle new webpack chunk format ([d293c06d2](https://github.com/nuxt/nuxt/commit/d293c06d2)) - **kit:** ⚠️ Do not check compatibility for nuxt version < 2.13 ([f94cda4c8](https://github.com/nuxt/nuxt/commit/f94cda4c8)) - **ui-templates:** Fix examples link and add bluesky ([#&#8203;30866](https://github.com/nuxt/nuxt/pull/30866)) - **vite:** Use `resolveId` from `vite-node` to resolve deps ([#&#8203;30922](https://github.com/nuxt/nuxt/pull/30922)) - **nuxt:** Import `isEqual` from main `ohash` export ([3ec1a1e5e](https://github.com/nuxt/nuxt/commit/3ec1a1e5e)) - **vite:** Don't set `output.preserveModules` ([ce49734aa](https://github.com/nuxt/nuxt/commit/ce49734aa)) - **nuxt:** Ignore `#app-manifest` import in dev mode ([#&#8203;31539](https://github.com/nuxt/nuxt/pull/31539)) - **nuxt:** Ensure layer array-type config is merged in order ([#&#8203;31507](https://github.com/nuxt/nuxt/pull/31507)) - **schema:** Turn off `purgeCachedData` until v4 ([7aa3a01ae](https://github.com/nuxt/nuxt/commit/7aa3a01ae)) - **schema:** Re-enable `purgeCachedData` by default ([06745604c](https://github.com/nuxt/nuxt/commit/06745604c)) - **webpack:** Expand dynamic require regexp to match new pattern ([62e700daa](https://github.com/nuxt/nuxt/commit/62e700daa)) - **nuxt:** Add back missing reset of `.execute` ([d79e14612](https://github.com/nuxt/nuxt/commit/d79e14612)) - **nuxt,schema:** ⚠️ Remove support for `compatibilityVersion: 3` ([#&#8203;32255](https://github.com/nuxt/nuxt/pull/32255)) - **kit,nuxt,schema,vite:** ⚠️ Remove support for some deprecated options ([#&#8203;32257](https://github.com/nuxt/nuxt/pull/32257)) - **nuxt:** ⚠️ Don't rerun asyncdata w/ existing data in `useAsyncData` ([#&#8203;32170](https://github.com/nuxt/nuxt/pull/32170)) - **nuxt:** Scan nitro handlers before writing types ([a3698c08b](https://github.com/nuxt/nuxt/commit/a3698c08b)) - **nuxt:** Force asyncData `errorValue`/`value` to be undefined ([7e4eac655](https://github.com/nuxt/nuxt/commit/7e4eac655)) - **nuxt:** ⚠️ Remove public and assets aliases ([#&#8203;32119](https://github.com/nuxt/nuxt/pull/32119)) - **webpack:** Update dynamic require pattern ([#&#8203;32278](https://github.com/nuxt/nuxt/pull/32278)) - **schema:** ⚠️ Remove top level generate option ([#&#8203;32355](https://github.com/nuxt/nuxt/pull/32355)) - **ui-templates:** Add aria tag on Nuxt logo ([#&#8203;32429](https://github.com/nuxt/nuxt/pull/32429)) - **nuxt:** Augment runtime config in server context ([#&#8203;32482](https://github.com/nuxt/nuxt/pull/32482)) - **kit:** Do not skip layer with defined `srcDir` ([#&#8203;32487](https://github.com/nuxt/nuxt/pull/32487)) - **deps:** Upgrade to rc version of `@nuxt/cli` ([#&#8203;32488](https://github.com/nuxt/nuxt/pull/32488)) - **kit:** Ensure legacy `tsConfig` doesn't exclude too many types ([#&#8203;32528](https://github.com/nuxt/nuxt/pull/32528)) - **kit:** Ensure types of module entrypoints are in node project ([#&#8203;32551](https://github.com/nuxt/nuxt/pull/32551)) - **kit:** Add layer `app/` and `server/` folders into tsconfigs ([#&#8203;32592](https://github.com/nuxt/nuxt/pull/32592)) - **schema:** Disable changing compat version ([#&#8203;32600](https://github.com/nuxt/nuxt/pull/32600)) - **nuxt:** Allow modules to add to `typescript.hoist` ([#&#8203;32601](https://github.com/nuxt/nuxt/pull/32601)) - **nuxt:** Include shared declarations in `tsconfig.server.json` ([#&#8203;32594](https://github.com/nuxt/nuxt/pull/32594)) - **nuxt:** Retain old data when computed key changes ([#&#8203;32616](https://github.com/nuxt/nuxt/pull/32616)) - **nuxt:** ⚠️ Bump `compatibilityDate` to `2025-07-15` ([e35e1ccb9](https://github.com/nuxt/nuxt/commit/e35e1ccb9)) - **nuxt:** Only use `scrollBehaviorType` for hash scrolling ([#&#8203;32622](https://github.com/nuxt/nuxt/pull/32622)) ##### 💅 Refactors - **kit,nuxt:** ⚠️ Drop nuxt 2 + ejs template compile support ([#&#8203;27706](https://github.com/nuxt/nuxt/pull/27706)) - **nuxt:** ⚠️ Move `#app/components/layout` -> `#app/components/nuxt-layout` ([209e81b60](https://github.com/nuxt/nuxt/commit/209e81b60)) - **kit,nuxt,vite,webpack:** ⚠️ Remove legacy require utils ([#&#8203;28008](https://github.com/nuxt/nuxt/pull/28008)) - **nuxt:** Simplify check of `dedupe` option ([#&#8203;28151](https://github.com/nuxt/nuxt/pull/28151)) - **nuxt:** Use direct import of `installNuxtModule` ([501ccc375](https://github.com/nuxt/nuxt/commit/501ccc375)) - **kit:** Remove internal function ([#&#8203;32189](https://github.com/nuxt/nuxt/pull/32189)) - **schema:** ⚠️ Remove config.schema.json export + defaults ([#&#8203;32254](https://github.com/nuxt/nuxt/pull/32254)) - **nuxt:** Migrate to `oxc-walker` ([#&#8203;32250](https://github.com/nuxt/nuxt/pull/32250)) - **nuxt,schema:** Use oxc for `onPrehydrate` transform ([#&#8203;32045](https://github.com/nuxt/nuxt/pull/32045)) ##### 📖 Documentation - Indicate what `useAsyncData` must return ([#&#8203;28259](https://github.com/nuxt/nuxt/pull/28259)) - Update `deep` default for `useAsyncData` & `useFetch` ([#&#8203;28564](https://github.com/nuxt/nuxt/pull/28564)) - Fix link to issue ([4d13f1027](https://github.com/nuxt/nuxt/commit/4d13f1027)) - Improve wording for `deep` option ([bec85dfcd](https://github.com/nuxt/nuxt/commit/bec85dfcd)) - Update v4 docs with new folder structure ([#&#8203;32348](https://github.com/nuxt/nuxt/pull/32348)) - Update `.nuxtignore` examples for v4 structure ([#&#8203;32489](https://github.com/nuxt/nuxt/pull/32489)) - Add reference to `useNuxtData` in data fetching composable pages ([#&#8203;32589](https://github.com/nuxt/nuxt/pull/32589)) - Temporarily use v4 template for v4 docs ([850a879d3](https://github.com/nuxt/nuxt/commit/850a879d3)) - Document the --modules flag in the init command ([#&#8203;32599](https://github.com/nuxt/nuxt/pull/32599)) ##### 📦 Build - **deps:** Bump esbuild from 0.23.1 to 0.25.0 ([#&#8203;31247](https://github.com/nuxt/nuxt/pull/31247)) ##### 🏡 Chore - Manage update to `vite-plugin-checker` separately ([02d46dd3d](https://github.com/nuxt/nuxt/commit/02d46dd3d)) - Update docs typecheck command ([#&#8203;28433](https://github.com/nuxt/nuxt/pull/28433)) - Improve accuracy of 4.x changelog ([#&#8203;28706](https://github.com/nuxt/nuxt/pull/28706)) - Bump package versions internally to v4 ([16fab7778](https://github.com/nuxt/nuxt/commit/16fab7778)) - **kit:** Fix regressed version v4 ([a1c052057](https://github.com/nuxt/nuxt/commit/a1c052057)) - Dedupe lockfile ([f14ef6bc9](https://github.com/nuxt/nuxt/commit/f14ef6bc9)) - Update once more ([4d22f4d5a](https://github.com/nuxt/nuxt/commit/4d22f4d5a)) - Specify workspace `engines.node` compatibility ([a26322f5f](https://github.com/nuxt/nuxt/commit/a26322f5f)) - Remove special treatment for typescript ([08766a0cd](https://github.com/nuxt/nuxt/commit/08766a0cd)) - Reenable quarantine for webpack/memfs (for 3.x benefit) ([9cb94e55e](https://github.com/nuxt/nuxt/commit/9cb94e55e)) - Remove extra dep ([f0ec34298](https://github.com/nuxt/nuxt/commit/f0ec34298)) - Add back `nuxi` ([9aa4c7c3b](https://github.com/nuxt/nuxt/commit/9aa4c7c3b)) - Remove stray `nuxi` version again ([#&#8203;30547](https://github.com/nuxt/nuxt/pull/30547)) - Fix lockfile ([7d345c714](https://github.com/nuxt/nuxt/commit/7d345c714)) - Remove second version of vitest ([#&#8203;30868](https://github.com/nuxt/nuxt/pull/30868)) - Ignore `oxc-parser` updates temporarily ([1cd0fb5cb](https://github.com/nuxt/nuxt/commit/1cd0fb5cb)) - Ignore `nitro/templates` directory ([e531477f8](https://github.com/nuxt/nuxt/commit/e531477f8)) - Fix ui-templates build ([c8a1b9e80](https://github.com/nuxt/nuxt/commit/c8a1b9e80)) - Mkdir for ui-templates ([853408a1e](https://github.com/nuxt/nuxt/commit/853408a1e)) - Add webpack resolution ([088bcd459](https://github.com/nuxt/nuxt/commit/088bcd459)) - Migrate playground + test fixtures to new directory format ([#&#8203;32357](https://github.com/nuxt/nuxt/pull/32357)) - **schema:** Remove duplicated documentation ([349f75447](https://github.com/nuxt/nuxt/commit/349f75447)) ##### ✅ Tests - Remove unused experimental options ([6d971ddc9](https://github.com/nuxt/nuxt/commit/6d971ddc9)) - Add additional `attw` test for built packages ([#&#8203;30206](https://github.com/nuxt/nuxt/pull/30206)) - Add minimal pages fixture ([#&#8203;30457](https://github.com/nuxt/nuxt/pull/30457)) - Update bundle size assertion ([f458153d9](https://github.com/nuxt/nuxt/commit/f458153d9)) - Update bundle size assertion ([4cce6bf8d](https://github.com/nuxt/nuxt/commit/4cce6bf8d)) - Benchmark minimal fixture instead ([#&#8203;31174](https://github.com/nuxt/nuxt/pull/31174)) - Normalise scoped css + pass logger to `configResolved` ([8d3bd4f9f](https://github.com/nuxt/nuxt/commit/8d3bd4f9f)) - More precise asyncData tests ([023fb13eb](https://github.com/nuxt/nuxt/commit/023fb13eb)) - Extend timeout when waiting for hydration ([f34c6c240](https://github.com/nuxt/nuxt/commit/f34c6c240)) - Also assert status ([4f6bdf755](https://github.com/nuxt/nuxt/commit/4f6bdf755)) ##### 🤖 CI - Bump node v22 ([#&#8203;30251](https://github.com/nuxt/nuxt/pull/30251)) - Run workflows on merge groups ([ff37ad9df](https://github.com/nuxt/nuxt/commit/ff37ad9df)) - Do not invoke semantic-pr test on merge groups ([fadd618d1](https://github.com/nuxt/nuxt/commit/fadd618d1)) ##### ⚠️ Breaking Changes - **nuxt:** ⚠️ Don't call `render:html` for server islands ([#&#8203;27889](https://github.com/nuxt/nuxt/pull/27889)) - **schema,vite:** ⚠️ Do not allow configuring vite dev bundler ([#&#8203;27707](https://github.com/nuxt/nuxt/pull/27707)) - **schema:** ⚠️ Default to `compatibilityVersion: 4` ([#&#8203;27710](https://github.com/nuxt/nuxt/pull/27710)) - **nuxt:** ⚠️ Emit absolute paths in `builder:watch` hook ([#&#8203;27709](https://github.com/nuxt/nuxt/pull/27709)) - **nuxt:** ⚠️ Improve default `asyncData` value behaviour ([#&#8203;27718](https://github.com/nuxt/nuxt/pull/27718)) - **nuxt:** ⚠️ Remove old experimental options ([#&#8203;27749](https://github.com/nuxt/nuxt/pull/27749)) - **kit:** ⚠️ Support loading nuxt 4 and drop support for <=2 ([#&#8203;27837](https://github.com/nuxt/nuxt/pull/27837)) - **nuxt:** ⚠️ Remove `__NUXT__` after hydration ([#&#8203;27745](https://github.com/nuxt/nuxt/pull/27745)) - **kit:** ⚠️ Drop support for building nuxt 2 projects ([1beddba6a](https://github.com/nuxt/nuxt/commit/1beddba6a)) - **nuxt:** ⚠️ Bump internal majorVersion to `4` ([7aae4033b](https://github.com/nuxt/nuxt/commit/7aae4033b)) - **nuxt:** ⚠️ Remove unused `globalName` property ([#&#8203;28391](https://github.com/nuxt/nuxt/pull/28391)) - **kit,nuxt,schema:** ⚠️ Remove other support for nuxt2/bridge ([#&#8203;28936](https://github.com/nuxt/nuxt/pull/28936)) - **kit:** ⚠️ Do not check compatibility for nuxt version < 2.13 ([f94cda4c8](https://github.com/nuxt/nuxt/commit/f94cda4c8)) - **nuxt,schema:** ⚠️ Remove support for `compatibilityVersion: 3` ([#&#8203;32255](https://github.com/nuxt/nuxt/pull/32255)) - **kit,nuxt,schema,vite:** ⚠️ Remove support for some deprecated options ([#&#8203;32257](https://github.com/nuxt/nuxt/pull/32257)) - **nuxt:** ⚠️ Don't rerun asyncdata w/ existing data in `useAsyncData` ([#&#8203;32170](https://github.com/nuxt/nuxt/pull/32170)) - **nuxt:** ⚠️ Remove public and assets aliases ([#&#8203;32119](https://github.com/nuxt/nuxt/pull/32119)) - **schema:** ⚠️ Remove top level generate option ([#&#8203;32355](https://github.com/nuxt/nuxt/pull/32355)) - **nuxt:** ⚠️ Bump `compatibilityDate` to `2025-07-15` ([e35e1ccb9](https://github.com/nuxt/nuxt/commit/e35e1ccb9)) - **kit,nuxt:** ⚠️ Drop nuxt 2 + ejs template compile support ([#&#8203;27706](https://github.com/nuxt/nuxt/pull/27706)) - **nuxt:** ⚠️ Move `#app/components/layout` -> `#app/components/nuxt-layout` ([209e81b60](https://github.com/nuxt/nuxt/commit/209e81b60)) - **kit,nuxt,vite,webpack:** ⚠️ Remove legacy require utils ([#&#8203;28008](https://github.com/nuxt/nuxt/pull/28008)) - **schema:** ⚠️ Remove config.schema.json export + defaults ([#&#8203;32254](https://github.com/nuxt/nuxt/pull/32254)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Connor Pearson ([@&#8203;cjpearson](https://github.com/cjpearson)) - Stephen Jason Wang ([@&#8203;stephenjason89](https://github.com/stephenjason89)) - dwood-csi ([@&#8203;dwood-csi](https://github.com/dwood-csi)) - Alex ([@&#8203;hywax](https://github.com/hywax)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Marko ([@&#8203;aussieboi](https://github.com/aussieboi)) - Igor Kononenko ([@&#8203;igorexa34314](https://github.com/igorexa34314)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Michael Brevard ([@&#8203;GalacticHypernova](https://github.com/GalacticHypernova)) - Andrej Adamcik ([@&#8203;adamcikado](https://github.com/adamcikado)) - dependabot\[bot] ([@&#8203;dependabot](https://github.com/dependabot)\[bot]) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Yauheni Vasiukevich ([@&#8203;EvgenyWas](https://github.com/EvgenyWas)) - [@&#8203;beer](https://github.com/beer) ([@&#8203;iiio2](https://github.com/iiio2)) - Anthony Fu ([@&#8203;antfu](https://github.com/antfu)) - pan93412 ([@&#8203;pan93412](https://github.com/pan93412)) - Tobias Diez ([@&#8203;tobiasdiez](https://github.com/tobiasdiez)) - Aleksei Nagovitsyn ([@&#8203;al3xnag](https://github.com/al3xnag)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) ### [`v3.20.2`](https://github.com/nuxt/nuxt/releases/tag/v3.20.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.20.1...v3.20.2) > 3.20.2 is the next patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe --channel=v3 ``` 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. > \[!NOTE] > This will only work if you *already have* a version of `@nuxt/cli` which has the `--channel` flag. If this does not work, you can instead run `npx nuxi@latest` for the initial upgrade. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v3.20.1...v3.20.2) ##### 🩹 Fixes - **nitro:** Do not show pretty error handler when testing ([cc75ce409](https://github.com/nuxt/nuxt/commit/cc75ce409)) - **nuxt:** Generate valid references for component declaration items ([#&#8203;33388](https://github.com/nuxt/nuxt/pull/33388)) - **nuxt:** Sync internal route before calling `page:finish` hook ([#&#8203;33707](https://github.com/nuxt/nuxt/pull/33707)) - **nitro:** Ensure html is a string before injecting error handler ([6f51a25e9](https://github.com/nuxt/nuxt/commit/6f51a25e9)) - **nitro:** Include layer server directories in `tsconfig.server.json` ([#&#8203;33510](https://github.com/nuxt/nuxt/pull/33510)) - **nuxt:** Ensure deduped async data executions return latest promise ([#&#8203;33740](https://github.com/nuxt/nuxt/pull/33740)) - **kit,nuxt:** Type + respect `moduleDependencies` by meta name ([#&#8203;33774](https://github.com/nuxt/nuxt/pull/33774)) - **nuxt,schema:** Ignore `.d.vue.ts` declarations ([9a6a770ab](https://github.com/nuxt/nuxt/commit/9a6a770ab)) - **kit,nuxt:** Protect against resolved nuxt module subpath ([#&#8203;33767](https://github.com/nuxt/nuxt/pull/33767)) - **nuxt:** Re-execute `callOnce` during HMR ([#&#8203;33810](https://github.com/nuxt/nuxt/pull/33810)) - **nuxt:** Resolve watch callback after reactive key change in `useAsyncData` ([#&#8203;33802](https://github.com/nuxt/nuxt/pull/33802)) - **nuxt:** Escape HTML in development error page stack trace ([#&#8203;33820](https://github.com/nuxt/nuxt/pull/33820)) - **kit:** Do not add resolved `rootDir` to cached layer config ([#&#8203;33779](https://github.com/nuxt/nuxt/pull/33779)) - **kit,schema:** Add `moduleDependencies` -> `installModule` ([#&#8203;33689](https://github.com/nuxt/nuxt/pull/33689)) ##### 💅 Refactors - **nuxt:** Improve type safety within `callOnce` function ([#&#8203;33825](https://github.com/nuxt/nuxt/pull/33825)) ##### 📖 Documentation - Split directory structure and re-order guides (v3) ([#&#8203;33690](https://github.com/nuxt/nuxt/pull/33690)) - Fix link ([016ef66e3](https://github.com/nuxt/nuxt/commit/016ef66e3)) - Add hints release ([#&#8203;33701](https://github.com/nuxt/nuxt/pull/33701)) - Fix link to vitest globals config ([#&#8203;33702](https://github.com/nuxt/nuxt/pull/33702)) - Fix 404 link ([5543b7cf7](https://github.com/nuxt/nuxt/commit/5543b7cf7)) - Text consistency ([#&#8203;33709](https://github.com/nuxt/nuxt/pull/33709)) - Type `error` as non-optional prop ([#&#8203;33763](https://github.com/nuxt/nuxt/pull/33763)) ##### 🏡 Chore - Update pnpm to 10.21 and enable trust policy ([1cb55efc0](https://github.com/nuxt/nuxt/commit/1cb55efc0)) - Revert pnpm trust policy and restore provenance action ([103ae1351](https://github.com/nuxt/nuxt/commit/103ae1351)) - Update markdownlint config to ignore mdc issues ([d4933e26e](https://github.com/nuxt/nuxt/commit/d4933e26e)) - Pin to single version of unstorage ([619956e7f](https://github.com/nuxt/nuxt/commit/619956e7f)) ##### ✅ Tests - Add `patchProp` and `nodeOps` to excluded Vue helpers ([#&#8203;33754](https://github.com/nuxt/nuxt/pull/33754)) - Use fake timers for watch params test ([58607fbea](https://github.com/nuxt/nuxt/commit/58607fbea)) - Update test for v3 defaults ([daa002638](https://github.com/nuxt/nuxt/commit/daa002638)) ##### 🤖 CI - Add `--pnpm` flag to correctly publish prerelease ([#&#8203;33688](https://github.com/nuxt/nuxt/pull/33688)) - Update action lint config ([#&#8203;33710](https://github.com/nuxt/nuxt/pull/33710)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Konstantin Telyakov ([@&#8203;kTelyakov](https://github.com/kTelyakov)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Dheeraj Joshi ([@&#8203;dheeraj3587](https://github.com/dheeraj3587)) - Edwin Samodra ([@&#8203;edwinsamodra](https://github.com/edwinsamodra)) - edison ([@&#8203;edison1105](https://github.com/edison1105)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - pierreoa ([@&#8203;pierreoa](https://github.com/pierreoa)) - Maxime Pauvert ([@&#8203;maximepvrt](https://github.com/maximepvrt)) ### [`v3.20.1`](https://github.com/nuxt/nuxt/releases/tag/v3.20.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.20.0...v3.20.1) > 3.20.1 is the next patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe --channel=v3 ``` 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](https://github.com/nuxt/nuxt/compare/v3.20.0...v3.20.1) ##### 🩹 Fixes - **vite:** Unset `optimizeDeps.include` for server environment ([#&#8203;33550](https://github.com/nuxt/nuxt/pull/33550)) - **kit,nuxt,schema:** Deprecate `ImportPresetWithDeprecation` ([#&#8203;33596](https://github.com/nuxt/nuxt/pull/33596)) - **nuxt:** Correct warning message for prefetch/noPrefetch conflict ([#&#8203;33617](https://github.com/nuxt/nuxt/pull/33617)) - **nitro:** Remove `<nuxt-error-overlay>` iframe border ([#&#8203;33625](https://github.com/nuxt/nuxt/pull/33625)) - **vite:** Use rolldown replace only in build ([#&#8203;33615](https://github.com/nuxt/nuxt/pull/33615)) - **nitro:** Use directory paths in `moduleEntryPaths` ([#&#8203;33628](https://github.com/nuxt/nuxt/pull/33628)) - **nitro:** Start error overlay minimized based on status code ([#&#8203;33658](https://github.com/nuxt/nuxt/pull/33658)) - **vite:** Ensure `optimizeDeps` config is applied before other plugins ([#&#8203;33586](https://github.com/nuxt/nuxt/pull/33586)) - **nuxt:** Respect layer priority order for scanned components ([#&#8203;33654](https://github.com/nuxt/nuxt/pull/33654)) - **nuxt:** Process prerender routes on `pages:resolved` ([#&#8203;33662](https://github.com/nuxt/nuxt/pull/33662)) - **nuxt:** Remove abort signal event listeners after render ([#&#8203;33665](https://github.com/nuxt/nuxt/pull/33665)) - **nuxt:** Cleanup event listener with cleanup signal ([#&#8203;33667](https://github.com/nuxt/nuxt/pull/33667)) - **vite:** Respect vite proxy in dev middleware ([#&#8203;33670](https://github.com/nuxt/nuxt/pull/33670)) ##### 💅 Refactors - **kit,nitro,nuxt,schema,vite:** Explicitly import process/performance ([#&#8203;33650](https://github.com/nuxt/nuxt/pull/33650)) ##### 📖 Documentation - Fix typo in eslint flat config description ([#&#8203;33569](https://github.com/nuxt/nuxt/pull/33569)) - Add signal support to useAsyncData examples ([#&#8203;33601](https://github.com/nuxt/nuxt/pull/33601)) - Note that `cookieStore` is `true` by default ([#&#8203;33572](https://github.com/nuxt/nuxt/pull/33572)) - Document `pending` as alias of `status === 'pending'` ([#&#8203;33221](https://github.com/nuxt/nuxt/pull/33221)) - Clarify route middleware doesn't affect API routes ([#&#8203;33643](https://github.com/nuxt/nuxt/pull/33643)) - Improve docs for `useHead`/`useHydration`/`useLazy*` ([#&#8203;33626](https://github.com/nuxt/nuxt/pull/33626)) - Typo ([#&#8203;33655](https://github.com/nuxt/nuxt/pull/33655)) ##### 🏡 Chore - Add `verifyDepsBeforeRun: install` ([#&#8203;33603](https://github.com/nuxt/nuxt/pull/33603)) - Reduce redirects in docs links ([bbdc72e35](https://github.com/nuxt/nuxt/commit/bbdc72e35)) - Lint docs ([352bdbc93](https://github.com/nuxt/nuxt/commit/352bdbc93)) - Remove verify deps before run ([e9e1c5b97](https://github.com/nuxt/nuxt/commit/e9e1c5b97)) ##### 🤖 CI - Disable cache in release action ([885df65f4](https://github.com/nuxt/nuxt/commit/885df65f4)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Peter Budai ([@&#8203;peterbud](https://github.com/peterbud)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Max ([@&#8203;onmax](https://github.com/onmax)) - 纸鹿/Zhilu ([@&#8203;L33Z22L11](https://github.com/L33Z22L11)) - Hinata Oishi ([@&#8203;te19oishi](https://github.com/te19oishi)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Maxime Pauvert ([@&#8203;maximepvrt](https://github.com/maximepvrt)) - Raed Abdennadher ([@&#8203;RaedAbr](https://github.com/RaedAbr)) ### [`v3.20.0`](https://github.com/nuxt/nuxt/releases/tag/v3.20.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.19.3...v3.20.0) > **3.20.0** is the next minor release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe --channel=v3 ``` 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](https://github.com/nuxt/nuxt/compare/v3.19.3...v3.20.0) ##### 🚀 Enhancements - **nuxt:** Allow specifying component `declarationPath` ([#&#8203;33419](https://github.com/nuxt/nuxt/pull/33419)) - **kit:** Add `extensions` option for `resolveModule` ([#&#8203;33328](https://github.com/nuxt/nuxt/pull/33328)) - **nuxt:** Add abortController option to `useAsyncData` ([#&#8203;32531](https://github.com/nuxt/nuxt/pull/32531)) - **nuxt:** Display youch error page w/ user error page in dev ([#&#8203;33359](https://github.com/nuxt/nuxt/pull/33359)) - **nuxt:** Experimental typescript plugin support ([#&#8203;33314](https://github.com/nuxt/nuxt/pull/33314)) - **nuxt,schema:** Extract asyncData handlers to chunks ([#&#8203;33131](https://github.com/nuxt/nuxt/pull/33131)) - **kit:** Add `setGlobalHead` utility ([#&#8203;33512](https://github.com/nuxt/nuxt/pull/33512)) - **kit,vite:** Allow enabling vite environment api ([#&#8203;33492](https://github.com/nuxt/nuxt/pull/33492)) ##### 🔥 Performance - **nuxt:** Precompute renderer dependencies at build time ([#&#8203;33361](https://github.com/nuxt/nuxt/pull/33361)) - **kit,schema:** Remove some unnecessary dependencies ([bdf34c263](https://github.com/nuxt/nuxt/commit/bdf34c263)) ##### 🩹 Fixes - **nuxt:** Preserve hash with redirecting based on `routeRules` ([#&#8203;33222](https://github.com/nuxt/nuxt/pull/33222)) - **kit:** Safely cleanup `loadNuxtConfig` in concurrent calls ([#&#8203;33420](https://github.com/nuxt/nuxt/pull/33420)) - **nuxt:** Allow object-format `href` in `<NuxtLink>` ([b97ae2f70](https://github.com/nuxt/nuxt/commit/b97ae2f70)) - **nuxt:** Remove `mergeModels` from auto imports ([#&#8203;33344](https://github.com/nuxt/nuxt/pull/33344)) - **nuxt:** Add back `shortPath` property ([#&#8203;33384](https://github.com/nuxt/nuxt/pull/33384)) - **nuxt:** Do not allow native attrs to shadow nuxt link props ([0981990a7](https://github.com/nuxt/nuxt/commit/0981990a7)) - **nuxt:** Remove `declarationPath` from component dirs ([e384ba3cb](https://github.com/nuxt/nuxt/commit/e384ba3cb)) - **nuxt:** Preserve root route in `isPrerendered` check ([#&#8203;33476](https://github.com/nuxt/nuxt/pull/33476)) - **nuxt:** Exempt webpack vfs from pkg lookup ([4df1e8275](https://github.com/nuxt/nuxt/commit/4df1e8275)) - **nitro:** Exempt nightly release from import protections ([272d9abbe](https://github.com/nuxt/nuxt/commit/272d9abbe)) - **webpack,rspack:** Preserve prerender + nitro flags in server builds ([#&#8203;33503](https://github.com/nuxt/nuxt/pull/33503)) - **nuxt:** Support component auto-imports as arguments of `h()` ([#&#8203;33509](https://github.com/nuxt/nuxt/pull/33509)) - **vite:** Prevent assignment for rolldown's replacement plugin ([#&#8203;33526](https://github.com/nuxt/nuxt/pull/33526)) - **nuxt:** Use sha256 hash for prerender cache keys ([#&#8203;33505](https://github.com/nuxt/nuxt/pull/33505)) - **nuxt:** Add `NuxtTime` relative time `numeric` prop ([#&#8203;33552](https://github.com/nuxt/nuxt/pull/33552)) - **nuxt:** Add `NuxtTime` relative time `relativeStyle` prop ([#&#8203;33557](https://github.com/nuxt/nuxt/pull/33557)) - **nuxt:** Handle arrays in app config correctly during HMR ([#&#8203;33555](https://github.com/nuxt/nuxt/pull/33555)) ##### 💅 Refactors - Remove obsolete `shortPath` property ([#&#8203;33384](https://github.com/nuxt/nuxt/pull/33384)) - **kit:** Extract trace utilities ([ddaedfa51](https://github.com/nuxt/nuxt/commit/ddaedfa51)) - **nuxt,vite,webpack:** Allow builders to augment types ([#&#8203;33427](https://github.com/nuxt/nuxt/pull/33427)) - **schema:** Deprecate `extend`, `extendConfig`, and `configResolved` hooks ([932a80dc6](https://github.com/nuxt/nuxt/commit/932a80dc6)) - **nitro,nuxt:** Extract `@nuxt/nitro-server` package ([#&#8203;33462](https://github.com/nuxt/nuxt/pull/33462)) - **nuxt:** Use `RouteLocationNormalizedLoadedGeneric` internally ([aa211fb4f](https://github.com/nuxt/nuxt/commit/aa211fb4f)) - **vite:** Make vite plugins environment-compatible ([#&#8203;33445](https://github.com/nuxt/nuxt/pull/33445)) ##### 📖 Documentation - Add nuxt module `addServerPlugin` note ([#&#8203;33409](https://github.com/nuxt/nuxt/pull/33409)) - Remove deprecated node version ([#&#8203;33411](https://github.com/nuxt/nuxt/pull/33411)) - Update `declarationPath` in `addComponent` ([#&#8203;33380](https://github.com/nuxt/nuxt/pull/33380)) - Add some notes/deprecations for vite hooks ([2c6912d2f](https://github.com/nuxt/nuxt/commit/2c6912d2f)) - Fix incorrect ESM module field info ([#&#8203;33451](https://github.com/nuxt/nuxt/pull/33451)) - Recommend `getLayerDirectories()` instead of `nuxt.options._layers` ([#&#8203;33484](https://github.com/nuxt/nuxt/pull/33484)) - Add docs for `moduleDependencies` ([#&#8203;33499](https://github.com/nuxt/nuxt/pull/33499)) - Pin codemod to v0.18.7 for migration recipe ([#&#8203;33522](https://github.com/nuxt/nuxt/pull/33522)) ##### 🏡 Chore - Migrate gitpod to ona ([#&#8203;33159](https://github.com/nuxt/nuxt/pull/33159)) - Use native node to run `test:prepare` ([cbad63c02](https://github.com/nuxt/nuxt/commit/cbad63c02)) - Do not use native node to run `test:prepare` ([672c09423](https://github.com/nuxt/nuxt/commit/672c09423)) - Update valid semantic scopes ([4ca29168b](https://github.com/nuxt/nuxt/commit/4ca29168b)) - Ignore nitro templates ([ec59aceeb](https://github.com/nuxt/nuxt/commit/ec59aceeb)) - Remove `vue-demi` from `ignoredBuiltDependencies` ([#&#8203;33494](https://github.com/nuxt/nuxt/pull/33494)) - Update vscode url ([#&#8203;33360](https://github.com/nuxt/nuxt/pull/33360)) - Correct jsdoc location for function used as parameters ([#&#8203;33507](https://github.com/nuxt/nuxt/pull/33507)) - Remove code comment ([#&#8203;33515](https://github.com/nuxt/nuxt/pull/33515)) - Patch changelogen for large numbers of commits ([b6530b5b6](https://github.com/nuxt/nuxt/commit/b6530b5b6)) - Filter out commits before last tag when constructing changelog ([257049712](https://github.com/nuxt/nuxt/commit/257049712)) - Ignore `@rollup/plugin-commonjs` ([c2bd323b8](https://github.com/nuxt/nuxt/commit/c2bd323b8)) - Pin `@rollup/plugin-commonjs` ([a524522ea](https://github.com/nuxt/nuxt/commit/a524522ea)) ##### ✅ Tests - Update runtime test to use `asyncDataDefaults.errorValue` ([b6f1c9b0d](https://github.com/nuxt/nuxt/commit/b6f1c9b0d)) - Refactor suite to use common matrix utils ([#&#8203;33483](https://github.com/nuxt/nuxt/pull/33483)) - Update typed router test ([c55db2854](https://github.com/nuxt/nuxt/commit/c55db2854)) ##### 🤖 CI - Publish `@nuxt/nitro-server` on pkg-pr-new ([d37ef17b0](https://github.com/nuxt/nuxt/commit/d37ef17b0)) - Remove nitro-server publish until v4.2 is released ([e34c2f52f](https://github.com/nuxt/nuxt/commit/e34c2f52f)) - For now, use tag push to trigger release ([0705b835f](https://github.com/nuxt/nuxt/commit/0705b835f)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Trung Dang ([@&#8203;NamesMT](https://github.com/NamesMT)) - 纸鹿/Zhilu ([@&#8203;L33Z22L11](https://github.com/L33Z22L11)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Max ([@&#8203;onmax](https://github.com/onmax)) - Octavio Araiza ([@&#8203;8ctavio](https://github.com/8ctavio)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - DipakHalkude ([@&#8203;DipakHalkude](https://github.com/DipakHalkude)) - Aleksander Błaszkiewicz ([@&#8203;ablaszkiewicz](https://github.com/ablaszkiewicz)) ### [`v3.19.3`](https://github.com/nuxt/nuxt/releases/tag/v3.19.3) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.19.2...v3.19.3) > **3.19.3** is a regularly scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.19.2...v3.19.3) ##### 🔥 Performance - **vite:** Use rolldown's replace plugin when applicable ([#&#8203;33258](https://github.com/nuxt/nuxt/pull/33258)) ##### 🩹 Fixes - **nuxt:** Make lazy component types compatible with `h` ([#&#8203;33046](https://github.com/nuxt/nuxt/pull/33046)) - **vite:** Deduplicate inlined server style chunks ([#&#8203;33308](https://github.com/nuxt/nuxt/pull/33308)) - **nuxt:** Support `head` option on `useHead` ([#&#8203;33318](https://github.com/nuxt/nuxt/pull/33318)) - **nuxt:** Do not relativise importmap if `cdnURL` is set ([#&#8203;33333](https://github.com/nuxt/nuxt/pull/33333)) - **nuxt:** Resolve aliases in `imports.dirs` ([#&#8203;33334](https://github.com/nuxt/nuxt/pull/33334)) - **nuxt:** Add missing element/vnode props for `<NuxtLink>` ([#&#8203;33335](https://github.com/nuxt/nuxt/pull/33335)) - **nuxt:** Do not generate server placeholder components ([#&#8203;33345](https://github.com/nuxt/nuxt/pull/33345)) - **nuxt:** Dedupe generated component names ([#&#8203;33346](https://github.com/nuxt/nuxt/pull/33346)) - **webpack:** Test watch instance before closing it ([3314bc9a1](https://github.com/nuxt/nuxt/commit/3314bc9a1)) - **nuxt:** Correctly handle island rendering error ([#&#8203;33302](https://github.com/nuxt/nuxt/pull/33302)) - **nuxt:** Support `v-slot:fallback` longform syntax in `<DevOnly>` ([#&#8203;33368](https://github.com/nuxt/nuxt/pull/33368)) - **nuxt:** Support `typeFrom` when generating auto-import type templates ([#&#8203;33373](https://github.com/nuxt/nuxt/pull/33373)) - **nuxt:** Don't trigger scroll when changing trailing slash ([#&#8203;33358](https://github.com/nuxt/nuxt/pull/33358)) - **nuxt:** Add stubs for new scripts from `@nuxt/scripts` ([057ade490](https://github.com/nuxt/nuxt/commit/057ade490)) - **nuxt:** Prevent duplicate execution on key change in `useAsyncData` ([#&#8203;33325](https://github.com/nuxt/nuxt/pull/33325)) - **nuxt:** Make middleware `_path` property configurable for HMR ([#&#8203;33379](https://github.com/nuxt/nuxt/pull/33379)) - **nuxt:** Handle non-immediate `useAsyncData` with different key on ssr ([#&#8203;33341](https://github.com/nuxt/nuxt/pull/33341)) ##### 💅 Refactors - **nuxt:** Improve implementation of error composables ([#&#8203;33234](https://github.com/nuxt/nuxt/pull/33234)) - **nuxt:** Resolve path of `typed-router.d.ts` early for consistency ([#&#8203;33285](https://github.com/nuxt/nuxt/pull/33285)) - **nuxt:** Place `filename` into `componentsIslandsTemplate` definition ([#&#8203;33394](https://github.com/nuxt/nuxt/pull/33394)) - **nuxt,vite:** Use environment-api compatible plugins ([#&#8203;33403](https://github.com/nuxt/nuxt/pull/33403)) ##### 📖 Documentation - Update usage instructions for Windows users ([#&#8203;33284](https://github.com/nuxt/nuxt/pull/33284)) - Remove d suffix in example ([#&#8203;33298](https://github.com/nuxt/nuxt/pull/33298)) - Move directory structure to top-level ([#&#8203;33299](https://github.com/nuxt/nuxt/pull/33299)) - Add `3.x` prefix to all internal links ([0fef864d6](https://github.com/nuxt/nuxt/commit/0fef864d6)) - Add information about `useFetch` reactivity ([#&#8203;33317](https://github.com/nuxt/nuxt/pull/33317)) - Lint code samples within docs ([#&#8203;33271](https://github.com/nuxt/nuxt/pull/33271)) - Note `prepare` command `NODE_ENV` behavior ([#&#8203;33330](https://github.com/nuxt/nuxt/pull/33330)) - Update `nuxt` command pages ([#&#8203;33336](https://github.com/nuxt/nuxt/pull/33336)) ##### 🏡 Chore - Update bundle size test ([15334d0c1](https://github.com/nuxt/nuxt/commit/15334d0c1)) - Temporarily disable link to github sponsors ([53b02251f](https://github.com/nuxt/nuxt/commit/53b02251f)) - Update markdownlint ignore ([557656e54](https://github.com/nuxt/nuxt/commit/557656e54)) - Migrate pnpm settings out of `.npmrc` ([101682a6b](https://github.com/nuxt/nuxt/commit/101682a6b)) - Ignore errors from npmjs ([d56790347](https://github.com/nuxt/nuxt/commit/d56790347)) - **nuxt:** Align global components indent ([#&#8203;33340](https://github.com/nuxt/nuxt/pull/33340)) - Remove tea.yaml ([8b2188848](https://github.com/nuxt/nuxt/commit/8b2188848)) - Remove todo comment as resolved ([#&#8203;33389](https://github.com/nuxt/nuxt/pull/33389)) - Downgrade nitropack in vite ([3419f3414](https://github.com/nuxt/nuxt/commit/3419f3414)) ##### ✅ Tests - **nuxt:** Set locale to en for nuxt-time tests ([#&#8203;33343](https://github.com/nuxt/nuxt/pull/33343)) - Double `gotoPath` timeout in CI ([9d336cc76](https://github.com/nuxt/nuxt/commit/9d336cc76)) ##### 🤖 CI - Add provenance action to check for downgrades in provenance ([18ab6e5fa](https://github.com/nuxt/nuxt/commit/18ab6e5fa)) - Pass commit sha when triggering ecosystem ci ([7b2949a3c](https://github.com/nuxt/nuxt/commit/7b2949a3c)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Florian Heuberger ([@&#8203;Flo0806](https://github.com/Flo0806)) - Ondrej Brendy ([@&#8203;bandiasek](https://github.com/bandiasek)) - Octavio Araiza ([@&#8203;8ctavio](https://github.com/8ctavio)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Harlan Wilton ([@&#8203;harlan-zw](https://github.com/harlan-zw)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Ben Hong ([@&#8203;bencodezen](https://github.com/bencodezen)) - Huseyn Guliyev ([@&#8203;husayt](https://github.com/husayt)) ### [`v3.19.2`](https://github.com/nuxt/nuxt/releases/tag/v3.19.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.19.1...v3.19.2) > **3.19.2** is a regularly scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.19.1...v3.19.2) ##### 🔥 Performance - **kit:** Do not normalise templates in loop if `dst` is present ([#&#8203;33200](https://github.com/nuxt/nuxt/pull/33200)) - **nuxt:** Remove watcher from `hydrate-when` lazy hydration strategy ([#&#8203;33199](https://github.com/nuxt/nuxt/pull/33199)) - **nuxt,schema:** Normalise components + directories more efficiently ([#&#8203;33207](https://github.com/nuxt/nuxt/pull/33207)) - **kit,nuxt:** Reduce unnecessary iteration in nuxt code ([#&#8203;33212](https://github.com/nuxt/nuxt/pull/33212)) - **nuxt:** Skip running lazy hydration transform with filter ([#&#8203;33213](https://github.com/nuxt/nuxt/pull/33213)) ##### 🩹 Fixes - **schema:** Add `pkg-types` to dependencies ([a6e5dd756](https://github.com/nuxt/nuxt/commit/a6e5dd756)) - **nuxt:** Ignore errors when treeshaking composables within other composables ([e3e42ac77](https://github.com/nuxt/nuxt/commit/e3e42ac77)) - **nuxt:** Do not tree-shake composables within other composables ([#&#8203;33153](https://github.com/nuxt/nuxt/pull/33153)) - **kit:** Ensure module dependencies are typed correctly ([ea16d182a](https://github.com/nuxt/nuxt/commit/ea16d182a)) - **nuxt:** Prevent Infinity `backgroundSize` in loading indicator ([#&#8203;33211](https://github.com/nuxt/nuxt/pull/33211)) - **nuxt:** Remove unused `enabled` from components dir options ([#&#8203;32844](https://github.com/nuxt/nuxt/pull/32844)) - **nuxt:** Sync watch request in useAsyncData ([#&#8203;33192](https://github.com/nuxt/nuxt/pull/33192)) - **nuxt:** Move key imports logic after all modules run ([#&#8203;33214](https://github.com/nuxt/nuxt/pull/33214)) ##### 📖 Documentation - Update language on bridge head migration ([32e76f609](https://github.com/nuxt/nuxt/commit/32e76f609)) ##### 🏡 Chore - **nuxt:** Unpin tinyglobby ([1811db080](https://github.com/nuxt/nuxt/commit/1811db080)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Adrien Foulon ([@&#8203;Tofandel](https://github.com/Tofandel)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Антон Стасюк ([@&#8203;11Alone11](https://github.com/11Alone11)) - wuiyang ([@&#8203;wuiyang](https://github.com/wuiyang)) ### [`v3.19.1`](https://github.com/nuxt/nuxt/releases/tag/v3.19.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.19.0...v3.19.1) > **v3.19.1** is a regularly scheduled patch release #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.19.0...v3.19.1) ##### 🩹 Fixes - **nuxt:** Correct relative path of auto imported components ([#&#8203;33122](https://github.com/nuxt/nuxt/pull/33122)) - **nuxt:** Prefer accessing `globalThis` over `window` ([#&#8203;33125](https://github.com/nuxt/nuxt/pull/33125)) - **nuxt:** Migrate to AST-aware tree-shaking + route injection ([#&#8203;33128](https://github.com/nuxt/nuxt/pull/33128)) - **nuxt:** Ignore #components import mapping inside packages that use it internally ([#&#8203;33049](https://github.com/nuxt/nuxt/pull/33049)) - **vite:** Remove explicit vite-node configuration of `deps.inline` ([#&#8203;33133](https://github.com/nuxt/nuxt/pull/33133)) - **nuxt:** Include trace in dev-time `useRoute` usage warning ([#&#8203;33039](https://github.com/nuxt/nuxt/pull/33039)) - **nuxt:** Print route middleware path in warning ([#&#8203;33136](https://github.com/nuxt/nuxt/pull/33136)) - **nuxt:** Include core auto-imports from `imports:sources` in override warning ([#&#8203;33050](https://github.com/nuxt/nuxt/pull/33050)) - **nuxt:** Render relative importmap entry path if required ([#&#8203;33146](https://github.com/nuxt/nuxt/pull/33146)) ##### 📖 Documentation - Add documentation for module lifecycle hooks ([#&#8203;33115](https://github.com/nuxt/nuxt/pull/33115)) - Add `--` to bun create command ([ab6aa8ee5](https://github.com/nuxt/nuxt/commit/ab6aa8ee5)) - Add JSDoc for `navigateTo` ([#&#8203;21442](https://github.com/nuxt/nuxt/pull/21442)) ##### 🏡 Chore - Correct `rou3` github url ([#&#8203;33130](https://github.com/nuxt/nuxt/pull/33130)) - Include `.ts` extension ([2c905f864](https://github.com/nuxt/nuxt/commit/2c905f864)) ##### ✅ Tests - Bump bundle size ([15564deb9](https://github.com/nuxt/nuxt/commit/15564deb9)) - Remove `app/` prefix for tree-shaken composables ([06ea91705](https://github.com/nuxt/nuxt/commit/06ea91705)) ##### 🤖 CI - Remove default discord reactions from thread (more noise than it's worth) ([2e3c91e0c](https://github.com/nuxt/nuxt/commit/2e3c91e0c)) - Rewrite release workflow in ts + support multiple tags ([478c64342](https://github.com/nuxt/nuxt/commit/478c64342)) - Pass correct flag ([a954f383f](https://github.com/nuxt/nuxt/commit/a954f383f)) - Pass tag via env variable ([dcfc82688](https://github.com/nuxt/nuxt/commit/dcfc82688)) - Drop `4x` tags from releases ([e3aa50d11](https://github.com/nuxt/nuxt/commit/e3aa50d11)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Octavio Araiza ([@&#8203;8ctavio](https://github.com/8ctavio)) - Michael Brevard ([@&#8203;GalacticHypernova](https://github.com/GalacticHypernova)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - 山吹色御守 ([@&#8203;KazariEX](https://github.com/KazariEX)) ### [`v3.19.0`](https://github.com/nuxt/nuxt/releases/tag/v3.19.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.18.1...v3.19.0) #### 👀 Highlights Please see the release notes for [Nuxt v4.1](https://github.com/nuxt/nuxt/releases/tag/v4.1.0) for full details on the features and fixes in Nuxt v3.19. #### ✅ Upgrading As usual, our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v3.18.1...v3.19.0) ##### 🚀 Enhancements - **kit:** Add `ignore` option to `resolveFiles` ([#&#8203;32858](https://github.com/nuxt/nuxt/pull/32858)) - **kit:** Add `onInstall` and `onUpgrade` module hooks ([#&#8203;32397](https://github.com/nuxt/nuxt/pull/32397)) - **nuxt,vite:** Add experimental support for `rolldown-vite` ([#&#8203;31812](https://github.com/nuxt/nuxt/pull/31812)) - **nuxt:** Extract `defineRouteRules` to page `rules` property ([#&#8203;32897](https://github.com/nuxt/nuxt/pull/32897)) - **nuxt,vite:** Use importmap to increase chunk stability ([#&#8203;33075](https://github.com/nuxt/nuxt/pull/33075)) - **nuxt:** Lazy hydration macros without auto-imports ([#&#8203;33037](https://github.com/nuxt/nuxt/pull/33037)) - **kit,nuxt,schema:** Allow modules to specify dependencies ([#&#8203;33063](https://github.com/nuxt/nuxt/pull/33063)) - **kit,nuxt:** Add `getLayerDirectories` util and refactor to use it ([#&#8203;33098](https://github.com/nuxt/nuxt/pull/33098)) ##### 🔥 Performance - **nuxt:** Clear inline route rules cache when pages change ([#&#8203;32877](https://github.com/nuxt/nuxt/pull/32877)) - **nuxt:** Stop watching app manifest once a change has been detected ([#&#8203;32880](https://github.com/nuxt/nuxt/pull/32880)) ##### 🩹 Fixes - **nuxt:** Handle `satisfies` in page augmentation ([#&#8203;32902](https://github.com/nuxt/nuxt/pull/32902)) - **nuxt:** Type response in `useFetch` hooks ([#&#8203;32891](https://github.com/nuxt/nuxt/pull/32891)) - **nuxt:** Add TS parenthesis and as expression for page meta extraction ([#&#8203;32914](https://github.com/nuxt/nuxt/pull/32914)) - **nuxt:** Use correct unit thresholds for relative time ([#&#8203;32893](https://github.com/nuxt/nuxt/pull/32893)) - **nuxt:** Handle uncached current build manifests ([#&#8203;32913](https://github.com/nuxt/nuxt/pull/32913)) - **kit:** Resolve directories in `resolvePath` and normalize file extensions ([#&#8203;32857](https://github.com/nuxt/nuxt/pull/32857)) - **schema,vite:** Bump `requestTimeout` + allow configuration ([#&#8203;32874](https://github.com/nuxt/nuxt/pull/32874)) - **nuxt:** Deep merge extracted route meta ([#&#8203;32887](https://github.com/nuxt/nuxt/pull/32887)) - **nuxt:** Do not expose app components until fully resolved ([#&#8203;32993](https://github.com/nuxt/nuxt/pull/32993)) - **kit:** Only exclude `node_modules/` if no custom `srcDir` ([#&#8203;32987](https://github.com/nuxt/nuxt/pull/32987)) - **nuxt:** Compare final matched routes when syncing `route` object ([#&#8203;32899](https://github.com/nuxt/nuxt/pull/32899)) - **nuxt:** Make vue server warnings much less verbose in dev mode ([#&#8203;33018](https://github.com/nuxt/nuxt/pull/33018)) - **schema:** Allow disabling cssnano/autoprefixer postcss plugins ([#&#8203;33016](https://github.com/nuxt/nuxt/pull/33016)) - **kit:** Ensure local layers are prioritised alphabetically ([#&#8203;33030](https://github.com/nuxt/nuxt/pull/33030)) - **kit,nuxt:** Expose global types to vue compiler ([#&#8203;33026](https://github.com/nuxt/nuxt/pull/33026)) - **nuxt:** Support config type inference for `defineNuxtModule().with()` ([#&#8203;33081](https://github.com/nuxt/nuxt/pull/33081)) - **nuxt:** Search for colliding names in route children ([31a9282c2](https://github.com/nuxt/nuxt/commit/31a9282c2)) - **nuxt:** Delete `nuxtApp._runningTransition` on resolve ([#&#8203;33025](https://github.com/nuxt/nuxt/pull/33025)) - **nuxt:** Add validation for nuxt island reviver key ([#&#8203;33069](https://github.com/nuxt/nuxt/pull/33069)) - **kit:** Prioritise local layers over extended layers ([ae8b0d2b8](https://github.com/nuxt/nuxt/commit/ae8b0d2b8)) - **kit:** Address merge conflict ([89ccbbebb](https://github.com/nuxt/nuxt/commit/89ccbbebb)) - **kit:** Do not resolve public dir aliases ([5d87d3a80](https://github.com/nuxt/nuxt/commit/5d87d3a80)) ##### 💅 Refactors - **nuxt:** Simplify page segment parsing ([#&#8203;32901](https://github.com/nuxt/nuxt/pull/32901)) - **nuxt:** Remove unnecessary `async/await` in `afterEach` ([#&#8203;32999](https://github.com/nuxt/nuxt/pull/32999)) - **vite:** Simplify inline chunk iteration ([9ea90fc33](https://github.com/nuxt/nuxt/commit/9ea90fc33)) - **kit,nuxt,ui-templates,vite:** Address deprecations + improve regexp perf ([#&#8203;33093](https://github.com/nuxt/nuxt/pull/33093)) ##### 📖 Documentation - Add a section about augmenting types with TS project references ([#&#8203;32843](https://github.com/nuxt/nuxt/pull/32843)) - Switch example to use vitest projects ([#&#8203;32863](https://github.com/nuxt/nuxt/pull/32863)) - Update testing `setupTimeout` and add `teardownTimeout` ([#&#8203;32868](https://github.com/nuxt/nuxt/pull/32868)) - Add middleware to layers guide ([fa516d440](https://github.com/nuxt/nuxt/commit/fa516d440)) - Add documentation for `--nightly` command ([#&#8203;32907](https://github.com/nuxt/nuxt/pull/32907)) - Update package information in roadmap section ([#&#8203;32881](https://github.com/nuxt/nuxt/pull/32881)) - Add more info about nuxt spa loader element attributes ([#&#8203;32871](https://github.com/nuxt/nuxt/pull/32871)) - Correct filename in example ([#&#8203;33000](https://github.com/nuxt/nuxt/pull/33000)) - Add more information about using `useRoute` and accessing route in middleware ([#&#8203;33004](https://github.com/nuxt/nuxt/pull/33004)) - Avoid variable shadowing in locale example ([#&#8203;33031](https://github.com/nuxt/nuxt/pull/33031)) ##### 🏡 Chore - Remove stray test file ([42fd247a4](https://github.com/nuxt/nuxt/commit/42fd247a4)) - Ignore webpagetest.org when scanning links ([cb18f4960](https://github.com/nuxt/nuxt/commit/cb18f4960)) - Add `type: 'module'` in playground ([#&#8203;33099](https://github.com/nuxt/nuxt/pull/33099)) ##### ✅ Tests - Add failing test for link component duplication ([#&#8203;32792](https://github.com/nuxt/nuxt/pull/32792)) - Simplify module hook tests ([#&#8203;32950](https://github.com/nuxt/nuxt/pull/32950)) - Refactor stubbing of `import.meta.dev` ([#&#8203;33023](https://github.com/nuxt/nuxt/pull/33023)) - Use `findWorkspaceDir` rather than relative paths to repo root ([c4c3ada96](https://github.com/nuxt/nuxt/commit/c4c3ada96)) - Improve router test for global transitions ([7e6a6fc35](https://github.com/nuxt/nuxt/commit/7e6a6fc35)) - Use `expect.poll` ([f4354203a](https://github.com/nuxt/nuxt/commit/f4354203a)) - Use `expect.poll` instead of `expectWithPolling` ([15ca5be95](https://github.com/nuxt/nuxt/commit/15ca5be95)) - Use `vi.waitUntil` instead of custom retry logic ([4c8c13090](https://github.com/nuxt/nuxt/commit/4c8c13090)) - Update test for app creation ([9a3b44515](https://github.com/nuxt/nuxt/commit/9a3b44515)) - Update bundle size snapshot ([76988ce97](https://github.com/nuxt/nuxt/commit/76988ce97)) ##### 🤖 CI - Remove double set of tests for docs prs ([14c006ac4](https://github.com/nuxt/nuxt/commit/14c006ac4)) - Add workflow for discord team discussion threads ([f14854fc3](https://github.com/nuxt/nuxt/commit/f14854fc3)) - Fix some syntax issues with discord + github integrations ([c059f7cd1](https://github.com/nuxt/nuxt/commit/c059f7cd1)) - Use token for adding issue to project ([51661bac3](https://github.com/nuxt/nuxt/commit/51661bac3)) - Use discord bot to create thread automatically ([37f9eb27b](https://github.com/nuxt/nuxt/commit/37f9eb27b)) - Only use discord bot ([38ce2dcbb](https://github.com/nuxt/nuxt/commit/38ce2dcbb)) - Update format of discord message ([0047b3059](https://github.com/nuxt/nuxt/commit/0047b3059)) - Try bolding entire line ([6e9f40eb9](https://github.com/nuxt/nuxt/commit/6e9f40eb9)) - Oops ([8b044cad2](https://github.com/nuxt/nuxt/commit/8b044cad2)) - Add delay after adding each reaction ([37b7e2108](https://github.com/nuxt/nuxt/commit/37b7e2108)) - Use last lts node version for testing ([98719c065](https://github.com/nuxt/nuxt/commit/98719c065)) - Try npm trusted publisher ([ea33502c3](https://github.com/nuxt/nuxt/commit/ea33502c3)) - Use npm trusted publisher for main releases ([31a55437f](https://github.com/nuxt/nuxt/commit/31a55437f)) - Change wording ([#&#8203;32979](https://github.com/nuxt/nuxt/pull/32979)) - Add github ai moderator ([#&#8203;33077](https://github.com/nuxt/nuxt/pull/33077)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - kyumoon ([@&#8203;kyumoon](https://github.com/kyumoon)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - mustafa60x ([@&#8203;mustafa60x](https://github.com/mustafa60x)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Amitav Chris Mostafa ([@&#8203;semibroiled](https://github.com/semibroiled)) - Romain Hamel ([@&#8203;romhml](https://github.com/romhml)) - Jacky Lam ([@&#8203;jackylamhk](https://github.com/jackylamhk)) - Mukund Shah ([@&#8203;mukundshah](https://github.com/mukundshah)) - Luke Nelson ([@&#8203;luc122c](https://github.com/luc122c)) - letianpailove ([@&#8203;letianpailove](https://github.com/letianpailove)) - Erwan Jugand ([@&#8203;erwanjugand](https://github.com/erwanjugand)) - Alexander ([@&#8203;TheColorman](https://github.com/TheColorman)) - Ryota Watanabe ([@&#8203;wattanx](https://github.com/wattanx)) - Yizack Rangel ([@&#8203;Yizack](https://github.com/Yizack)) ### [`v3.18.1`](https://github.com/nuxt/nuxt/releases/tag/v3.18.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.18.0...v3.18.1) > 3.18.1 is a regularly scheduled patch release. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v3.18.0...v3.18.1) ##### 🔥 Performance - **kit:** Get absolute path from `tinyglobby` in `resolveFiles` ([#&#8203;32846](https://github.com/nuxt/nuxt/pull/32846)) ##### 🩹 Fixes - **nuxt:** Do not throw undefined `error` variable ([#&#8203;32807](https://github.com/nuxt/nuxt/pull/32807)) - **vite:** Include tsconfig references during `typeCheck` ([#&#8203;32835](https://github.com/nuxt/nuxt/pull/32835)) - **nuxt:** Add sourcemap path transformation for client builds ([#&#8203;32313](https://github.com/nuxt/nuxt/pull/32313)) - **nuxt:** Add warning for lazy-hydration missing prefix ([#&#8203;32832](https://github.com/nuxt/nuxt/pull/32832)) - **nuxt:** Trigger call once navigation even when no suspense ([#&#8203;32827](https://github.com/nuxt/nuxt/pull/32827)) - **webpack:** Handle `null` result from webpack call ([65aa17158](https://github.com/nuxt/nuxt/commit/65aa17158)) - **kit,nuxt:** Use `reverseResolveAlias` for better errors ([#&#8203;32853](https://github.com/nuxt/nuxt/pull/32853)) ##### 📖 Documentation - Update nightly version references ([#&#8203;32776](https://github.com/nuxt/nuxt/pull/32776)) - Improve explanation of global middleware ([#&#8203;32855](https://github.com/nuxt/nuxt/pull/32855)) ##### 🏡 Chore - Update reproduction help text links ([#&#8203;32803](https://github.com/nuxt/nuxt/pull/32803)) - Update pnpm ignored build scripts ([#&#8203;32849](https://github.com/nuxt/nuxt/pull/32849)) - Improve internal types ([f271c66c4](https://github.com/nuxt/nuxt/commit/f271c66c4)) ##### ✅ Tests - Move tests for `defineNuxtComponent` out of e2e test ([#&#8203;32848](https://github.com/nuxt/nuxt/pull/32848)) ##### 🤖 CI - Move nightly releases into different concurrency group ([26f9baa6a](https://github.com/nuxt/nuxt/commit/26f9baa6a)) ##### ❤️ Contributors - RDistinct ([@&#8203;RDistinct](https://github.com/RDistinct)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Oskar Lebuda ([@&#8203;OskarLebuda](https://github.com/OskarLebuda)) - Peter Budai ([@&#8203;peterbud](https://github.com/peterbud)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Bobby ([@&#8203;xanzhu](https://github.com/xanzhu)) ### [`v3.18.0`](https://github.com/nuxt/nuxt/releases/tag/v3.18.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.7...v3.18.0) > 3.18.0 is the next minor release. #### 👀 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** ([#&#8203;31192](https://github.com/nuxt/nuxt/pull/31192))! These provide a more ergonomic way to control component hydration: ```vue <script setup lang="ts"> const LazyHydrationMyComponent = defineLazyHydrationComponent( 'visible', () => import('./components/MyComponent.vue') ) </script> <template> <div> <!-- Hydration will be triggered when the element(s) is 100px away from entering the viewport. --> <LazyHydrationMyComponent :hydrate-on-visible="{ rootMargin: '100px' }" /> </div> </template> ``` 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-in `app.vue` ([#&#8203;32621](https://github.com/nuxt/nuxt/pull/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 an `app.vue` in your project. If you do, please keep `<NuxtRouteAnnouncer>` in your `app.vue`!) ##### 🛠️ Enhanced Development Experience ##### Chrome DevTools Workspace Integration We've added **Chrome DevTools workspace integration** ([#&#8203;32084](https://github.com/nuxt/nuxt/pull/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: - **Typed slots for `<ClientOnly>` and `<DevOnly>`** ([#&#8203;32707](https://github.com/nuxt/nuxt/pull/32707)) - better IntelliSense and error checking - **Exported `<NuxtTime>` prop types** ([#&#8203;32547](https://github.com/nuxt/nuxt/pull/32547)) - easier to extend and customize ##### New Auto-Import: `onWatcherCleanup` The `onWatcherCleanup` function from `vue` is now available as an auto-import ([#&#8203;32396](https://github.com/nuxt/nuxt/pull/32396)), making it easier to clean up watchers and prevent memory leaks: ```ts const { data } = useAsyncData('users', fetchUsers) watch(data, (newData) => { const interval = setInterval(() => { // Some periodic task }, 1000) // Clean up when the watcher is stopped onWatcherCleanup(() => { clearInterval(interval) }) }) ``` ##### 📊 Observability Enhancements Page routes are now **exposed to Nitro for observability** ([#&#8203;32617](https://github.com/nuxt/nuxt/pull/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 `addServerImports` kit utility now **supports single imports** ([#&#8203;32289](https://github.com/nuxt/nuxt/pull/32289)), making it easier to add individual server utilities: ```ts // Before: had to wrap in array addServerImports([{ from: 'my-package', name: 'myUtility' }]) // Now: can pass directly addServerImports({ from: 'my-package', name: 'myUtility' }) ``` ##### TypeScript Configuration Modules can now **add to `typescript.hoist`** ([#&#8203;32601](https://github.com/nuxt/nuxt/pull/32601)), giving them more control over TypeScript configuration and type generation. ##### ⚡️ Performance Improvements We've made several performance optimizations: - **Improved Vite-node communication** via internal socket ([#&#8203;32417](https://github.com/nuxt/nuxt/pull/32417)) for faster development builds - **Migration to `oxc-walker`** ([#&#8203;32250](https://github.com/nuxt/nuxt/pull/32250)) and **oxc for `onPrehydrate` transforms** ([#&#8203;32045](https://github.com/nuxt/nuxt/pull/32045)) for faster code transformations ##### 🐛 Bug Fixes This release also includes several important fixes: - **Improved data fetching**: When computed keys change, old data is now properly retained ([#&#8203;32616](https://github.com/nuxt/nuxt/pull/32616)) - **Better scroll behavior**: `scrollBehaviorType` is now only used for hash scrolling ([#&#8203;32622](https://github.com/nuxt/nuxt/pull/32622)) - **Fixed directory aliases**: Added trailing slashes to some directory aliases for better consistency ([#&#8203;32755](https://github.com/nuxt/nuxt/pull/32755)) ##### ✅ Upgrading As usual, our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v3.17.7...v3.18.0) ##### 🚀 Enhancements - **nuxt:** Expose page routes to nitro for o11y ([#&#8203;32617](https://github.com/nuxt/nuxt/pull/32617)) - **nuxt:** Export `<NuxtTime>` prop types ([#&#8203;32547](https://github.com/nuxt/nuxt/pull/32547)) - **nuxt:** Add integration with chrome devtools workspaces ([#&#8203;32084](https://github.com/nuxt/nuxt/pull/32084)) - **kit:** Support single import in `addServerImports` ([#&#8203;32289](https://github.com/nuxt/nuxt/pull/32289)) - **nuxt:** Add `onWatcherCleanup` to imports presets ([#&#8203;32396](https://github.com/nuxt/nuxt/pull/32396)) - **nuxt:** Add route announcer to default app.vue ([#&#8203;32621](https://github.com/nuxt/nuxt/pull/32621)) - **nuxt:** Support lazy hydration macros ([#&#8203;31192](https://github.com/nuxt/nuxt/pull/31192)) ##### 🔥 Performance - **vite:** Communicate with vite-node via internal socket ([#&#8203;32417](https://github.com/nuxt/nuxt/pull/32417)) - **kit:** Update env expansion regex to match nitro ([#&#8203;30766](https://github.com/nuxt/nuxt/pull/30766)) ##### 🩹 Fixes - **nuxt:** Allow modules to add to `typescript.hoist` ([#&#8203;32601](https://github.com/nuxt/nuxt/pull/32601)) - **nuxt:** Retain old data when computed key changes ([#&#8203;32616](https://github.com/nuxt/nuxt/pull/32616)) - **nuxt:** Only use `scrollBehaviorType` for hash scrolling ([#&#8203;32622](https://github.com/nuxt/nuxt/pull/32622)) - **nuxt:** Add missing `async` ([fd312af03](https://github.com/nuxt/nuxt/commit/fd312af03)) - **nuxt:** Fix transform/minify types + bump oxc-transform ([d2ba19963](https://github.com/nuxt/nuxt/commit/d2ba19963)) - **nuxt:** Provide typed slots for `<ClientOnly>` and `<DevOnly>` ([#&#8203;32707](https://github.com/nuxt/nuxt/pull/32707)) - **kit,nuxt,schema:** Add trailing slash to some dir aliases ([#&#8203;32755](https://github.com/nuxt/nuxt/pull/32755)) - **nuxt:** Include source base url for remote islands ([#&#8203;32772](https://github.com/nuxt/nuxt/pull/32772)) - **vite:** Use vite node server to transform requests ([#&#8203;32791](https://github.com/nuxt/nuxt/pull/32791)) - **kit:** Use `mlly` to parse module paths ([#&#8203;32386](https://github.com/nuxt/nuxt/pull/32386)) - **nuxt:** Execute all plugins after error rendering error.vue ([#&#8203;32744](https://github.com/nuxt/nuxt/pull/32744)) ##### 💅 Refactors - **nuxt:** Migrate to `oxc-walker` ([#&#8203;32250](https://github.com/nuxt/nuxt/pull/32250)) - **nuxt,schema:** Use oxc for `onPrehydrate` transform ([#&#8203;32045](https://github.com/nuxt/nuxt/pull/32045)) - **nuxt:** Pass file language directly to parser options ([#&#8203;32665](https://github.com/nuxt/nuxt/pull/32665)) - **nuxt:** Use direct import of `installNuxtModule` ([228e3585e](https://github.com/nuxt/nuxt/commit/228e3585e)) ##### 📖 Documentation - Pass `v3` template to create nuxt examples ([03182202f](https://github.com/nuxt/nuxt/commit/03182202f)) - Add reference to `useNuxtData` in data fetching composable pages ([#&#8203;32589](https://github.com/nuxt/nuxt/pull/32589)) - Document the --modules flag in the init command ([#&#8203;32599](https://github.com/nuxt/nuxt/pull/32599)) - Added new Shared folder to the example of v4 folder structure ([#&#8203;32630](https://github.com/nuxt/nuxt/pull/32630)) - Improve grammar ([#&#8203;32640](https://github.com/nuxt/nuxt/pull/32640)) - Typos ([#&#8203;32567](https://github.com/nuxt/nuxt/pull/32567)) - Fix abbreviation ([#&#8203;32613](https://github.com/nuxt/nuxt/pull/32613)) - Reference `noUncheckedIndexedAccess` rule change in v4 guide ([#&#8203;32643](https://github.com/nuxt/nuxt/pull/32643)) - Fix links to Nitro docs ([#&#8203;32691](https://github.com/nuxt/nuxt/pull/32691)) - Add best practices section ([#&#8203;31609](https://github.com/nuxt/nuxt/pull/31609)) - Correct alias for local fonts in styling guide ([#&#8203;32680](https://github.com/nuxt/nuxt/pull/32680)) - Update nuxt.new links to v4 ([#&#8203;32639](https://github.com/nuxt/nuxt/pull/32639)) - Set correct default value for deep option in usefetch ([#&#8203;32724](https://github.com/nuxt/nuxt/pull/32724)) - Fix link to issue ([ca03f533f](https://github.com/nuxt/nuxt/commit/ca03f533f)) - Add AI-assisted contribution guidelines ([#&#8203;32725](https://github.com/nuxt/nuxt/pull/32725)) - Update Nuxt installation command to use `npm create nuxt@latest` ([#&#8203;32726](https://github.com/nuxt/nuxt/pull/32726)) - Hydration best practice ([#&#8203;32746](https://github.com/nuxt/nuxt/pull/32746)) - Add example for module `.with()` ([#&#8203;32757](https://github.com/nuxt/nuxt/pull/32757)) - Replace dead Vue Router docs links ([#&#8203;32779](https://github.com/nuxt/nuxt/pull/32779)) ##### 🏡 Chore - Handle missing commit details ([0af98763d](https://github.com/nuxt/nuxt/commit/0af98763d)) - Update reproduction links for bug-report template ([#&#8203;32722](https://github.com/nuxt/nuxt/pull/32722)) - Update `unbuild` and use absolute path in dev stubs ([#&#8203;32759](https://github.com/nuxt/nuxt/pull/32759)) ##### ✅ Tests - Also assert status ([4b4b224f7](https://github.com/nuxt/nuxt/commit/4b4b224f7)) - Ignore vue `module.exports` export ([ac8b02d09](https://github.com/nuxt/nuxt/commit/ac8b02d09)) - Extend timeout when waiting for hydration ([49c01ba81](https://github.com/nuxt/nuxt/commit/49c01ba81)) - Benchmark minimal fixture instead ([#&#8203;31174](https://github.com/nuxt/nuxt/pull/31174)) - Add minimal pages fixture ([#&#8203;30457](https://github.com/nuxt/nuxt/pull/30457)) - Bump bundle size ([bafa953c3](https://github.com/nuxt/nuxt/commit/bafa953c3)) ##### 🤖 CI - Trigger website redeploy on main branch ([#&#8203;32695](https://github.com/nuxt/nuxt/pull/32695)) - Release `pkg.pr.new` for `main`/`3.x` branches as well ([ca4f0b1da](https://github.com/nuxt/nuxt/commit/ca4f0b1da)) - Apply `3x` tag to latest v3 release ([5e8dfc150](https://github.com/nuxt/nuxt/commit/5e8dfc150)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Dog ([@&#8203;dgxo](https://github.com/dgxo)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Yauheni Vasiukevich ([@&#8203;EvgenyWas](https://github.com/EvgenyWas)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Mateleo ([@&#8203;Mateleo](https://github.com/Mateleo)) - Stephen Jason Wang ([@&#8203;stephenjason89](https://github.com/stephenjason89)) - Maurits Meester ([@&#8203;mmeester](https://github.com/mmeester)) - Igor Kononenko ([@&#8203;igorexa34314](https://github.com/igorexa34314)) - Alex ([@&#8203;hywax](https://github.com/hywax)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Hashim Kalam ([@&#8203;hashimkalam](https://github.com/hashimkalam)) - Alois Sečkár ([@&#8203;AloisSeckar](https://github.com/AloisSeckar)) - Haythem Frikha ([@&#8203;Flamenate](https://github.com/Flamenate)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Thomas ([@&#8203;ThomasWT](https://github.com/ThomasWT)) - Connor Pearson ([@&#8203;cjpearson](https://github.com/cjpearson)) - dwood-csi ([@&#8203;dwood-csi](https://github.com/dwood-csi)) ### [`v3.17.7`](https://github.com/nuxt/nuxt/releases/tag/v3.17.7) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.6...v3.17.7) > 3.17.7 is the last patch release before v3.18. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.6...v3.17.7) ##### 🩹 Fixes - **nuxt:** Safe-guard `extraPageMetaExtractionKeys` ([#&#8203;32510](https://github.com/nuxt/nuxt/pull/32510)) - **nuxt:** Expose `loadBuilder` error cause ([8f13ce3c2](https://github.com/nuxt/nuxt/commit/8f13ce3c2)) - **vite:** Handle resolving string vite input ([#&#8203;32527](https://github.com/nuxt/nuxt/pull/32527)) - **nuxt:** Wrap only server components with island generic ([#&#8203;32540](https://github.com/nuxt/nuxt/pull/32540)) - **vite:** Ignore when client entry cannot be resolved ([19a292f34](https://github.com/nuxt/nuxt/commit/19a292f34)) - **nuxt:** Normalize segment catchall pattern before checking for parent ([#&#8203;32413](https://github.com/nuxt/nuxt/pull/32413)) - **nuxt:** Update warning message to warn against `null` values ([c1b83eab5](https://github.com/nuxt/nuxt/commit/c1b83eab5)) - **nuxt:** Ensure `semver.satisfies` returns true for pre-release versions ([#&#8203;32574](https://github.com/nuxt/nuxt/pull/32574)) - **nuxt:** Scroll to anchor if present when changing page without saved position ([#&#8203;32376](https://github.com/nuxt/nuxt/pull/32376)) - **nuxt:** Handle `execute being passed to `watch\` ([#&#8203;32591](https://github.com/nuxt/nuxt/pull/32591)) ##### 📖 Documentation - Update fetch types ([#&#8203;32522](https://github.com/nuxt/nuxt/pull/32522)) - Clarify that runtime env variables must start with `NUXT_` ([#&#8203;32223](https://github.com/nuxt/nuxt/pull/32223)) - Fix key change behavior in `useAsyncData` and `useFetch` migration ([#&#8203;32560](https://github.com/nuxt/nuxt/pull/32560)) - Change return type of async data from `undefined` to `null` in v3 docs ([#&#8203;32562](https://github.com/nuxt/nuxt/pull/32562)) - Add section on custom hooks for Nuxt modules ([#&#8203;32586](https://github.com/nuxt/nuxt/pull/32586)) - Provide `async` keyword ([#&#8203;32587](https://github.com/nuxt/nuxt/pull/32587)) - Move augmenting hook types in hooks page ([#&#8203;32595](https://github.com/nuxt/nuxt/pull/32595)) - Add section about module loading order ([#&#8203;32597](https://github.com/nuxt/nuxt/pull/32597)) ##### ✅ Tests - Reenable skipped unit tests ([8fc9b9ee9](https://github.com/nuxt/nuxt/commit/8fc9b9ee9)) - Update test snapshot for `generateTypes` ([c0855439d](https://github.com/nuxt/nuxt/commit/c0855439d)) - Improve page scanning test stability ([84b96f3de](https://github.com/nuxt/nuxt/commit/84b96f3de)) - Pass timeZone in to `<NuxtTime>` test ([#&#8203;32558](https://github.com/nuxt/nuxt/pull/32558)) - Add more useAsyncData + useFetch tests ([#&#8203;32585](https://github.com/nuxt/nuxt/pull/32585)) - Avoid hard-coding async-data keys ([bfca95118](https://github.com/nuxt/nuxt/commit/bfca95118)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Nestor Vera ([@&#8203;hacknug](https://github.com/hacknug)) - Ezra Ashenafi ([@&#8203;Eazash](https://github.com/Eazash)) - Mike Laumann Bellika ([@&#8203;MikeBellika](https://github.com/MikeBellika)) - Maxime Pauvert ([@&#8203;maximepvrt](https://github.com/maximepvrt)) - Chriest Yu ([@&#8203;jcppman](https://github.com/jcppman)) - Andrei Hudalla ([@&#8203;paranoidPhantom](https://github.com/paranoidPhantom)) - Sigrid Huemer ([@&#8203;s1gr1d](https://github.com/s1gr1d)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) ### [`v3.17.6`](https://github.com/nuxt/nuxt/releases/tag/v3.17.6) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.5...v3.17.6) > 3.17.6 is a regularly scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.5...v3.17.6) ##### 🔥 Performance - **nuxt:** Decrease if checks when prerendering ([#&#8203;32455](https://github.com/nuxt/nuxt/pull/32455)) ##### 🩹 Fixes - **nuxt:** Generate correct types for async data defaults based on `nuxt.config` ([#&#8203;32324](https://github.com/nuxt/nuxt/pull/32324)) - **nuxt:** Reload at base URL in `nuxt:chunk-reload-immediate` ([#&#8203;32382](https://github.com/nuxt/nuxt/pull/32382)) - **nuxt:** Use rollup to calculate island component filenames ([#&#8203;32421](https://github.com/nuxt/nuxt/pull/32421)) - **nuxt:** Append `set-cookie` headers in error handler ([#&#8203;32483](https://github.com/nuxt/nuxt/pull/32483)) - **nuxt:** Ensure `asyncData` runs if changing key while fetcher is running ([#&#8203;32466](https://github.com/nuxt/nuxt/pull/32466)) - **nuxt:** Handle pure hash link clicks with `navigateTo` ([#&#8203;32393](https://github.com/nuxt/nuxt/pull/32393)) - **nuxt:** Skip external `<NuxtLink>`'s custom on click handler ([#&#8203;32499](https://github.com/nuxt/nuxt/pull/32499)) - **nuxt:** Update component loader regexp for minified code ([#&#8203;32298](https://github.com/nuxt/nuxt/pull/32298)) - **nuxt:** Allow camelCase for lazy hydration attributes ([#&#8203;32297](https://github.com/nuxt/nuxt/pull/32297)) - **nuxt:** Respect `inheritAttrs: false` in `createClientOnly` fn ([#&#8203;32323](https://github.com/nuxt/nuxt/pull/32323)) - **kit:** Do not double-urlify file urls when resolving schema ([#&#8203;32354](https://github.com/nuxt/nuxt/pull/32354)) - **nuxt:** Align scroll behavior with page transition completion ([#&#8203;32239](https://github.com/nuxt/nuxt/pull/32239)) - **nuxt:** Set `output.generatedCode.symbols` for nitro build ([#&#8203;32358](https://github.com/nuxt/nuxt/pull/32358)) - **nuxt:** Lazily access runtimeConfig ([#&#8203;32428](https://github.com/nuxt/nuxt/pull/32428)) ##### 💅 Refactors - **vite:** Migrate plugins internally to vite environments ([#&#8203;32461](https://github.com/nuxt/nuxt/pull/32461)) ##### 📖 Documentation - Clarify where logging tag is displayed ([#&#8203;32440](https://github.com/nuxt/nuxt/pull/32440)) - Remove kit playground auto-import note ([#&#8203;32415](https://github.com/nuxt/nuxt/pull/32415)) - Remove webstorm warning ([#&#8203;32513](https://github.com/nuxt/nuxt/pull/32513)) - Migrate to `h3js` ([#&#8203;32243](https://github.com/nuxt/nuxt/pull/32243)) - Update the fetch `clear` function description ([#&#8203;32287](https://github.com/nuxt/nuxt/pull/32287)) - `defineNuxtPlugin` function documentation ([#&#8203;32328](https://github.com/nuxt/nuxt/pull/32328)) - Mention that `<NuxtLink>` encodes query params ([#&#8203;32361](https://github.com/nuxt/nuxt/pull/32361)) - Enhance documentation for Nuxt composables ([#&#8203;32218](https://github.com/nuxt/nuxt/pull/32218)) - Adjust wording to reduce confusion in lifecycle section ([#&#8203;32503](https://github.com/nuxt/nuxt/pull/32503)) - Improve useCookie example ([367b85405](https://github.com/nuxt/nuxt/commit/367b85405)) - Capitalise title ([#&#8203;32426](https://github.com/nuxt/nuxt/pull/32426)) - Mention `bun.lock` for lockfile ([#&#8203;32427](https://github.com/nuxt/nuxt/pull/32427)) ##### 🏡 Chore - Update stackblitz reproduction link ([6ab5bac66](https://github.com/nuxt/nuxt/commit/6ab5bac66)) - Update copilot instructions ([220439055](https://github.com/nuxt/nuxt/commit/220439055)) - Rename deprecated vitest `workspace` to `projects` ([#&#8203;32388](https://github.com/nuxt/nuxt/pull/32388)) - Remove space in URL in comment ([#&#8203;32394](https://github.com/nuxt/nuxt/pull/32394)) - Allow setting TAG on commandline ([d387e07a3](https://github.com/nuxt/nuxt/commit/d387e07a3)) ##### ✅ Tests - **nuxt:** Add case for key only changes with `immediate: false` ([#&#8203;32473](https://github.com/nuxt/nuxt/pull/32473)) - Separate nuxt legacy runtime tests ([#&#8203;32481](https://github.com/nuxt/nuxt/pull/32481)) ##### 🤖 CI - Set correct base branch label ([#&#8203;32325](https://github.com/nuxt/nuxt/pull/32325)) ##### ❤️ Contributors - Mihailo Bursac ([@&#8203;djixadin](https://github.com/djixadin)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - abeer0 ([@&#8203;iiio2](https://github.com/iiio2)) - 翠 ([@&#8203;sapphi-red](https://github.com/sapphi-red)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Ibrahimm ([@&#8203;Ibra-cesar](https://github.com/Ibra-cesar)) - Peter Budai ([@&#8203;peterbud](https://github.com/peterbud)) - Ali Soueidan ([@&#8203;lazercaveman](https://github.com/lazercaveman)) - Vachmara ([@&#8203;vachmara](https://github.com/vachmara)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Paul Melero ([@&#8203;paulmelero](https://github.com/paulmelero)) - David Stack ([@&#8203;davidstackio](https://github.com/davidstackio)) ### [`v3.17.5`](https://github.com/nuxt/nuxt/releases/tag/v3.17.5) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.4...v3.17.5) > 3.17.5 is a regularly scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.4...v3.17.5) ##### 🔥 Performance - **nuxt:** Replace remaining instance of `globby` ([#&#8203;31688](https://github.com/nuxt/nuxt/pull/31688)) ##### 🩹 Fixes - **nuxt:** Export `useScriptRybbitAnalytics` from script stubs ([d275ae1a0](https://github.com/nuxt/nuxt/commit/d275ae1a0)) - **nuxt:** Remove unneeded pattern from regexp ([2954c092c](https://github.com/nuxt/nuxt/commit/2954c092c)) - **nuxt:** Ensure `appConfig` sources are not duplicated ([#&#8203;32216](https://github.com/nuxt/nuxt/pull/32216)) - **nuxt:** Wrap slot with `h()` in ClientOnly ([#&#8203;30664](https://github.com/nuxt/nuxt/pull/30664)) - **kit:** Ensure template filename uses safe patterns ([4372b24dd](https://github.com/nuxt/nuxt/commit/4372b24dd)) - **nuxt:** Access `asyncData` state from nuxt app instance ([#&#8203;32232](https://github.com/nuxt/nuxt/pull/32232)) - **nuxt:** Make patterns relative to `srcDir` in `buildCache` ([#&#8203;32260](https://github.com/nuxt/nuxt/pull/32260)) - **nuxt:** Return non-existent route component in RouteProvider ([#&#8203;32266](https://github.com/nuxt/nuxt/pull/32266)) - **nuxt:** Use single `asyncData` watcher ([#&#8203;32247](https://github.com/nuxt/nuxt/pull/32247)) - **vite:** Use arrow functions in dynamic imports ([#&#8203;32285](https://github.com/nuxt/nuxt/pull/32285)) - **webpack:** Use plugin for rollup-compatible dynamic imports ([#&#8203;32281](https://github.com/nuxt/nuxt/pull/32281)) ##### 📖 Documentation - Update `addRouteMiddleware` path in example ([#&#8203;32171](https://github.com/nuxt/nuxt/pull/32171)) - Narrow link to just middleware ([#&#8203;32203](https://github.com/nuxt/nuxt/pull/32203)) - Use optional chaining in error example ([#&#8203;32214](https://github.com/nuxt/nuxt/pull/32214)) - Give example of using `--env-file` ([29f6392cd](https://github.com/nuxt/nuxt/commit/29f6392cd)) - Recommend `nuxt` command consistently ([#&#8203;32237](https://github.com/nuxt/nuxt/pull/32237)) - Fix typos ([#&#8203;30413](https://github.com/nuxt/nuxt/pull/30413)) - Add props to special metadata ([#&#8203;29708](https://github.com/nuxt/nuxt/pull/29708)) - Fix wrong `alert` with `warning` in `/guide/pages` ([#&#8203;32270](https://github.com/nuxt/nuxt/pull/32270)) - Update upgrade guide + roadmap ([0040ee5e7](https://github.com/nuxt/nuxt/commit/0040ee5e7)) ##### 📦 Build - **nuxt:** Ensure cache is typed ([33df20d17](https://github.com/nuxt/nuxt/commit/33df20d17)) ##### 🏡 Chore - Upgrade webpack dependencies separately ([444d60936](https://github.com/nuxt/nuxt/commit/444d60936)) - Apply lint fixes ([221ce99eb](https://github.com/nuxt/nuxt/commit/221ce99eb)) - Add missing dependency ([720170dea](https://github.com/nuxt/nuxt/commit/720170dea)) ##### ✅ Tests - Add regression test for useAsyncData + transition ([29f7c8cb4](https://github.com/nuxt/nuxt/commit/29f7c8cb4)) - Ensure builder tests run sequentially ([defa32829](https://github.com/nuxt/nuxt/commit/defa32829)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Hugo Richard ([@&#8203;HugoRCD](https://github.com/HugoRCD)) - mxmxmmgg ([@&#8203;mxmxmmgg](https://github.com/mxmxmmgg)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Horu ([@&#8203;HigherOrderLogic](https://github.com/HigherOrderLogic)) - Baptiste Leproux ([@&#8203;larbish](https://github.com/larbish)) - Phojie Rengel ([@&#8203;phojie](https://github.com/phojie)) - duolaameng ([@&#8203;1411430556](https://github.com/1411430556)) - David Stack ([@&#8203;davidstackio](https://github.com/davidstackio)) ### [`v3.17.4`](https://github.com/nuxt/nuxt/releases/tag/v3.17.4) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.3...v3.17.4) > 3.17.4 is a regularly-scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.3...v3.17.4) ##### 🔥 Performance - **nuxt:** Use Set for circular dep plugin ([#&#8203;32110](https://github.com/nuxt/nuxt/pull/32110)) - Refactor Array.includes checks to use Sets ([#&#8203;32133](https://github.com/nuxt/nuxt/pull/32133)) - **nuxt:** Use `shallowRef` for primitive values ([#&#8203;32152](https://github.com/nuxt/nuxt/pull/32152)) - **nuxt:** Skip route rules processing for empty child array ([#&#8203;32166](https://github.com/nuxt/nuxt/pull/32166)) - **nuxt:** Use `Intl.Collator` instead of `localeCompare` ([#&#8203;32167](https://github.com/nuxt/nuxt/pull/32167)) ##### 🩹 Fixes - **nuxt:** Do not await lazy asyncData inside `<ClientOnly>` ([#&#8203;32101](https://github.com/nuxt/nuxt/pull/32101)) - **nuxt:** Respect cachedData with multiple asyncData calls ([#&#8203;32099](https://github.com/nuxt/nuxt/pull/32099)) - **nuxt:** Clear async data after a tick ([#&#8203;32096](https://github.com/nuxt/nuxt/pull/32096)) - **nuxt:** Support reactive keys in `useLazyAsyncData` ([#&#8203;32092](https://github.com/nuxt/nuxt/pull/32092)) - **rspack:** Use `ts-checker-rspack-plugin` ([#&#8203;32115](https://github.com/nuxt/nuxt/pull/32115)) - **nuxt:** Clear previous head in island-renderer ([#&#8203;32100](https://github.com/nuxt/nuxt/pull/32100)) - **nuxt:** Handle virtual files prefixed with `/` ([#&#8203;32129](https://github.com/nuxt/nuxt/pull/32129)) - **schema:** Remove nitro options from `DeepPartial` ([#&#8203;31990](https://github.com/nuxt/nuxt/pull/31990)) - **nuxt:** Ensure legacy async data remains reactive ([#&#8203;32134](https://github.com/nuxt/nuxt/pull/32134)) - **nuxt:** Pass attrs down to single child of `<ClientOnly>` ([#&#8203;32131](https://github.com/nuxt/nuxt/pull/32131)) - **nuxt:** Fix merge conflicts ([7044450d4](https://github.com/nuxt/nuxt/commit/7044450d4)) - **nuxt:** Clone vnode when passing attrs down to client-only ([b3acf0c78](https://github.com/nuxt/nuxt/commit/b3acf0c78)) - **vite:** Do not replace `global` with `globalThis` ([#&#8203;32130](https://github.com/nuxt/nuxt/pull/32130)) - **nuxt:** Suppress client-side errors by crawlers ([#&#8203;32137](https://github.com/nuxt/nuxt/pull/32137)) - **nuxt:** Use fresh route when `<NuxtLayout>` first renders ([#&#8203;24673](https://github.com/nuxt/nuxt/pull/24673)) - **nuxt:** Add additional logging when skipping error page for bot ([68c270083](https://github.com/nuxt/nuxt/commit/68c270083)) - **nuxt:** Add watch paths outside `srcDir` to parcel strategy ([#&#8203;32139](https://github.com/nuxt/nuxt/pull/32139)) ##### 📖 Documentation - Use emphasis instead of quotes ([#&#8203;32078](https://github.com/nuxt/nuxt/pull/32078)) - Update `useNuxtData` default return to `undefined` ([#&#8203;32054](https://github.com/nuxt/nuxt/pull/32054)) - Capitalise headings ([#&#8203;32095](https://github.com/nuxt/nuxt/pull/32095)) - Prefix `imports.dirs` with alias ([0dbf314d9](https://github.com/nuxt/nuxt/commit/0dbf314d9)) - Mention node v20 is minimum requirement for nuxt setup ([#&#8203;32148](https://github.com/nuxt/nuxt/pull/32148)) - Use more descriptive link text ([d0b1b9d35](https://github.com/nuxt/nuxt/commit/d0b1b9d35)) ##### 🏡 Chore - Remove unneeded JSdoc comments ([#&#8203;32090](https://github.com/nuxt/nuxt/pull/32090)) - Use vitest workspaces for tests ([#&#8203;32121](https://github.com/nuxt/nuxt/pull/32121)) ##### ✅ Tests - Add universal routing tests + clean up output ([64178b6f4](https://github.com/nuxt/nuxt/commit/64178b6f4)) - **nuxt:** Add unit tests for watch strategies ([#&#8203;32138](https://github.com/nuxt/nuxt/pull/32138)) - Resolve watch path ([8fb562c04](https://github.com/nuxt/nuxt/commit/8fb562c04)) - Use fake timers instead of `setTimeout` mock ([#&#8203;32142](https://github.com/nuxt/nuxt/pull/32142)) ##### 🤖 CI - Rename workflow ([835098fcb](https://github.com/nuxt/nuxt/commit/835098fcb)) - Skip codeql event on merge\_group events ([46c259664](https://github.com/nuxt/nuxt/commit/46c259664)) ##### ❤️ Contributors - John Tanzer ([@&#8203;moshetanzer](https://github.com/moshetanzer)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - [@&#8203;beer](https://github.com/beer) ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - हिमांशु ([@&#8203;CodeMan62](https://github.com/CodeMan62)) - Norbiros ([@&#8203;Norbiros](https://github.com/Norbiros)) - watsonhaw5566 ([@&#8203;watsonhaw5566](https://github.com/watsonhaw5566)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) ### [`v3.17.3`](https://github.com/nuxt/nuxt/releases/tag/v3.17.3) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.2...v3.17.3) > 3.17.3 is a regularly-scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.2...v3.17.3) ##### 🔥 Performance - **nuxt:** Pre-calculate extension glob before app resolution ([#&#8203;32052](https://github.com/nuxt/nuxt/pull/32052)) - **nuxt:** Improve islands client components chunks ([#&#8203;32015](https://github.com/nuxt/nuxt/pull/32015)) ##### 🩹 Fixes - **nuxt:** Preload async layouts ([#&#8203;32002](https://github.com/nuxt/nuxt/pull/32002)) - **nuxt:** Handle File within `FormData` ([#&#8203;32013](https://github.com/nuxt/nuxt/pull/32013)) - **schema:** Respect user-provided `ignore` patterns ([#&#8203;32020](https://github.com/nuxt/nuxt/pull/32020)) - **nuxt:** Allow loading virtual files with query params ([#&#8203;32022](https://github.com/nuxt/nuxt/pull/32022)) - **nuxt:** Don't use reactive key for `useFetch` with `watch: false` ([#&#8203;32019](https://github.com/nuxt/nuxt/pull/32019)) - **nuxt:** Do not clear data if custom `getCachedData` is provided ([#&#8203;32003](https://github.com/nuxt/nuxt/pull/32003)) - **nuxt:** Provide `nuxtApp` for asyncData functions run on server ([#&#8203;32038](https://github.com/nuxt/nuxt/pull/32038)) - **vite:** Strip queries when skipping vite transform middleware ([#&#8203;32041](https://github.com/nuxt/nuxt/pull/32041)) - **nuxt:** Sort hash sources and files ([#&#8203;32048](https://github.com/nuxt/nuxt/pull/32048)) - **nuxt:** Do not suppress chunk import error ([#&#8203;32064](https://github.com/nuxt/nuxt/pull/32064)) ##### 💅 Refactors - **nuxt:** Directly access initialised `asyncData` ([e779d6cd5](https://github.com/nuxt/nuxt/commit/e779d6cd5)) ##### 📖 Documentation - Fix module initialization command for pnpm ([#&#8203;32024](https://github.com/nuxt/nuxt/pull/32024)) - Provide nuxt installation guide with deno ([#&#8203;32029](https://github.com/nuxt/nuxt/pull/32029)) - Add codeblock closing tag ([#&#8203;32043](https://github.com/nuxt/nuxt/pull/32043)) - Tweak nuxt doc ([#&#8203;32063](https://github.com/nuxt/nuxt/pull/32063)) - Add space between sentences ([#&#8203;32069](https://github.com/nuxt/nuxt/pull/32069)) ##### 🤖 CI - Convert `bug`/`enhancement` labels to issue types ([3ff743fe0](https://github.com/nuxt/nuxt/commit/3ff743fe0)) - Update payload for issue types ([791e5f443](https://github.com/nuxt/nuxt/commit/791e5f443)) ##### ❤️ Contributors - Ryota Watanabe ([@&#8203;wattanx](https://github.com/wattanx)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - John Tanzer ([@&#8203;moshetanzer](https://github.com/moshetanzer)) - [@&#8203;beer](https://github.com/beer) ([@&#8203;iiio2](https://github.com/iiio2)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Max ([@&#8203;onmax](https://github.com/onmax)) ### [`v3.17.2`](https://github.com/nuxt/nuxt/releases/tag/v3.17.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.1...v3.17.2) > 3.17.2 is a regularly-scheduled patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.1...v3.17.2) ##### 🔥 Performance - **nuxt:** Tree-shake router's `handleHotUpdate` in production ([#&#8203;31971](https://github.com/nuxt/nuxt/pull/31971)) ##### 🩹 Fixes - **nuxt:** Ensure asyncData is initialised before effects run ([#&#8203;31946](https://github.com/nuxt/nuxt/pull/31946)) - **nuxt:** Skip view transition if user agent provides one before defining `transition` ([#&#8203;31945](https://github.com/nuxt/nuxt/pull/31945)) - **nuxt:** Improve hashing for complex body in `useFetch` ([#&#8203;31963](https://github.com/nuxt/nuxt/pull/31963)) - **nuxt:** Immediately call asyncData within client-only components ([#&#8203;31964](https://github.com/nuxt/nuxt/pull/31964)) - **nuxt:** Don't render errors if event is already handled ([#&#8203;31966](https://github.com/nuxt/nuxt/pull/31966)) - **nuxt:** Track whether need to reinit asyncData separately from deps ([#&#8203;31965](https://github.com/nuxt/nuxt/pull/31965)) - **nuxt:** Preserve params/meta/matched with universal router ([#&#8203;31950](https://github.com/nuxt/nuxt/pull/31950)) - **nuxt:** Respect scroll behavior set by `scrollToTop` ([#&#8203;31914](https://github.com/nuxt/nuxt/pull/31914)) - **nuxt:** Load live data from `vfs` even if a file exists in `buildDir` ([#&#8203;31969](https://github.com/nuxt/nuxt/pull/31969)) - **nuxt:** Short circuit middleware when validate returns false ([#&#8203;31967](https://github.com/nuxt/nuxt/pull/31967)) - **nuxt:** Ensure `useAsyncData` reactive to `key` changes when `immediate: false` ([#&#8203;31987](https://github.com/nuxt/nuxt/pull/31987)) - **nuxt:** Resolve real paths imported into virtual files ([0bb07f129](https://github.com/nuxt/nuxt/commit/0bb07f129)) - **webpack:** Broaden `WarningFilter` type ([2a79dbd68](https://github.com/nuxt/nuxt/commit/2a79dbd68)) - **schema:** Broaden `warningIgnoreFilters` ([a62e808ac](https://github.com/nuxt/nuxt/commit/a62e808ac)) ##### 📖 Documentation - Add missing article ([#&#8203;31952](https://github.com/nuxt/nuxt/pull/31952)) - Improve `@nuxt/kit` documentation ([#&#8203;31793](https://github.com/nuxt/nuxt/pull/31793)) - Fix type issues in twoslash blocks ([85ab105b8](https://github.com/nuxt/nuxt/commit/85ab105b8)) - Add events page ([#&#8203;31977](https://github.com/nuxt/nuxt/pull/31977)) ##### 🏡 Chore - Update approved builds ([02b33cc58](https://github.com/nuxt/nuxt/commit/02b33cc58)) - Sort package keys ([06aabc548](https://github.com/nuxt/nuxt/commit/06aabc548)) ##### ✅ Tests - Update bundle size snapshot ([e03d44b47](https://github.com/nuxt/nuxt/commit/e03d44b47)) - Update bundle size ([7f75f5ea5](https://github.com/nuxt/nuxt/commit/7f75f5ea5)) - Update bundle size again ([e8a244bfc](https://github.com/nuxt/nuxt/commit/e8a244bfc)) - Use `asyncDataDefaults.value` ([91568c5da](https://github.com/nuxt/nuxt/commit/91568c5da)) ##### 🤖 CI - Run docs workflow against pull requests ([08f968903](https://github.com/nuxt/nuxt/commit/08f968903)) - Run tests against node v20 ([3c97d3493](https://github.com/nuxt/nuxt/commit/3c97d3493)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Martins Zeltins ([@&#8203;martinszeltins](https://github.com/martinszeltins)) - Ivan Martianov ([@&#8203;ivansky](https://github.com/ivansky)) - Lorenzo Fiamingo ([@&#8203;lorenzofiamingo](https://github.com/lorenzofiamingo)) - James ([@&#8203;Koshux](https://github.com/Koshux)) ### [`v3.17.1`](https://github.com/nuxt/nuxt/releases/tag/v3.17.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.17.0...v3.17.1) > 3.17.1 is the next patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.17.0...v3.17.1) ##### 🩹 Fixes - **nuxt:** Check if match exists with new unplugin filter ([#&#8203;31929](https://github.com/nuxt/nuxt/pull/31929)) - **nuxt:** Reinitialise stale async data ([#&#8203;31940](https://github.com/nuxt/nuxt/pull/31940)) - **nuxt:** Skip view transition if user agent is providing one ([#&#8203;31938](https://github.com/nuxt/nuxt/pull/31938)) - **nuxt:** Trigger `execute` when non-immediate fetch key changes ([#&#8203;31941](https://github.com/nuxt/nuxt/pull/31941)) - **nuxt:** Don't redirect when route has trailing slash ([#&#8203;31902](https://github.com/nuxt/nuxt/pull/31902)) - **ui-templates:** Use `escapeHTML` from vue ([8e4b8d62f](https://github.com/nuxt/nuxt/commit/8e4b8d62f)) - **schema:** Add `@vue/shared` dependency ([7d445c963](https://github.com/nuxt/nuxt/commit/7d445c963)) ##### 📦 Build - Copy README/LICENSE from repo root ([8e287d556](https://github.com/nuxt/nuxt/commit/8e287d556)) ##### 🏡 Chore - Update docs version ([db5ad4a8f](https://github.com/nuxt/nuxt/commit/db5ad4a8f)) - Add docs directory to publish scripts ([d3bcad632](https://github.com/nuxt/nuxt/commit/d3bcad632)) ##### ✅ Tests - Update snapshots ([a197d1087](https://github.com/nuxt/nuxt/commit/a197d1087)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Pooya Parsa ([@&#8203;pi0](https://github.com/pi0)) - Kyohei Sonokawa ([@&#8203;kyohei-23](https://github.com/kyohei-23)) - Lorenzo Fiamingo ([@&#8203;lorenzofiamingo](https://github.com/lorenzofiamingo)) ### [`v3.17.0`](https://github.com/nuxt/nuxt/releases/tag/v3.17.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.16.2...v3.17.0) #### 👀 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 `useAsyncData` and `useFetch`. Although we have aimed to maintain backward compatibility and put breaking changes behind the `experimental.granularCachedData` flag (disabled by default), we recommend testing your application thoroughly after upgrading. You can also disable `experimental.purgeCachedData` to revert to the previous behavior if you are relying on cached data being available indefinitely after components using `useAsyncData` are unmounted. 👉 Read the the original PR for full details ([#&#8203;31373](https://github.com/nuxt/nuxt/pull/31373)), but here are a few highlights. ##### Consistent Data Across Components All calls to `useAsyncData` or `useFetch` with the same key now share the underlying refs, ensuring consistency across your application: ```vue <!-- ComponentA.vue --> <script setup> const { data: users, pending } = useAsyncData('users', fetchUsers) </script> <!-- ComponentB.vue --> <script setup> // This will reference the same data state as ComponentA const { data: users, status } = useAsyncData('users', fetchUsers) // When either component refreshes the data, both will update consistently </script> ``` 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: ```ts const userId = ref('123') const { data: user } = useAsyncData( computed(() => `user-${userId.value}`), () => fetchUser(userId.value) ) // Changing the userId will automatically trigger a new data fetch // and clean up the old data if no other components are using it userId.value = '456' ``` ##### Optimized Data Refetching Multiple components watching the same data source will now trigger only a single data fetch when dependencies change: ```ts // In multiple components: const { data } = useAsyncData( 'users', () => $fetch(`/api/users?page=${route.query.page}`), { watch: [() => route.query.page] } ) // When route.query.page changes, only one fetch operation will occur // All components using this key will update simultaneously ``` ##### 🎭 Built-In Nuxt Components ##### `<NuxtTime>` - A new component for safe time display We've added a new `<NuxtTime>` component for SSR-safe time display, which resolves hydration mismatches when working with dates ([#&#8203;31876](https://github.com/nuxt/nuxt/pull/31876)): ```vue <template> <NuxtTime :datetime="Date.now()" /> </template> ``` 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 exposes `error` and `clearError` from the component - as well as in the error slot types, giving you greater ability to handle errors in your templates and via `useTemplateRef` ([#&#8203;31847](https://github.com/nuxt/nuxt/pull/31847)): ```vue <NuxtErrorBoundary @&#8203;error="handleError"> <template #error="{ error, clearError }"> <div> <p>{{ error.message }}</p> <button @&#8203;click="clearError">Try again</button> </div> </template> <!-- Content that might error --> <MyComponent /> </NuxtErrorBoundary> ``` ##### 🔗 Router Improvements `<NuxtLink>` now accepts a `trailingSlash` prop, giving you more control over URL formatting ([#&#8203;31820](https://github.com/nuxt/nuxt/pull/31820)): ```vue <NuxtLink to="/about" trailing-slash>About</NuxtLink> <!-- Will render <a href="/about/"> --> ``` ##### 🔄 Loading Indicator Customization You can now customize the loading indicator with new props directly on the component ([#&#8203;31532](https://github.com/nuxt/nuxt/pull/31532)): - `hideDelay`: Controls how long to wait before hiding the loading bar - `resetDelay`: Controls how long to wait before resetting loading indicator state ```vue <template> <NuxtLoadingIndicator :hide-delay="500" :reset-delay="300" /> </template> ``` ##### 📚 Documentation as a Package The Nuxt documentation is now available as an npm package! You can install `@nuxt/docs` to access the raw markdown and YAML content used to build the documentation website ([#&#8203;31353](https://github.com/nuxt/nuxt/pull/31353)). ##### 💻 Developer Experience Improvements We've added several warnings to help catch common mistakes: - Warning when server components don't have a root element [#&#8203;31365](https://github.com/nuxt/nuxt/pull/31365) - Warning when using the reserved `runtimeConfig.app` namespace [#&#8203;31774](https://github.com/nuxt/nuxt/pull/31774) - Warning when core auto-import presets are overridden [#&#8203;29971](https://github.com/nuxt/nuxt/pull/29971) - Error when `definePageMeta` is used more than once in a file [#&#8203;31634](https://github.com/nuxt/nuxt/pull/31634) ##### 🔌 Enhanced Module Development Module authors will be happy to know: - A new `experimental.enforceModuleCompatibility` allows Nuxt to throw an error when a module is loaded that isn't compatible with it ([#&#8203;31657](https://github.com/nuxt/nuxt/pull/31657)). It will be enabled by default in Nuxt v4. - You can now automatically register every component exported via named exports from a file with `addComponentExports` [#&#8203;27155](https://github.com/nuxt/nuxt/pull/27155) ##### 🔥 Performance Improvements Several performance improvements have been made: - Switched to `tinyglobby` for faster file globbing [#&#8203;31668](https://github.com/nuxt/nuxt/pull/31668) - Excluded `.data` directory from type-checking for faster builds [#&#8203;31738](https://github.com/nuxt/nuxt/pull/31738) - Improved tree-shaking by hoisting the `purgeCachedData` check [#&#8203;31785](https://github.com/nuxt/nuxt/pull/31785) #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v3.16.2...v3.17.0) ##### 🚀 Enhancements - **nuxt:** Accept `hideDelay` and `resetDelay` props for loading indicator ([#&#8203;31532](https://github.com/nuxt/nuxt/pull/31532)) - **nuxt:** Warn server components need root element ([#&#8203;31365](https://github.com/nuxt/nuxt/pull/31365)) - **docs:** Publish raw markdown/yaml docs as `@nuxt/docs` ([#&#8203;31353](https://github.com/nuxt/nuxt/pull/31353)) - **kit,nuxt:** Pass dotenv values from `loadNuxtConfig` to nitro ([#&#8203;31680](https://github.com/nuxt/nuxt/pull/31680)) - **nuxt,vite:** Support disabling scripts in dev mode ([#&#8203;31724](https://github.com/nuxt/nuxt/pull/31724)) - **nuxt:** Warn if user uses reserved `runtimeConfig.app` namespace ([#&#8203;31774](https://github.com/nuxt/nuxt/pull/31774)) - **kit,schema:** Allow throwing error if modules aren't compatible ([#&#8203;31657](https://github.com/nuxt/nuxt/pull/31657)) - **nuxt:** Extract `middleware` when scanning page metadata ([#&#8203;30708](https://github.com/nuxt/nuxt/pull/30708)) - **nuxt:** Warn if core auto-import presets are overridden ([#&#8203;29971](https://github.com/nuxt/nuxt/pull/29971)) - **nuxt:** Scan named exports with `addComponentExports` ([#&#8203;27155](https://github.com/nuxt/nuxt/pull/27155)) - **nuxt:** Convert `<NuxtErrorBoundary>` to SFC + expose `error`/`clearError` ([#&#8203;31847](https://github.com/nuxt/nuxt/pull/31847)) - **nuxt:** Add `<NuxtTime>` component for ssr-safe time display ([#&#8203;31876](https://github.com/nuxt/nuxt/pull/31876)) - **nuxt:** Add `trailingSlash` prop to `<NuxtLink>` ([#&#8203;31820](https://github.com/nuxt/nuxt/pull/31820)) ##### 🔥 Performance - **kit,rspack,webpack:** Switch to `tinyglobby` ([#&#8203;31668](https://github.com/nuxt/nuxt/pull/31668)) - **kit:** Exclude `.data` directory from type-checking ([#&#8203;31738](https://github.com/nuxt/nuxt/pull/31738)) - **nuxt:** Hoist `purgeCachedData` check to improve tree-shaking ([#&#8203;31785](https://github.com/nuxt/nuxt/pull/31785)) - **nuxt:** Remove `oxc-parser` manual wasm fallback logic ([#&#8203;31484](https://github.com/nuxt/nuxt/pull/31484)) - **nuxt:** Remove unecessary type check for useFetch ([#&#8203;31910](https://github.com/nuxt/nuxt/pull/31910)) ##### 🩹 Fixes - **kit,vite:** Ensure all `modulesDir` paths are added to `fs.allow` ([#&#8203;31540](https://github.com/nuxt/nuxt/pull/31540)) - **nuxt:** Pass slots through to lazy hydrated components ([#&#8203;31649](https://github.com/nuxt/nuxt/pull/31649)) - **vite:** Do not return 404 for dev server handlers which shadow `/_nuxt/` ([#&#8203;31646](https://github.com/nuxt/nuxt/pull/31646)) - **nuxt:** Sync error types for `useLazyAsyncData` ([#&#8203;31676](https://github.com/nuxt/nuxt/pull/31676)) - **nuxt:** Strip base url from `error.url` ([#&#8203;31679](https://github.com/nuxt/nuxt/pull/31679)) - **nuxt:** Render inline styles before `app:rendered` is called ([#&#8203;31686](https://github.com/nuxt/nuxt/pull/31686)) - **nuxt:** Update nitro imports ([0bec0bd26](https://github.com/nuxt/nuxt/commit/0bec0bd26)) - **nuxt:** Check for `fallback` attribute when stripping `<DevOnly>` ([c1d735c27](https://github.com/nuxt/nuxt/commit/c1d735c27)) - **vite:** Invalidate files not present in module graph ([ecae2cd54](https://github.com/nuxt/nuxt/commit/ecae2cd54)) - **nuxt:** Do not add manifest preload when `noScripts` ([c9572e953](https://github.com/nuxt/nuxt/commit/c9572e953)) - **nuxt:** Do not prompt to update `compatibilityDate` ([#&#8203;31725](https://github.com/nuxt/nuxt/pull/31725)) - **nuxt:** Show brotli size by default when analyzing bundle ([#&#8203;31784](https://github.com/nuxt/nuxt/pull/31784)) - **nuxt:** Always pass `statusMessage` when rendering html error ([#&#8203;31761](https://github.com/nuxt/nuxt/pull/31761)) - **nuxt:** Error when `definePageMeta` is used more than once ([#&#8203;31634](https://github.com/nuxt/nuxt/pull/31634)) - **nuxt:** Parse `error.data` before rendering `error.vue` ([#&#8203;31571](https://github.com/nuxt/nuxt/pull/31571)) - **nuxt:** Use single synced asyncdata instance per key ([#&#8203;31373](https://github.com/nuxt/nuxt/pull/31373)) - **nuxt:** Use `useAsyncData` in console log ([#&#8203;31801](https://github.com/nuxt/nuxt/pull/31801)) - **nuxt:** Wait for suspense to resolve before handling `NuxtErrorBoundary` error ([#&#8203;31791](https://github.com/nuxt/nuxt/pull/31791)) - **vite:** Disable `preserveModules` ([#&#8203;31839](https://github.com/nuxt/nuxt/pull/31839)) - **nuxt:** Align `pending` with `status` value for v4 ([#&#8203;25864](https://github.com/nuxt/nuxt/pull/25864)) - **nuxt:** Consider full path when de-duplicating routes ([#&#8203;31849](https://github.com/nuxt/nuxt/pull/31849)) - **nuxt:** Augment `nuxt/app` in generated middleware and layouts declarations ([#&#8203;31808](https://github.com/nuxt/nuxt/pull/31808)) - **nuxt:** Correct order of args passed to `withoutBase` ([f956407bb](https://github.com/nuxt/nuxt/commit/f956407bb)) - **vite:** Dedupe `vue` in vite-node dev server ([f3882e004](https://github.com/nuxt/nuxt/commit/f3882e004)) - **ui-templates:** Pass pointer events through spotlight div in error dev template ([#&#8203;31887](https://github.com/nuxt/nuxt/pull/31887)) - **kit:** Include user-defined types before internal ones in `tsconfig.json` ([#&#8203;31882](https://github.com/nuxt/nuxt/pull/31882)) - **nuxt:** Do not purge nuxt data if active `useNuxtData` ([#&#8203;31893](https://github.com/nuxt/nuxt/pull/31893)) - **nuxt:** Do not include components of key in `useFetch` watch sources ([#&#8203;31903](https://github.com/nuxt/nuxt/pull/31903)) - **nuxt:** Use first existing `modulesDir` to store build cache files ([#&#8203;31907](https://github.com/nuxt/nuxt/pull/31907)) ##### 💅 Refactors - **nuxt:** Use `shallowRef` for primitives as well ([#&#8203;31662](https://github.com/nuxt/nuxt/pull/31662)) - **nuxt:** Move island renderer into its own event handler ([#&#8203;31386](https://github.com/nuxt/nuxt/pull/31386)) - **nuxt:** Remove unneeded import ([#&#8203;31750](https://github.com/nuxt/nuxt/pull/31750)) - **nuxt:** Use `_replaceAppConfig` when applying hmr ([#&#8203;31786](https://github.com/nuxt/nuxt/pull/31786)) - **nuxt:** Use new unplugin filter options ([#&#8203;31868](https://github.com/nuxt/nuxt/pull/31868)) - **schema:** Do not generate types for `ConfigSchema` ([#&#8203;31894](https://github.com/nuxt/nuxt/pull/31894)) ##### 📖 Documentation - Add note on extending auto-imports ([#&#8203;31640](https://github.com/nuxt/nuxt/pull/31640)) - Improve description of `app.vue` ([#&#8203;31645](https://github.com/nuxt/nuxt/pull/31645)) - Use video-accordion video and add more videos ([#&#8203;31655](https://github.com/nuxt/nuxt/pull/31655)) - Add description of `templateParams` to seo docs ([#&#8203;31583](https://github.com/nuxt/nuxt/pull/31583)) - Refine auto-imports documentation ([#&#8203;31700](https://github.com/nuxt/nuxt/pull/31700)) - Fix nuxt logo on website badge ([#&#8203;31704](https://github.com/nuxt/nuxt/pull/31704)) - Update tailwindcss link ([b5741cb5a](https://github.com/nuxt/nuxt/commit/b5741cb5a)) - Adjust description of `useHydration` ([#&#8203;31712](https://github.com/nuxt/nuxt/pull/31712)) - Remove trailing slash ([#&#8203;31751](https://github.com/nuxt/nuxt/pull/31751)) - Remove comment about `callOnce` returning value ([#&#8203;31747](https://github.com/nuxt/nuxt/pull/31747)) - Use `vs.` consistently ([#&#8203;31760](https://github.com/nuxt/nuxt/pull/31760)) - Update nitro `addServerHandler` example ([#&#8203;31769](https://github.com/nuxt/nuxt/pull/31769)) - Add supporting shared folder video ([#&#8203;31651](https://github.com/nuxt/nuxt/pull/31651)) - Update example for component auto-import in nuxt modules ([#&#8203;31757](https://github.com/nuxt/nuxt/pull/31757)) - Refine nuxt kit components documentation ([#&#8203;31714](https://github.com/nuxt/nuxt/pull/31714)) - Use trailing slash for vitest link ([82de8bcf8](https://github.com/nuxt/nuxt/commit/82de8bcf8)) - Fix casing ([#&#8203;31805](https://github.com/nuxt/nuxt/pull/31805)) - Add discord and nuxters links ([#&#8203;31888](https://github.com/nuxt/nuxt/pull/31888)) - Fix typos ([#&#8203;31898](https://github.com/nuxt/nuxt/pull/31898)) ##### 📦 Build - **nuxt:** Use `vue-sfc-transformer` to process sfcs ([#&#8203;31691](https://github.com/nuxt/nuxt/pull/31691)) ##### 🏡 Chore - Update renovate config ([565c0b98e](https://github.com/nuxt/nuxt/commit/565c0b98e)) - Upgrade webpack separately ([e1f5db34f](https://github.com/nuxt/nuxt/commit/e1f5db34f)) - Update internal ui-templates licence to MIT ([f8059fb8b](https://github.com/nuxt/nuxt/commit/f8059fb8b)) - Sort package.json ([a6cbd71f8](https://github.com/nuxt/nuxt/commit/a6cbd71f8)) ##### ✅ Tests - **nuxt:** Add customizable test api for pages tests ([#&#8203;31619](https://github.com/nuxt/nuxt/pull/31619)) - **kit:** Fix tests when running on Windows ([#&#8203;31694](https://github.com/nuxt/nuxt/pull/31694)) - Update page metadata snapshot ([89a596075](https://github.com/nuxt/nuxt/commit/89a596075)) - Add basic runtime tests for `<NuxtErrorBoundary>` ([4df92c45f](https://github.com/nuxt/nuxt/commit/4df92c45f)) - Add version to mock nuxt ([915fae2fd](https://github.com/nuxt/nuxt/commit/915fae2fd)) - Update assertion for `pendingWhenIdle` ([08f2224c8](https://github.com/nuxt/nuxt/commit/08f2224c8)) - Remove incorrect assertions ([fdc4b5343](https://github.com/nuxt/nuxt/commit/fdc4b5343)) - Update tests for purgeCachedData ([c6411eb17](https://github.com/nuxt/nuxt/commit/c6411eb17)) ##### 🤖 CI - Add notify-nuxt-website workflow ([#&#8203;31726](https://github.com/nuxt/nuxt/pull/31726)) ##### ❤️ Contributors - [@&#8203;beer](https://github.com/beer) ([@&#8203;iiio2](https://github.com/iiio2)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Saeid Zareie ([@&#8203;Saeid-Za](https://github.com/Saeid-Za)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - Maxime Pauvert ([@&#8203;maximepvrt](https://github.com/maximepvrt)) - Leonid ([@&#8203;john-psina](https://github.com/john-psina)) - Wind ([@&#8203;productdevbook](https://github.com/productdevbook)) - Arkadiusz Sygulski ([@&#8203;Aareksio](https://github.com/Aareksio)) - Rohan Dhimal ([@&#8203;drowhannn](https://github.com/drowhannn)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Robin ([@&#8203;OrbisK](https://github.com/OrbisK)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Daniel Kelly ([@&#8203;danielkellyio](https://github.com/danielkellyio)) - Jeffrey van den Hondel ([@&#8203;jeffreyvdhondel](https://github.com/jeffreyvdhondel)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Yizack Rangel ([@&#8203;Yizack](https://github.com/Yizack)) - Joaquín Sánchez ([@&#8203;userquin](https://github.com/userquin)) - IlyaL ([@&#8203;ilyaliao](https://github.com/ilyaliao)) - Ben McCann ([@&#8203;benmccann](https://github.com/benmccann)) - Anthony Fu ([@&#8203;antfu](https://github.com/antfu)) - Alexandru Ungureanu ([@&#8203;unguul](https://github.com/unguul)) ### [`v3.16.2`](https://github.com/nuxt/nuxt/releases/tag/v3.16.2) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.16.1...v3.16.2) > 3.16.2 is the next patch release. #### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` 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](https://github.com/nuxt/nuxt/compare/v3.16.1...v3.16.2) ##### 🔥 Performance - **nuxt:** Improve tree-shaking of `useRequestEvent` on client ([#&#8203;31586](https://github.com/nuxt/nuxt/pull/31586)) ##### 🩹 Fixes - **nuxt:** Pass down attrs to `<Body>` and `<Html>` ([#&#8203;31513](https://github.com/nuxt/nuxt/pull/31513)) - **nuxt:** Use greedy catchall when `/index` is the last segment ([#&#8203;31528](https://github.com/nuxt/nuxt/pull/31528)) - **nuxt:** Reset `page:loading:end` hook before navigation ([#&#8203;31504](https://github.com/nuxt/nuxt/pull/31504)) - **nuxt:** Write initial cookie value if different from `document.cookie` ([#&#8203;31517](https://github.com/nuxt/nuxt/pull/31517)) - **nuxt:** Support template string quotes in `resolveComponent` ([#&#8203;31526](https://github.com/nuxt/nuxt/pull/31526)) - **nuxt:** Show fatal errors thrown in middleware ([#&#8203;31518](https://github.com/nuxt/nuxt/pull/31518)) - **nuxt:** Use name to index route providers in dev ([#&#8203;31544](https://github.com/nuxt/nuxt/pull/31544)) - **nuxt:** Improve default scroll behaviour ([#&#8203;31545](https://github.com/nuxt/nuxt/pull/31545)) - **vite:** Return 404 for non-existent `_nuxt/` paths in development ([#&#8203;31543](https://github.com/nuxt/nuxt/pull/31543)) - **nuxt:** Pass error data to `error.vue` ([#&#8203;31573](https://github.com/nuxt/nuxt/pull/31573)) - **nuxt:** Use `unhead` v2 api in default welcome + error pages ([#&#8203;31584](https://github.com/nuxt/nuxt/pull/31584)) - **nuxt:** Improve consistency of page metadata extraction ([#&#8203;31306](https://github.com/nuxt/nuxt/pull/31306)) - **nuxt:** Do not remove meta when `scanPageMeta` is disabled ([0ba454b21](https://github.com/nuxt/nuxt/commit/0ba454b21)) ##### 💅 Refactors - **nuxt:** Simplify conditional branches of `<NuxtPage>` ([#&#8203;31561](https://github.com/nuxt/nuxt/pull/31561)) - Replace `useServerHead` in `onPrehydrate` with `useHead` ([#&#8203;31585](https://github.com/nuxt/nuxt/pull/31585)) ##### 📖 Documentation - Move custom directories note to the correct place ([#&#8203;29100](https://github.com/nuxt/nuxt/pull/29100)) - Update example to `useTemplateRef` ([#&#8203;31458](https://github.com/nuxt/nuxt/pull/31458)) - Provide async function for `$fetch` ([#&#8203;31459](https://github.com/nuxt/nuxt/pull/31459)) - Mention the possibility to scan pages based on a pattern ([#&#8203;31462](https://github.com/nuxt/nuxt/pull/31462)) - Add `dedupe` flag ([#&#8203;31467](https://github.com/nuxt/nuxt/pull/31467)) - Improve `refreshNuxtData` docs ([#&#8203;31448](https://github.com/nuxt/nuxt/pull/31448)) - Add missing `--` before `--template` ([#&#8203;31469](https://github.com/nuxt/nuxt/pull/31469)) - Migrate to [@&#8203;nuxt/content](https://github.com/nuxt/content) v3 ([#&#8203;31150](https://github.com/nuxt/nuxt/pull/31150)) - Fix icon for main docs ([e7828d9c6](https://github.com/nuxt/nuxt/commit/e7828d9c6)) - Save selected package manager ([#&#8203;31520](https://github.com/nuxt/nuxt/pull/31520)) - Improve refresh nuxt data example ([#&#8203;31487](https://github.com/nuxt/nuxt/pull/31487)) - Note that middleware runs on error pages as well ([df14c0263](https://github.com/nuxt/nuxt/commit/df14c0263)) - Replace all 'Nuxt 3' with 'Nuxt' in documentation ([#&#8203;31519](https://github.com/nuxt/nuxt/pull/31519)) - `resolveComponent` only auto-imports components with literal strings ([#&#8203;31511](https://github.com/nuxt/nuxt/pull/31511)) - Add ticks around `tsconfig.json` ([#&#8203;31473](https://github.com/nuxt/nuxt/pull/31473)) - Capitalize heading ([#&#8203;31523](https://github.com/nuxt/nuxt/pull/31523)) - Update links to unhead.unjs.io ([1913febbb](https://github.com/nuxt/nuxt/commit/1913febbb)) - Document that props are passed via server components via query ([db7688219](https://github.com/nuxt/nuxt/commit/db7688219)) - Improve description of `page:start` and `page:finish` hooks ([#&#8203;31570](https://github.com/nuxt/nuxt/pull/31570)) ##### 🏡 Chore - Ignore builds ([e34ae380d](https://github.com/nuxt/nuxt/commit/e34ae380d)) ##### ✅ Tests - Avoid invalid nested font face ([#&#8203;31524](https://github.com/nuxt/nuxt/pull/31524)) - Add test for loading indicator with custom key ([25ca9b819](https://github.com/nuxt/nuxt/commit/25ca9b819)) - Add test for custom prop + loading indicator ([94bfed031](https://github.com/nuxt/nuxt/commit/94bfed031)) - Update snapshot ([55134fc2a](https://github.com/nuxt/nuxt/commit/55134fc2a)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Dennis Adriaansen ([@&#8203;dennisadriaans](https://github.com/dennisadriaans)) - Guillaume Chau ([@&#8203;Akryum](https://github.com/Akryum)) - [@&#8203;beer](https://github.com/beer) ([@&#8203;iiio2](https://github.com/iiio2)) - 翠 / green ([@&#8203;sapphi-red](https://github.com/sapphi-red)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Hugo Richard ([@&#8203;HugoRCD](https://github.com/HugoRCD)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Johannes Buchholz ([@&#8203;jhony1104](https://github.com/jhony1104)) - Alexander Lichter ([@&#8203;TheAlexLichter](https://github.com/TheAlexLichter)) - Matej Černý ([@&#8203;cernymatej](https://github.com/cernymatej)) - Claudiu ([@&#8203;sofuxro](https://github.com/sofuxro)) ### [`v3.16.1`](https://github.com/nuxt/nuxt/releases/tag/v3.16.1) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.16.0...v3.16.1) [compare changes](https://github.com/nuxt/nuxt/compare/v3.16.0...v3.16.1) ##### 🔥 Performance - **nuxt:** Use browser cache for payloads ([#&#8203;31379](https://github.com/nuxt/nuxt/pull/31379)) ##### 🩹 Fixes - **nuxt:** Restore nuxt aliases to nitro compilerOptions.paths ([#&#8203;31278](https://github.com/nuxt/nuxt/pull/31278)) - **nuxt:** Use new `mocked-exports` ([#&#8203;31295](https://github.com/nuxt/nuxt/pull/31295)) - **nuxt:** Check resolved options for polyfills ([#&#8203;31307](https://github.com/nuxt/nuxt/pull/31307)) - **nuxt:** Render style component html ([#&#8203;31337](https://github.com/nuxt/nuxt/pull/31337)) - **nuxt:** Add missing lazy hydration prop in regex ([#&#8203;31359](https://github.com/nuxt/nuxt/pull/31359)) - **nuxt:** Fully resolve nuxt dependencies ([#&#8203;31436](https://github.com/nuxt/nuxt/pull/31436)) - **vite:** Don't show interim vite build output files ([#&#8203;31439](https://github.com/nuxt/nuxt/pull/31439)) - **nuxt:** Ignore prerendering unprefixed public assets ([151912ec3](https://github.com/nuxt/nuxt/commit/151912ec3)) - **nuxt:** Use more performant router catchall pattern ([#&#8203;31450](https://github.com/nuxt/nuxt/pull/31450)) - **nuxt:** Prevent param duplication in `typedPages` implementation ([#&#8203;31331](https://github.com/nuxt/nuxt/pull/31331)) - **nuxt:** Sort route paths before creating route tree ([#&#8203;31454](https://github.com/nuxt/nuxt/pull/31454)) ##### 📖 Documentation - Update link to vercel edge network ([ec20802a5](https://github.com/nuxt/nuxt/commit/ec20802a5)) - Improve HMR performance note for Windows users ([#&#8203;31301](https://github.com/nuxt/nuxt/pull/31301)) - Correct WSL note phrasing ([#&#8203;31322](https://github.com/nuxt/nuxt/pull/31322)) - Fix typo ([#&#8203;31341](https://github.com/nuxt/nuxt/pull/31341)) - Adjust `app.head` example ([#&#8203;31350](https://github.com/nuxt/nuxt/pull/31350)) - Include package manager options in update script ([#&#8203;31346](https://github.com/nuxt/nuxt/pull/31346)) - Add missing comma ([#&#8203;31362](https://github.com/nuxt/nuxt/pull/31362)) - Add mention of `addServerTemplate` to modules guide ([#&#8203;31369](https://github.com/nuxt/nuxt/pull/31369)) - Add `rspack` and remove `test-utils` for monorepo guide ([#&#8203;31371](https://github.com/nuxt/nuxt/pull/31371)) - Adjust example ([#&#8203;31372](https://github.com/nuxt/nuxt/pull/31372)) - Update experimental docs ([#&#8203;31388](https://github.com/nuxt/nuxt/pull/31388)) - Use `ini` syntax block highlighting for `.env` files ([f79fabe46](https://github.com/nuxt/nuxt/commit/f79fabe46)) - Improve `useHydration` docs ([#&#8203;31427](https://github.com/nuxt/nuxt/pull/31427)) - Update broken docs links ([#&#8203;31430](https://github.com/nuxt/nuxt/pull/31430)) - Mention possibility of prerendering api routes ([#&#8203;31234](https://github.com/nuxt/nuxt/pull/31234)) ##### 🏡 Chore - Fix gitignore ([6fe9dff7e](https://github.com/nuxt/nuxt/commit/6fe9dff7e)) - Bump axios dependency in lockfile ([c3352e80b](https://github.com/nuxt/nuxt/commit/c3352e80b)) - Lint repo ([2ab20bfdc](https://github.com/nuxt/nuxt/commit/2ab20bfdc)) - Add scorecard badge ([#&#8203;31302](https://github.com/nuxt/nuxt/pull/31302)) - Dedupe ([be5d85f2b](https://github.com/nuxt/nuxt/commit/be5d85f2b)) ##### ✅ Tests - Migrate runtime compiler test to playwright (+ add test cases) ([#&#8203;31405](https://github.com/nuxt/nuxt/pull/31405)) - Migrate spa preloader tests to playwright ([#&#8203;31273](https://github.com/nuxt/nuxt/pull/31273)) - Use `srvx` and random port for remote provider ([#&#8203;31432](https://github.com/nuxt/nuxt/pull/31432)) ##### 🤖 CI - Automate release on merge of of v3/v4 ([6ae5b5fdb](https://github.com/nuxt/nuxt/commit/6ae5b5fdb)) - Fix workflow quoting ([fef39cf3c](https://github.com/nuxt/nuxt/commit/fef39cf3c)) ##### ❤️ Contributors - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - Anoesj Sadraee ([@&#8203;Anoesj](https://github.com/Anoesj)) - Peter Radko ([@&#8203;Gwynerva](https://github.com/Gwynerva)) - Adam DeHaven ([@&#8203;adamdehaven](https://github.com/adamdehaven)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Francesco Agnoletto ([@&#8203;Kornil](https://github.com/Kornil)) - Guillaume Chau ([@&#8203;Akryum](https://github.com/Akryum)) - imreegall ([@&#8203;imreegall](https://github.com/imreegall)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Sam Blowes ([@&#8203;blowsie](https://github.com/blowsie)) - Nimit012 ([@&#8203;Nimit012](https://github.com/Nimit012)) - Camille Coutens ([@&#8203;Kamsou](https://github.com/Kamsou)) ### [`v3.16.0`](https://github.com/nuxt/nuxt/releases/tag/v3.16.0) [Compare Source](https://github.com/nuxt/nuxt/compare/v3.15.4...v3.16.0) #### 👀 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 [@&#8203;devgar](https://github.com/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: ```bash npm create nuxt ``` ![screenshot of create nuxt app](https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qrygjljnajqwxbld3k7uvyms/bafkreifkhnzbwxgkgjw6jpqg6j6z6abylvfyynca3r7jh5b63fcromj2ia@jpeg) Special thanks to [@&#8203;cmang](https://github.com/cmang) for the [beautiful ASCII-art](https://bsky.app/profile/durdraw.org/post/3liadod3gv22a). ❤️ Want to learn more about where we're headed with the Nuxt CLI? Check out our roadmap [here](https://github.com/nuxt/cli/issues/648), including our plans for an [interactive modules selector](https://github.com/nuxt/cli/issues/754). ##### 🚀 Unhead v2 We've upgraded to `unhead` v2, the engine behind Nuxt's `<head>` management. This major version removes deprecations and improves how context works: - For Nuxt 3 users, we're shipping a legacy compatibility build so nothing breaks - The context implementation is now more direct via Nuxt itself ```ts // Nuxt now re-exports composables while properly resolving the context export function useHead(input, options = {}) { const unhead = injectHead(options.nuxt) return head(input, { head: unhead, ...options }) } ``` If you're using Unhead directly in your app, keep in mind: 1. Import from Nuxt's auto-imports or `#app/composables/head` instead of `@unhead/vue` 2. Importing directly from `@unhead/vue` might lose async context Don'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](https://nuxt.com/docs/getting-started/upgrade#unhead-v2) for additional changes. ##### 🔧 Devtools v2 Upgrade Nuxt Devtools has leveled up to v2 ([#&#8203;30889](https://github.com/nuxt/nuxt/pull/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](https://github.com/nuxt/devtools/releases). ##### ⚡️ Performance Improvements We're continuing to make Nuxt faster, and there are a number of improvements in v3.16: 1. Using [`exsolve`](https://github.com/unjs/exsolve) for module resolution ([#&#8203;31124](https://github.com/nuxt/nuxt/pull/31124)) along with the rest of the unjs ecosystem (nitro, c12, pkg-types, and more) - which dramatically speeds up module resolution 2. Smarter module resolution paths ([#&#8203;31037](https://github.com/nuxt/nuxt/pull/31037)) - prioritizes direct imports for better efficiency 3. Eliminated duplicated Nitro alias resolution ([#&#8203;31088](https://github.com/nuxt/nuxt/pull/31088)) - leaner file handling 4. Streamlined `loadNuxt` by skipping unnecessary resolution steps ([#&#8203;31176](https://github.com/nuxt/nuxt/pull/31176)) - faster startups 5. Adopt `oxc-parser` for parsing in Nuxt plugins ([#&#8203;30066](https://github.com/nuxt/nuxt/pull/30066)) All these speed boosts happen automatically - no configuration needed! Shout out to [CodSpeed](https://codspeed.io/) with [Vitest benchmarking](https://vitest.dev/guide/features.html#benchmarking) to measure these improvements in CI - it has been really helpful. To add some anecdotal evidence, my personal site at [roe.dev](https://github.com/danielroe/roe.dev) loads 32% faster with v3.16, and [nuxt.com](https://github.com/nuxt/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 ([#&#8203;26468](https://github.com/nuxt/nuxt/pull/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](https://vuejs.org/guide/components/async.html#lazy-hydration). ```vue <template> <!-- Hydrate when component becomes visible in viewport --> <LazyExpensiveComponent hydrate-on-visible /> <!-- Hydrate when browser is idle --> <LazyHeavyComponent hydrate-on-idle /> <!-- Hydrate on interaction (mouseover in this case) --> <LazyDropdown hydrate-on-interaction="mouseover" /> <!-- Hydrate when media query matches --> <LazyMobileMenu hydrate-on-media-query="(max-width: 768px)" /> <!-- Hydrate after a specific delay in milliseconds --> <LazyFooter :hydrate-after="2000" /> </template> ``` You can also listen for when hydration happens with the `@hydrated` event: ```vue <LazyComponent hydrate-on-visible @&#8203;hydrated="onComponentHydrated" /> ``` Learn more about lazy hydration in [our components documentation](https://nuxt.com/docs/guide/directory-structure/components#delayed-or-lazy-hydration). ##### 🧩 Advanced Pages Configuration You can now fine-tune which files Nuxt scans for pages ([#&#8203;31090](https://github.com/nuxt/nuxt/pull/31090)), giving you more control over your project structure: ```ts [nuxt.config.ts] export default defineNuxtConfig({ pages: { // Filter specific files or directories pattern: ['**/*.vue'], } }) ``` ##### 🔍 Enhanced Debugging We've made debugging with the `debug` option more flexible! Now you can enable just the debug logs you need ([#&#8203;30578](https://github.com/nuxt/nuxt/pull/30578)): ```ts [nuxt.config.ts] export default defineNuxtConfig({ debug: { // Enable specific debugging features templates: true, modules: true, watchers: true, hooks: { client: true, server: true, }, nitro: true, router: true, hydration: true, } }) ``` Or keep it simple with `debug: true` to enable all these debugging features. ##### 🎨 Decorators Support For the decorator fans out there (whoever you are!), we've added experimental support ([#&#8203;27672](https://github.com/nuxt/nuxt/pull/27672)). As with all experimental features, feedback is much appreciated. ```ts [nuxt.config.ts] export default defineNuxtConfig({ experimental: { decorators: true } }) ``` ```ts function something (_method: () => unknown) { return () => 'decorated' } class SomeClass { @&#8203;something public someMethod () { return 'initial' } } const value = new SomeClass().someMethod() // returns 'decorated' ``` ##### 📛 Named Layer Aliases It's been much requested, and it's here! Auto-scanned local layers (from your `~~/layers` directory) now automatically create aliases. You can access your `~~/layers/test` layer via `#layers/test` ([#&#8203;30948](https://github.com/nuxt/nuxt/pull/30948)) - no configuration needed. If you want named aliases for other layers, you can add a name to your layer configuration: ```ts [nuxt.config.ts] export default defineNuxtConfig({ $meta: { name: 'example-layer', }, }) ``` This creates the alias `#layers/example-layer` pointing to your layer - making imports cleaner and more intuitive. ##### 🧪 Error Handling Improvements We've greatly improved error messages and source tracking ([#&#8203;31144](https://github.com/nuxt/nuxt/pull/31144)): 1. Better warnings for undefined `useAsyncData` calls with precise file location information 2. Error pages now appear correctly on island page errors ([#&#8203;31081](https://github.com/nuxt/nuxt/pull/31081)) Plus, we're now using Nitro's beautiful error handling (powered by [youch](https://github.com/poppinss/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` ([#&#8203;31079](https://github.com/nuxt/nuxt/pull/31079)): ```ts // Inside your Nuxt module export default defineNuxtModule({ setup(options, nuxt) { addTypeTemplate({ filename: 'types/my-module.d.ts', getContents: () => ` declare module 'nitropack' { interface NitroRouteConfig { myCustomOption?: boolean } } ` }, { nitro: true }) } }) ``` ##### ⚙️ 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](https://github.com/nitrojs/nitro/releases/tag/v2.11.0). ##### 📦 New `unjs` Major Versions This release includes several major version upgrades from the unjs ecosystem, focused on performance and smaller bundle sizes through ESM-only distributions: - unenv upgraded to v2 (full rewrite) - db0 upgraded to v0.3 (ESM-only, native node:sql, improvements) - ohash upgraded to v2 (ESM-only, native node:crypto support, much faster) - untyped upgraded to v2 (ESM-only, smaller install size) - unimport upgraded to v4 (improvements) - c12 upgraded to v3 (ESM-only) - pathe upgraded to v2 (ESM-only) - cookie-es upgraded to v2 (ESM-only) - esbuild upgraded to v0.25 - chokidar upgraded to v4 #### ✅ Upgrading As usual, our recommendation for upgrading is to run: ```sh npx nuxi@latest upgrade --dedupe ``` This refreshes your lockfile and pulls in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem. #### 👉 Changelog [compare changes](https://github.com/nuxt/nuxt/compare/v3.15.4...v3.16.0) ##### 🚀 Enhancements - **nuxt:** Upgrade `@nuxt/devtools` to v2 ([#&#8203;30889](https://github.com/nuxt/nuxt/pull/30889)) - **nuxt:** Granular debug options ([#&#8203;30578](https://github.com/nuxt/nuxt/pull/30578)) - **nuxt:** Add type hints for `NuxtPage` ([#&#8203;30704](https://github.com/nuxt/nuxt/pull/30704)) - **nuxt:** Support tracking changes to nuxt options by modules ([#&#8203;30555](https://github.com/nuxt/nuxt/pull/30555)) - **nuxt:** Allow disabling auto-imported polyfills ([#&#8203;30332](https://github.com/nuxt/nuxt/pull/30332)) - **schema:** Add runtime + internal type validation ([#&#8203;30844](https://github.com/nuxt/nuxt/pull/30844)) - **kit,nuxt,schema:** Support experimental decorators syntax ([#&#8203;27672](https://github.com/nuxt/nuxt/pull/27672)) - **kit,nuxt:** Allow multiple nuxts to run in one process ([#&#8203;30510](https://github.com/nuxt/nuxt/pull/30510)) - **kit:** Add named layer aliases ([#&#8203;30948](https://github.com/nuxt/nuxt/pull/30948)) - **kit,nuxt,vite:** `directoryToURL` to normalise paths ([#&#8203;30986](https://github.com/nuxt/nuxt/pull/30986)) - **nuxt:** Allow forcing `start`/`set` in loading indicator ([#&#8203;30989](https://github.com/nuxt/nuxt/pull/30989)) - **nuxt:** Allow specifying glob patterns for scanning `pages/` ([#&#8203;31090](https://github.com/nuxt/nuxt/pull/31090)) - **nuxt:** Add types for default `NuxtLink` slot ([#&#8203;31104](https://github.com/nuxt/nuxt/pull/31104)) - **nuxt:** Delayed/lazy hydration support ([#&#8203;26468](https://github.com/nuxt/nuxt/pull/26468)) - **vite:** Add vite's modulepreload polyfill ([#&#8203;31164](https://github.com/nuxt/nuxt/pull/31164)) - **nuxt:** Show source file when warning about undefined useAsyncData ([#&#8203;31144](https://github.com/nuxt/nuxt/pull/31144)) - **kit,nuxt:** Augment nitro types with `addTypeTemplate` ([#&#8203;31079](https://github.com/nuxt/nuxt/pull/31079)) - **kit,nuxt:** Resolve template imports from originating module ([#&#8203;31175](https://github.com/nuxt/nuxt/pull/31175)) - **nuxt:** Use `oxc-parser` instead of esbuild + acorn ([#&#8203;30066](https://github.com/nuxt/nuxt/pull/30066)) - **nuxt:** Upgrade to unhead v2 ([#&#8203;31169](https://github.com/nuxt/nuxt/pull/31169)) - **nuxt:** Align nuxt error handling with nitro ([#&#8203;31230](https://github.com/nuxt/nuxt/pull/31230)) ##### 🔥 Performance - **nuxt:** Remove duplicated nitro alias resolution ([#&#8203;31088](https://github.com/nuxt/nuxt/pull/31088)) - **kit:** Try non-subpath routes first to resolve nuxt modules ([#&#8203;31037](https://github.com/nuxt/nuxt/pull/31037)) - **nuxt:** Migrate to use `exsolve` for module resolution ([#&#8203;31124](https://github.com/nuxt/nuxt/pull/31124)) - **kit:** Skip extra module resolution step in `loadNuxt` ([#&#8203;31176](https://github.com/nuxt/nuxt/pull/31176)) ##### 🩹 Fixes - **nuxt:** Ensure `<NuxtLayout>` `fallback` prop is typed ([#&#8203;30832](https://github.com/nuxt/nuxt/pull/30832)) - **nuxt:** Assign slot to be rendered for client components ([#&#8203;30768](https://github.com/nuxt/nuxt/pull/30768)) - **nuxt,vite:** Do not override vite import conditions ([#&#8203;30887](https://github.com/nuxt/nuxt/pull/30887)) - **nuxt:** Prevent `keepalive` cache reset ([#&#8203;30807](https://github.com/nuxt/nuxt/pull/30807)) - **nuxt:** Remove `div` wrapper in client-only pages ([#&#8203;30425](https://github.com/nuxt/nuxt/pull/30425)) - **schema:** Update type import to `nitropack` ([aba75bd5a](https://github.com/nuxt/nuxt/commit/aba75bd5a)) - **vite:** Use resolveId from vite-node to resolve deps ([#&#8203;30922](https://github.com/nuxt/nuxt/pull/30922)) - **schema:** Normalise additional experimental options ([63e0c342c](https://github.com/nuxt/nuxt/commit/63e0c342c)) - **nuxt:** Delete existing properties in app config HMR ([#&#8203;30918](https://github.com/nuxt/nuxt/pull/30918)) - **schema:** Return `null` from resolve functions ([d68e8ce57](https://github.com/nuxt/nuxt/commit/d68e8ce57)) - **schema:** Check if `app.head.meta` values are undefined ([#&#8203;30959](https://github.com/nuxt/nuxt/pull/30959)) - **nuxt:** Make `shared/` directories available within layers ([#&#8203;30843](https://github.com/nuxt/nuxt/pull/30843)) - **kit:** Ensure nuxt is loaded from cwd rather than parent dir ([#&#8203;30910](https://github.com/nuxt/nuxt/pull/30910)) - **ui-templates:** Remove extra `<pre>` when rendering dev errors ([9aab69ec4](https://github.com/nuxt/nuxt/commit/9aab69ec4)) - **nuxt:** Use tsx loader for jsx blocks as well ([#&#8203;31014](https://github.com/nuxt/nuxt/pull/31014)) - Remove unimplemented `page:transition:start` type ([#&#8203;31040](https://github.com/nuxt/nuxt/pull/31040)) - **kit:** Expose module dependency errors ([#&#8203;31035](https://github.com/nuxt/nuxt/pull/31035)) - **nuxt:** Deprioritise layer css imports ([#&#8203;31020](https://github.com/nuxt/nuxt/pull/31020)) - **nuxt:** Ensure `provide` / `inject` work in `setup` of `defineNuxtComponent` ([#&#8203;30982](https://github.com/nuxt/nuxt/pull/30982)) - **nuxt:** Decode URI components in cache driver methods ([#&#8203;30973](https://github.com/nuxt/nuxt/pull/30973)) - **nuxt:** Use `_` for NuxtIsland name on server pages ([#&#8203;31072](https://github.com/nuxt/nuxt/pull/31072)) - **nuxt:** Use `ohash` to calculate legacy async data key without hash ([#&#8203;31087](https://github.com/nuxt/nuxt/pull/31087)) - **nuxt,schema:** Resolve `shared` dir from config ([#&#8203;31091](https://github.com/nuxt/nuxt/pull/31091)) - **kit,schema:** Set esbuild target for experimental decorators ([#&#8203;31089](https://github.com/nuxt/nuxt/pull/31089)) - **nuxt:** Set `nuxt.options.pages` to detected configuration ([#&#8203;31101](https://github.com/nuxt/nuxt/pull/31101)) - **nuxt:** Warn when `definePageMeta` does not receive an object ([#&#8203;31156](https://github.com/nuxt/nuxt/pull/31156)) - **nuxt:** Fix nitro import statements for v2 ([151cf7d49](https://github.com/nuxt/nuxt/commit/151cf7d49)) - **nuxt:** Update path to `no-ssr` middleware handler ([a99c59fbd](https://github.com/nuxt/nuxt/commit/a99c59fbd)) - **nuxt:** Align type of custom `navigate` with `vue-router` ([7a1934509](https://github.com/nuxt/nuxt/commit/7a1934509)) - **nuxt:** Show error page on island page error ([#&#8203;31081](https://github.com/nuxt/nuxt/pull/31081)) - **nuxt:** Do not render payloads if disabled, and correct regexp ([#&#8203;31167](https://github.com/nuxt/nuxt/pull/31167)) - **nuxt:** Add backwards-compatible serialisation for `nuxt.options.pages` ([fa480e0a0](https://github.com/nuxt/nuxt/commit/fa480e0a0)) - **ui-templates:** Escape inline scripts correctly in ui templates ([39c2b0a2c](https://github.com/nuxt/nuxt/commit/39c2b0a2c)) - **nuxt:** Add back fallback nuxtlink type signature ([a8856de59](https://github.com/nuxt/nuxt/commit/a8856de59)) - **kit:** Provide default extensions in `resolveModule` ([6fb5c9c15](https://github.com/nuxt/nuxt/commit/6fb5c9c15)) - **nuxt:** Provide default extensions in `resolveTypePath` ([a0f9ddfe2](https://github.com/nuxt/nuxt/commit/a0f9ddfe2)) - **nuxt:** Strip query before generating payload url ([34ddc2d2f](https://github.com/nuxt/nuxt/commit/34ddc2d2f)) - **schema:** Resolve workspaceDir to closest git config ([7a2fbce01](https://github.com/nuxt/nuxt/commit/7a2fbce01)) - **kit:** Include declaration files when resolving `compilerOptions.paths` ([835e89404](https://github.com/nuxt/nuxt/commit/835e89404)) - **nuxt:** Consolidate head component context ([#&#8203;31209](https://github.com/nuxt/nuxt/pull/31209)) - **nuxt:** Resolve shared externals to absolute paths ([#&#8203;31227](https://github.com/nuxt/nuxt/pull/31227)) - **nuxt:** Skip deep merge in dev mode for prototype keys ([#&#8203;31205](https://github.com/nuxt/nuxt/pull/31205)) - **schema:** Use `RawVueCompilerOptions` for unresolved `tsconfig` ([#&#8203;31202](https://github.com/nuxt/nuxt/pull/31202)) - **nuxt:** Ensure externals are resolved first ([#&#8203;31235](https://github.com/nuxt/nuxt/pull/31235)) - **nuxt:** Ensure we strip all chars in payload url ([4f067f601](https://github.com/nuxt/nuxt/commit/4f067f601)) - **nuxt:** Exempt nitro from import protections ([#&#8203;31246](https://github.com/nuxt/nuxt/pull/31246)) - **nuxt:** Normalise error url to pathname ([87b69c9ae](https://github.com/nuxt/nuxt/commit/87b69c9ae)) - **nuxt:** Ensure head components are reactive ([#&#8203;31248](https://github.com/nuxt/nuxt/pull/31248)) - **nuxt:** Preserve query/hash when calling `navigateTo` with replace ([#&#8203;31244](https://github.com/nuxt/nuxt/pull/31244)) - **nuxt:** Apply ignore rules to nitro `devStorage` ([#&#8203;31233](https://github.com/nuxt/nuxt/pull/31233)) - **nuxt:** Fall back to wasm if oxc native bindings are missing ([#&#8203;31190](https://github.com/nuxt/nuxt/pull/31190)) - **nuxt:** Pass `useFetch` function name on server for warning ([#&#8203;31213](https://github.com/nuxt/nuxt/pull/31213)) - **vite:** Prevent overriding server build chunks ([89a29e760](https://github.com/nuxt/nuxt/commit/89a29e760)) - **nuxt:** Strip query in `x-nitro-prerender` header ([2476cab9a](https://github.com/nuxt/nuxt/commit/2476cab9a)) ##### 💅 Refactors - **nuxt:** Prefer logical assignment operators ([#&#8203;31004](https://github.com/nuxt/nuxt/pull/31004)) - **nuxt:** Use `isEqual` from `ohash/utils` ([2e27cd30c](https://github.com/nuxt/nuxt/commit/2e27cd30c)) - **nuxt:** Update to `noScripts` route rule ([#&#8203;31083](https://github.com/nuxt/nuxt/pull/31083)) - **nuxt:** Re-organize internal `runtime/nitro` files ([#&#8203;31131](https://github.com/nuxt/nuxt/pull/31131)) - **nuxt:** Explicitly type internal request fetch ([54cb80319](https://github.com/nuxt/nuxt/commit/54cb80319)) - **nuxt:** Use relative imports ([1bce3dc3b](https://github.com/nuxt/nuxt/commit/1bce3dc3b)) - **nuxt:** Early return island response ([#&#8203;31094](https://github.com/nuxt/nuxt/pull/31094)) ##### 📖 Documentation - Tiny typo ([#&#8203;30799](https://github.com/nuxt/nuxt/pull/30799)) - Fix typo ([#&#8203;30817](https://github.com/nuxt/nuxt/pull/30817)) - Remove backslashes in `spaLoadingTemplate` example ([#&#8203;30830](https://github.com/nuxt/nuxt/pull/30830)) - Update path to nuxt binary ([8992c4ea0](https://github.com/nuxt/nuxt/commit/8992c4ea0)) - Add nuxt lifecycle ([#&#8203;30726](https://github.com/nuxt/nuxt/pull/30726)) - Add additional information about `NuxtPage` ([#&#8203;30781](https://github.com/nuxt/nuxt/pull/30781)) - Improve `navigateTo` docs with clearer structure and examples ([#&#8203;30876](https://github.com/nuxt/nuxt/pull/30876)) - Add auto import info about shared utils ([#&#8203;30858](https://github.com/nuxt/nuxt/pull/30858)) - Fix typo and improve data fetching examples ([#&#8203;30935](https://github.com/nuxt/nuxt/pull/30935)) - Clarify that local layers are scanned from `rootDir` ([27e356fe6](https://github.com/nuxt/nuxt/commit/27e356fe6)) - Fix typo ([#&#8203;30963](https://github.com/nuxt/nuxt/pull/30963)) - Update links to unhead sources ([6c520ef74](https://github.com/nuxt/nuxt/commit/6c520ef74)) - Fix typo ([#&#8203;30971](https://github.com/nuxt/nuxt/pull/30971)) - Add tips on how to override layers aliases ([#&#8203;30970](https://github.com/nuxt/nuxt/pull/30970)) - Add description for `vue:setup` and `app:data:refresh` hooks ([#&#8203;31001](https://github.com/nuxt/nuxt/pull/31001)) - Mention requirement to wrap middleware in `defineNuxtRouteMiddleware` ([#&#8203;31005](https://github.com/nuxt/nuxt/pull/31005)) - Add `port` option to preview command ([#&#8203;30999](https://github.com/nuxt/nuxt/pull/30999)) - Remove link to deleted nuxt 2 section ([#&#8203;31077](https://github.com/nuxt/nuxt/pull/31077)) - Link to the scripts releases page ([#&#8203;31095](https://github.com/nuxt/nuxt/pull/31095)) - Add `.nuxtrc` documentation ([#&#8203;31093](https://github.com/nuxt/nuxt/pull/31093)) - Fix typo in example command ([#&#8203;31112](https://github.com/nuxt/nuxt/pull/31112)) - Explain why headers not forwarded when using `$fetch` on the server ([#&#8203;31114](https://github.com/nuxt/nuxt/pull/31114)) - Fix links to nitro directory structure ([5a696176d](https://github.com/nuxt/nuxt/commit/5a696176d)) - Update to use `create nuxt` command ([fe82af4c9](https://github.com/nuxt/nuxt/commit/fe82af4c9)) - Update getCachedData types ([#&#8203;31208](https://github.com/nuxt/nuxt/pull/31208)) - Update code example for nightly release to default to `3x` ([a243f8fcf](https://github.com/nuxt/nuxt/commit/a243f8fcf)) - Clarify lifecycle behavior of `<NuxtPage>` during page changes ([#&#8203;31116](https://github.com/nuxt/nuxt/pull/31116)) - Mention workaround for `typedPages` in unhoisted pnpm setups ([#&#8203;31262](https://github.com/nuxt/nuxt/pull/31262)) ##### 📦 Build - **nuxt:** Add subpath imports for type support ([8ef3fcc4d](https://github.com/nuxt/nuxt/commit/8ef3fcc4d)) ##### 🏡 Chore - Remove second version of vitest ([bc9ac7349](https://github.com/nuxt/nuxt/commit/bc9ac7349)) - Bump bundle size ([c5e191165](https://github.com/nuxt/nuxt/commit/c5e191165)) - Add basic copilot instructions ([d47b830d3](https://github.com/nuxt/nuxt/commit/d47b830d3)) - Handle undefined author ([0161985c0](https://github.com/nuxt/nuxt/commit/0161985c0)) - Use logical or assignment ([#&#8203;30992](https://github.com/nuxt/nuxt/pull/30992)) - Reorder options object ([11e6b8398](https://github.com/nuxt/nuxt/commit/11e6b8398)) - Lint ([86c960c6f](https://github.com/nuxt/nuxt/commit/86c960c6f)) - Fix broken lockfile ([05501d2c8](https://github.com/nuxt/nuxt/commit/05501d2c8)) - Add `errx` dependency ([566418177](https://github.com/nuxt/nuxt/commit/566418177)) - Add additional dummy url to ignore ([bc101e4ae](https://github.com/nuxt/nuxt/commit/bc101e4ae)) - Ignore internal resolution errors in nuxt types ([0d54dc3f4](https://github.com/nuxt/nuxt/commit/0d54dc3f4)) - Bump octokit patch versions ([a477065b4](https://github.com/nuxt/nuxt/commit/a477065b4)) - Bump `@nuxtjs/mdc` typechecking dep ([f23683b26](https://github.com/nuxt/nuxt/commit/f23683b26)) - Ignore `nitro/renderer` templates ([b29c0e86b](https://github.com/nuxt/nuxt/commit/b29c0e86b)) ##### ✅ Tests - Add benchmarks for dev server initial build ([#&#8203;30742](https://github.com/nuxt/nuxt/pull/30742)) - Exclude urls from lychee crawler used in test suite ([8e2d9a640](https://github.com/nuxt/nuxt/commit/8e2d9a640)) - Prepare environment to ensure more reproducible dev tests ([bc89ef867](https://github.com/nuxt/nuxt/commit/bc89ef867)) - Update unit test ([5a71ef8ac](https://github.com/nuxt/nuxt/commit/5a71ef8ac)) - Add major version to unit test ([676447239](https://github.com/nuxt/nuxt/commit/676447239)) - Slightly improve coverage ([d992c0da9](https://github.com/nuxt/nuxt/commit/d992c0da9)) - Bump timeout for route hmr ([cbe38cf52](https://github.com/nuxt/nuxt/commit/cbe38cf52)) - Update unit test snapshot for jsx ([4910959b9](https://github.com/nuxt/nuxt/commit/4910959b9)) - Disable codspeed outside of ci ([71de708a0](https://github.com/nuxt/nuxt/commit/71de708a0)) - Add some more stability in hmr tests ([9a9fcdab5](https://github.com/nuxt/nuxt/commit/9a9fcdab5)) - Skip testing spa-preloader in dev ([6cf97bfe5](https://github.com/nuxt/nuxt/commit/6cf97bfe5)) - Fix time-based hydration test ([da3b39d67](https://github.com/nuxt/nuxt/commit/da3b39d67)) - Simplify further ([ad306f472](https://github.com/nuxt/nuxt/commit/ad306f472)) - Filter out dev server logs 🙈 ([ee040eea3](https://github.com/nuxt/nuxt/commit/ee040eea3)) - Update unit test snapshot ([97ec3143a](https://github.com/nuxt/nuxt/commit/97ec3143a)) - Provide nuxt extensions in unit test ([358729e96](https://github.com/nuxt/nuxt/commit/358729e96)) - Add benchmark for vite client build ([#&#8203;31118](https://github.com/nuxt/nuxt/pull/31118)) - Update build benchmark ([82ca08f93](https://github.com/nuxt/nuxt/commit/82ca08f93)) - Ensure dev tests have separate buildDirs ([d7623f884](https://github.com/nuxt/nuxt/commit/d7623f884)) - Update nitro type import ([8f61d0090](https://github.com/nuxt/nuxt/commit/8f61d0090)) - Update import to `#internal/nitro/app` ([a1b855cc5](https://github.com/nuxt/nuxt/commit/a1b855cc5)) - Try to improve dev test stability ([#&#8203;31218](https://github.com/nuxt/nuxt/pull/31218)) - Migrate hmr test to use playwright runner ([#&#8203;31241](https://github.com/nuxt/nuxt/pull/31241)) ##### ❤️ Contributors - Anoesj Sadraee ([@&#8203;Anoesj](https://github.com/Anoesj)) - Daniel Roe ([@&#8203;danielroe](https://github.com/danielroe)) - John Tanzer ([@&#8203;moshetanzer](https://github.com/moshetanzer)) - Connor Pearson ([@&#8203;cjpearson](https://github.com/cjpearson)) - Connor Roberts ([@&#8203;murshex](https://github.com/murshex)) - Harlan Wilton ([@&#8203;harlan-zw](https://github.com/harlan-zw)) - Alex Liu ([@&#8203;Mini-ghost](https://github.com/Mini-ghost)) - Kevin Deng 三咲智子 ([@&#8203;sxzz](https://github.com/sxzz)) - xjccc ([@&#8203;xjccc](https://github.com/xjccc)) - Julien Huang ([@&#8203;huang-julien](https://github.com/huang-julien)) - Michael Brevard ([@&#8203;GalacticHypernova](https://github.com/GalacticHypernova)) - Maik Kowol ([@&#8203;94726](https://github.com/94726)) - Anthony Fu ([@&#8203;antfu](https://github.com/antfu)) - Bobbie Goede ([@&#8203;BobbieGoede](https://github.com/BobbieGoede)) - Clayton Chew ([@&#8203;claytonchew](https://github.com/claytonchew)) - awfulness ([@&#8203;awfulness](https://github.com/awfulness)) - Sébastien Chopin ([@&#8203;atinux](https://github.com/atinux)) - Saeid Zareie ([@&#8203;Saeid-Za](https://github.com/Saeid-Za)) - Vahagn Zaqaryan ([@&#8203;Vahagn-Zaqaryan](https://github.com/Vahagn-Zaqaryan)) - Idorenyin Udoh ([@&#8203;idorenyinudoh](https://github.com/idorenyinudoh)) - Jonas Thelemann ([@&#8203;dargmuesli](https://github.com/dargmuesli)) - Ryota Watanabe ([@&#8203;wattanx](https://github.com/wattanx)) - Horu ([@&#8203;HigherOrderLogic](https://github.com/HigherOrderLogic)) - Nolhan ([@&#8203;Nonolanlan1007](https://github.com/Nonolanlan1007)) - Typed SIGTERM ([@&#8203;typed-sigterm](https://github.com/typed-sigterm)) - Hans Tu ([@&#8203;ChiaHanTu](https://github.com/ChiaHanTu)) - Damian Głowala ([@&#8203;DamianGlowala](https://github.com/DamianGlowala)) - David Marr ([@&#8203;marr](https://github.com/marr)) - Camille Coutens ([@&#8203;Kamsou](https://github.com/Kamsou)) - Charlie ✨ ([@&#8203;CharleeWa](https://github.com/CharleeWa)) - Hussain Panahy ([@&#8203;HP8585](https://github.com/HP8585)) - [@&#8203;beer](https://github.com/beer) ([@&#8203;iiio2](https://github.com/iiio2)) </details> --- ### 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. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45MS4wIiwidXBkYXRlZEluVmVyIjoiNDIuMTcuMCIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119-->
renovate-bot force-pushed renovate/major-nuxtjs-monorepo from 77300e3751 to e9bea135ab 2025-09-22 20:01:49 +00:00 Compare
renovate-bot force-pushed renovate/major-nuxtjs-monorepo from e9bea135ab to f79b35bac1 2025-09-23 17:01:45 +00:00 Compare
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/major-nuxtjs-monorepo:renovate/major-nuxtjs-monorepo
git switch renovate/major-nuxtjs-monorepo

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.

git switch master
git merge --no-ff renovate/major-nuxtjs-monorepo
git switch renovate/major-nuxtjs-monorepo
git rebase master
git switch master
git merge --ff-only renovate/major-nuxtjs-monorepo
git switch renovate/major-nuxtjs-monorepo
git rebase master
git switch master
git merge --no-ff renovate/major-nuxtjs-monorepo
git switch master
git merge --squash renovate/major-nuxtjs-monorepo
git switch master
git merge --ff-only renovate/major-nuxtjs-monorepo
git switch master
git merge renovate/major-nuxtjs-monorepo
git push origin master
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Beeebooo/TKO!3
No description provided.