nuxt/nuxt (@nuxt/kit)
### [`v3.13.0`](https://togithub.com/nuxt/nuxt/releases/tag/v3.13.0)
[Compare Source](https://togithub.com/nuxt/nuxt/compare/v3.12.4...v3.13.0)
##### 👀 Highlights
I'm pretty excited about this release - we've ported some features we had planned for Nuxt v4 back to v3, as well as a raft of bug fixes and performance improvements - as usual.
Here are a few of things I'm most excited about.
##### 🏘️ Route Groups
We now support naming directories with parentheses/brackets to organise your routes without affecting the path.
For example:
```bash [Directory structure]
-| pages/
---| index.vue
---| (marketing)/
-----| about.vue
-----| contact.vue
```
This will produce `/`, `/about` and `/contact` pages in your app. The `marketing` group is ignored for purposes of your URL structure.
Read more in [the original PR](https://togithub.com/nuxt/nuxt/pull/28276).
##### 🏝️ Islands and Head Metadata
It's now possible for server component islands to manipulate the head, such as by adding SEO metadata when rendering.
Read more in [#27987](https://togithub.com/nuxt/nuxt/pull/27987).
##### 🪝 Custom Prefetch Triggers
We now support custom prefetch triggers for `NuxtLink` ([#27846](https://togithub.com/nuxt/nuxt/pull/27846)).
For example:
```vue [pages/index.vue]
This will prefetch when hovered or when it gains focus
This will prefetch when hovered/focus - or when it becomes visible
```
It's also possible to enable/disable these globally for your app and override them per link.
For example:
```ts [nuxt.config.ts]
export default defineNuxtConfig({
experimental: {
defaults: {
nuxtLink: {
prefetch: true,
prefetchOn: { visibility: false, interaction: true }
}
}
}
})
```
##### 🗺️ Better Server Source Maps
When running with `node --enable-source-maps`, you may have noticed that the source maps for the Vue files in your server build pointed to the Vite build output (something like `.nuxt/dist/server/_nuxt/index-O15BBwZ3.js`).
Now, even after your Nitro build, your server source maps will reference your original source files ([#28521](https://togithub.com/nuxt/nuxt/pull/28521)).
Note that one of the easiest ways of improving your build performance is to turn off source maps if you aren't using them, which you can do easily in your `nuxt.config`:
```ts [nuxt.config.ts]
export default defineNuxtConfig({
sourcemap: {
server: false,
client: true,
},
})
```
##### 🎁 New Features for Module Authors
In the run-up to Nuxt v4, we're working on adding some key functionality for module authors, including a new `isNuxtMajorVersion` utility where required ([#27579](https://togithub.com/nuxt/nuxt/pull/27579)) and better inferred typing for merged module options using the new `defineNuxtModule().with()` method ([#27520](https://togithub.com/nuxt/nuxt/pull/27520)).
##### ✨ Improved Dev Warnings
We no longer warn when using data fetching composables in middleware ([#28604](https://togithub.com/nuxt/nuxt/pull/28604)) and we warn when user components' names begin with Lazy ([#27838](https://togithub.com/nuxt/nuxt/pull/27838)).
##### 🚨 Vue TypeScript Changes
For a while, in the Vue ecosystem, we've been augmenting `@vue/runtime-core` to add custom properties and more to `vue`. However, this inadvertently breaks the types for projects that augment `vue` - which is now the officially recommended in the docs way to augment these interfaces (for example, [ComponentCustomProperties](https://vuejs.org/api/utility-types.html#componentcustomproperties), [GlobalComponents](https://vuejs.org/guide/extras/web-components.html#web-components-and-typescript) and [so on](https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties)).
This means *all* libraries must update their code (or it will break the types of libraries that augment `vue` instead).
We've updated our types in Nuxt along these lines but you may experience issues with the latest `vue-router` when used with libraries which haven't yet done so.
Please create an issue with a reproduction - I'll happily help create a PR to resolve in the upstream library in question. Or you may be able to work around the issue by creating a `declarations.d.ts` in the root of your project with the following code ([credit]()):
```ts [declarations.d.ts]
import type {
ComponentCustomOptions as _ComponentCustomOptions,
ComponentCustomProperties as _ComponentCustomProperties,
} from 'vue';
declare module '@vue/runtime-core' {
interface ComponentCustomProperties extends _ComponentCustomProperties {}
interface ComponentCustomOptions extends _ComponentCustomOptions {}
}
```
##### ✅ Upgrading
As usual, our recommendation for upgrading is to run:
```sh
npx nuxi@latest upgrade --force
```
This will refresh your lockfile as well, and ensures that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
##### 👉 Changelog
[compare changes](https://togithub.com/nuxt/nuxt/compare/v3.12.4...v3.13.0)
##### 🚀 Enhancements
- **nuxt:** Await custom `routes` function in `router.options` ([#27644](https://togithub.com/nuxt/nuxt/pull/27644))
- **kit:** Add new `isNuxtMajorVersion` compatibility util ([#27579](https://togithub.com/nuxt/nuxt/pull/27579))
- **kit,schema:** Add `.with` for better module options types ([#27520](https://togithub.com/nuxt/nuxt/pull/27520))
- **nuxt:** Warn when user components' names begin with `Lazy` ([#27838](https://togithub.com/nuxt/nuxt/pull/27838))
- **nuxt:** Allow specifying app id when creating a nuxt app ([#28392](https://togithub.com/nuxt/nuxt/pull/28392))
- **nuxt:** Custom enable/disable hooks for `usePreviewMode` ([#28371](https://togithub.com/nuxt/nuxt/pull/28371))
- **kit:** Add `prepend` option to `addRouteMiddleware` ([#28496](https://togithub.com/nuxt/nuxt/pull/28496))
- **nuxt:** Allow organising pages within route groups ([#28276](https://togithub.com/nuxt/nuxt/pull/28276))
- **vite:** Preserve vite sourcemaps for nitro build ([#28521](https://togithub.com/nuxt/nuxt/pull/28521))
- **nuxt:** Allow defining triggers for prefetching links ([#27846](https://togithub.com/nuxt/nuxt/pull/27846))
- **nuxt:** Namespace `__NUXT__` when using multi-app ([#27263](https://togithub.com/nuxt/nuxt/pull/27263))
- **nuxt:** Allow server islands to manipulate head ([#27987](https://togithub.com/nuxt/nuxt/pull/27987))
##### 🔥 Performance
- **nuxt:** Call cookie `decode` function only for named cookie ([#28215](https://togithub.com/nuxt/nuxt/pull/28215))
- **nuxt:** Avoid making client-only component setup async ([#28334](https://togithub.com/nuxt/nuxt/pull/28334))
- **nuxt:** Avoid multiple calls to `getCachedData` ([#28472](https://togithub.com/nuxt/nuxt/pull/28472))
##### 🩹 Fixes
- **nuxt:** Don't warn for `definePageMeta` in client-only pages ([#28246](https://togithub.com/nuxt/nuxt/pull/28246))
- **kit:** Include module `dist/runtime/` in tsconfig includes ([#28237](https://togithub.com/nuxt/nuxt/pull/28237))
- **schema:** Support absolute/relative paths for `assetsDir` ([59f0099f4](https://togithub.com/nuxt/nuxt/commit/59f0099f4))
- **schema:** Do not override user `serverDir` ([#28249](https://togithub.com/nuxt/nuxt/pull/28249))
- **schema:** Use new options syntax for `vite-plugin-vue` ([#28307](https://togithub.com/nuxt/nuxt/pull/28307))
- **schema:** Export new module return types ([c0ad8db93](https://togithub.com/nuxt/nuxt/commit/c0ad8db93))
- **kit:** Add missing type import ([1a60b4541](https://togithub.com/nuxt/nuxt/commit/1a60b4541))
- **vite,webpack:** Handle local postcss plugins ([#28481](https://togithub.com/nuxt/nuxt/pull/28481))
- **nuxt:** Handle `scroll-padding-top: auto` in scrollBehavior ([#28320](https://togithub.com/nuxt/nuxt/pull/28320))
- **nuxt:** Ensure `runtimeConfig.public` is reactive on client ([#28443](https://togithub.com/nuxt/nuxt/pull/28443))
- **nuxt:** Update renamed stub composables from `nuxt/scripts` ([#28449](https://togithub.com/nuxt/nuxt/pull/28449))
- **nuxt:** Augment `@vue/runtime-core` and `@vue/runtime-dom` ([#28446](https://togithub.com/nuxt/nuxt/pull/28446))
- **nuxt:** Scan jsx pages for page metadata ([#28479](https://togithub.com/nuxt/nuxt/pull/28479))
- **nuxt:** Handle plugin type extensions more correctly ([#28480](https://togithub.com/nuxt/nuxt/pull/28480))
- **vite:** Respect `baseURL` for public assets in dev ([#28482](https://togithub.com/nuxt/nuxt/pull/28482))
- **vite:** Add transformation result to log for parse errors ([#28508](https://togithub.com/nuxt/nuxt/pull/28508))
- **vite:** Include module symbols in generated code ([#28509](https://togithub.com/nuxt/nuxt/pull/28509))
- **nuxt:** Add reason when aborting request in `useFetch` ([#28517](https://togithub.com/nuxt/nuxt/pull/28517))
- **nuxt:** Only augment `vue`, not sub-packages ([#28542](https://togithub.com/nuxt/nuxt/pull/28542))
- **nuxt:** Avoid stripping js extensions in plugin injections ([#28593](https://togithub.com/nuxt/nuxt/pull/28593))
- **nuxt:** Preserve route-specific metadata on `route.meta` ([#28441](https://togithub.com/nuxt/nuxt/pull/28441))
- **nuxt:** Don't warn when data fetching in middleware ([#28604](https://togithub.com/nuxt/nuxt/pull/28604))
- **nuxt:** Extract route rules/page meta in 2+ script blocks ([#28625](https://togithub.com/nuxt/nuxt/pull/28625))
- **nuxt:** Allow customising status code in `validate` method ([#28612](https://togithub.com/nuxt/nuxt/pull/28612))
- **nuxt:** Do not provide default `prefetchOn` prop ([#28630](https://togithub.com/nuxt/nuxt/pull/28630))
- **nuxt:** Revert back to object syntax for island head ([#28656](https://togithub.com/nuxt/nuxt/pull/28656))
##### 📖 Documentation
- Fix issue in cookie passing example ([#28223](https://togithub.com/nuxt/nuxt/pull/28223))
- Fix note in layers usage chapter ([#28236](https://togithub.com/nuxt/nuxt/pull/28236))
- Fix spaces ([#28233](https://togithub.com/nuxt/nuxt/pull/28233))
- Add `vue` lang to sample code ([#28247](https://togithub.com/nuxt/nuxt/pull/28247))
- Use `splitSetCookieString` from `cookie-es` ([29f95ae0d](https://togithub.com/nuxt/nuxt/commit/29f95ae0d))
- Use `headers.getSetCookie` ([45c6df9a4](https://togithub.com/nuxt/nuxt/commit/45c6df9a4))
- Fix codemod command typos ([#28279](https://togithub.com/nuxt/nuxt/pull/28279))
- `bunx` -> `bun x` ([#28277](https://togithub.com/nuxt/nuxt/pull/28277))
- Add missing comma to example ([#28300](https://togithub.com/nuxt/nuxt/pull/28300))
- Add language to example schema codeblock ([#28294](https://togithub.com/nuxt/nuxt/pull/28294))
- Update link to RuntimeNuxtHooks ([#28336](https://togithub.com/nuxt/nuxt/pull/28336))
- Update links to social media ([cd5195047](https://togithub.com/nuxt/nuxt/commit/cd5195047))
- Setup host property and usage example ([#28331](https://togithub.com/nuxt/nuxt/pull/28331))
- Fix TypeScript errors for examples ([#28403](https://togithub.com/nuxt/nuxt/pull/28403))
- Improve readability of link to mdn ([#28327](https://togithub.com/nuxt/nuxt/pull/28327))
- Use ts for create-error example ([#28411](https://togithub.com/nuxt/nuxt/pull/28411))
- Alias links in jsdoc `@see` blocks ([#28270](https://togithub.com/nuxt/nuxt/pull/28270))
- Link to vue test utils docs for `mountSuspended` ([#28463](https://togithub.com/nuxt/nuxt/pull/28463))
- Remove vue-tsc major version constraint ([#28484](https://togithub.com/nuxt/nuxt/pull/28484))
- Recommend '#teleports' target instead of 'body' ([#28489](https://togithub.com/nuxt/nuxt/pull/28489))
- Correct custom routing link ([#28497](https://togithub.com/nuxt/nuxt/pull/28497))
- Improve typing of default exports ([#28520](https://togithub.com/nuxt/nuxt/pull/28520))
- Fix `options` type in custom useFetch recipe ([#28389](https://togithub.com/nuxt/nuxt/pull/28389))
- Update useRuntimeConfig source path ([#28553](https://togithub.com/nuxt/nuxt/pull/28553))
- Add line-breaks to tips in Module Author Guide ([#28587](https://togithub.com/nuxt/nuxt/pull/28587))
- Update nuxt scripts status ([#28629](https://togithub.com/nuxt/nuxt/pull/28629))
##### 🏡 Chore
- **schema:** Fix typo ([#28377](https://togithub.com/nuxt/nuxt/pull/28377))
- **nuxt:** Use router code reference permalink ([#28356](https://togithub.com/nuxt/nuxt/pull/28356))
- **nuxt:** Remove unnecessary await ([#28407](https://togithub.com/nuxt/nuxt/pull/28407))
- Upgrade vue in a separate pr ([#28414](https://togithub.com/nuxt/nuxt/pull/28414))
- Update docs typecheck command ([49de5f731](https://togithub.com/nuxt/nuxt/commit/49de5f731))
- Lint ([cab9e5c35](https://togithub.com/nuxt/nuxt/commit/cab9e5c35))
- Fix some typos in comments ([#28501](https://togithub.com/nuxt/nuxt/pull/28501))
##### ✅ Tests
- Disable `pageTransition` in client-only page ([#27839](https://togithub.com/nuxt/nuxt/pull/27839))
- Ignore `SharedComponent` in server head ([510f3e28f](https://togithub.com/nuxt/nuxt/commit/510f3e28f))
- Update bundle size ([3ecb95a7c](https://togithub.com/nuxt/nuxt/commit/3ecb95a7c))
##### 🤖 CI
- Add reproduire-sur-stackblitz workflow ([#28531](https://togithub.com/nuxt/nuxt/pull/28531))
##### ❤️ Contributors
- Daniel Roe ([@danielroe](https://togithub.com/danielroe))
- Julien Huang ([@huang-julien](https://togithub.com/huang-julien))
- Maxime Pauvert ([@maximepvrt](https://togithub.com/maximepvrt))
- felix-dolderer ([@felix-dolderer](https://togithub.com/felix-dolderer))
- Nicolas Payot ([@nicolaspayot](https://togithub.com/nicolaspayot))
- Kewin Szlezingier ([@kewinzaq1](https://togithub.com/kewinzaq1))
- Vasily Kuzin ([@ExEr7um](https://togithub.com/ExEr7um))
- xjccc ([@xjccc](https://togithub.com/xjccc))
- Martin André ([@Martichou](https://togithub.com/Martichou))
- Mike Laumann Bellika ([@MikeBellika](https://togithub.com/MikeBellika))
- Typed SIGTERM ([@typed-sigterm](https://togithub.com/typed-sigterm))
- Horu ([@HigherOrderLogic](https://togithub.com/HigherOrderLogic))
- Son Tran ([@trandaison](https://togithub.com/trandaison))
- rubyisrust ([@rubyisrust](https://togithub.com/rubyisrust))
- Matej Černý ([@CernyMatej](https://togithub.com/CernyMatej))
- Riley Ho ([@rileychh](https://togithub.com/rileychh))
- Adam DeHaven ([@adamdehaven](https://togithub.com/adamdehaven))
- Potter ([@yxw007](https://togithub.com/yxw007))
- Martin Masevski ([@Archetipo95](https://togithub.com/Archetipo95))
- BoogieBen. ([@boogie-ben](https://togithub.com/boogie-ben))
- Tobias Diez ([@tobiasdiez](https://togithub.com/tobiasdiez))
- Michael Brevard ([@GalacticHypernova](https://togithub.com/GalacticHypernova))
- Damian Głowala ([@DamianGlowala](https://togithub.com/DamianGlowala))
- Lucie ([@lihbr](https://togithub.com/lihbr))
- Yasser Lahbibi ([@yassilah](https://togithub.com/yassilah))
- Sébastien Chopin ([@atinux](https://togithub.com/atinux))
- [@beer](https://togithub.com/beer) ([@iiio2](https://togithub.com/iiio2))
- AuroraTea ([@AuroraTea](https://togithub.com/AuroraTea))
- Bobbie Goede ([@BobbieGoede](https://togithub.com/BobbieGoede))
- Alexander Lichter ([@manniL](https://togithub.com/manniL))
- nuxt-studio\[bot] ([@nuxt-studio](https://togithub.com/nuxt-studio)\[bot])
- Vaci ([@vacijj](https://togithub.com/vacijj))
- FELIPE COSTA DE OLIVEIRA ([@FelipeO16](https://togithub.com/FelipeO16))
- 一纸忘忧 ([@ikxin](https://togithub.com/ikxin))
- Meo ([@miaobuao](https://togithub.com/miaobuao))
- Mohab Sameh ([@mohab-sameh](https://togithub.com/mohab-sameh))
- Quentin Macq ([@quentinmcq](https://togithub.com/quentinmcq))
- Johan Krijt ([@johankrijt](https://togithub.com/johankrijt))
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 these updates again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
3.12.4
->3.13.0
3.12.4
->3.13.0
3.12.4
->3.13.0
Release Notes
nuxt/nuxt (@nuxt/kit)
### [`v3.13.0`](https://togithub.com/nuxt/nuxt/releases/tag/v3.13.0) [Compare Source](https://togithub.com/nuxt/nuxt/compare/v3.12.4...v3.13.0) ##### 👀 Highlights I'm pretty excited about this release - we've ported some features we had planned for Nuxt v4 back to v3, as well as a raft of bug fixes and performance improvements - as usual. Here are a few of things I'm most excited about. ##### 🏘️ Route Groups We now support naming directories with parentheses/brackets to organise your routes without affecting the path. For example: ```bash [Directory structure] -| pages/ ---| index.vue ---| (marketing)/ -----| about.vue -----| contact.vue ``` This will produce `/`, `/about` and `/contact` pages in your app. The `marketing` group is ignored for purposes of your URL structure. Read more in [the original PR](https://togithub.com/nuxt/nuxt/pull/28276). ##### 🏝️ Islands and Head Metadata It's now possible for server component islands to manipulate the head, such as by adding SEO metadata when rendering. Read more in [#27987](https://togithub.com/nuxt/nuxt/pull/27987). ##### 🪝 Custom Prefetch Triggers We now support custom prefetch triggers for `NuxtLink` ([#27846](https://togithub.com/nuxt/nuxt/pull/27846)). For example: ```vue [pages/index.vue]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 these updates again.
This PR was generated by Mend Renovate. View the repository job log.