Releases: nuxt/nuxt
v3.14.1592
3.14.1592 is the next patch release.
👉 Changelog
🩹 Fixes
- rspack: Update
webpackbar
with support for rspack (#29823) - nuxt: Assign default name to component without setup (#29869)
- kit: Use
dst
to deduplicate templates when adding them (#29895) - nuxt: Handle empty plugin files (d44408e87)
- vite: Use resolved nuxt template
dst
to invalidate modules (6cd3352de) - nuxt: Return null map for empty plugin metadata (302a66da9)
- kit: Resolve module paths before appending subpaths (#29955)
- nuxt: Recompile templates on
change
events (#29954) - nuxt: Do not include
<NuxtWelcome>
when building (#29956) - nuxt: Allow scanning metadata from 2+ files at same path (#29969)
- nuxt: Do not disallow importing nitro dependencies (#29975)
💅 Refactors
- nuxt: Define layouts as async vue components (#29957)
📖 Documentation
- Update custom environment example (e3759ad55)
- Update minimal example (7973f5ed4)
- Add tip about islands directory (#29913)
- Fix typo in composable name (#29910)
- Rename @nuxt/auth to @nuxt/auth-utils in roadmap (#29906)
- Capitalize text (#29938)
- Improve clarity in seo meta example (#29930)
- Update getting started to include WebStorm (#29845)
🏡 Chore
- Remove unused imports and update eslint config (#29876)
✅ Tests
- Add import protection test (fbd5c33ba)
🤖 CI
- Remove release-pr workflow (2915f93c3)
❤️ Contributors
- Daniel Roe (@danielroe)
- Gustavo Aquino Torres Teixeira (@guska8)
- Stephanie Smith (@stephiescastle)
- @beer (@iiio2)
- Maxime Pauvert (@maximepvrt)
- crisarji (@crisarji)
- RBV1 (@RBV1)
- Adrien Foulon (@Tofandel)
- Julien Huang (@huang-julien)
- Horu (@HigherOrderLogic)
- Jan-Niklas W. (@niklas-wortmann)
v3.14.159
3.14.159 is a hotfix release to address regressions in v3.14.
We're leaning into the π theme - future patch releases of this minor version will just continue adding digits. (Sorry for any inconvenience! 😆)
👉 Changelog
🩹 Fixes
- nuxt: Update nitropack preset directory (#29780)
- kit: Fall back to meta version if there's no
module.json
(#29793) - kit: Use
mlly
to resolve module paths to avoid cjs fallback (#29799) - webpack,rspack: Add adapter for
webpack-dev-middleware
(#29806) - nuxt: Remove null-byte prefix for virtual files (#29809)
- kit: Convert module path to file url before reading meta (fb833ac64)
📖 Documentation
- Capitalize titles (#29768)
- Fix rou3 link in nitro.js (#29775)
- Fix tip formatting (#29792)
- Add link to h3 blogpost (#29794)
- Remove outdated cloudflare tip (auto minify deprecated) (#29812)
🏡 Chore
- nuxt: Remove redundant type (#29810)
❤️ Contributors
- Daniel Roe (@danielroe)
- xjccc (@xjccc)
- Efraim (@EfraimGENC)
- Aurion SARL (@Aurion72)
- Erik Lilja (@Lilja)
- Markus Oberlehner (@maoberlehner)
- Lukas Bauer (@luxterful)
- @beer (@iiio2)
v3.14.0
3.14.0 is the next minor release.
👀 Highlights
Behind the scenes, a lot has been going on in preparation for the release of Nuxt v4 (particularly on the unjs
side with preparations for Nitro v3!)
⚡️ Faster starts powered by jiti
Loading the nuxt config file, as well as modules and other build-time code, is now powered by jiti
v2. You can see more about the release in the jiti v2 release notes, but one of the most important pieces is native node esm import (where possible), which should mean a faster start. ✨
📂 Shared folder for code and types shared with client/server
You should never import Vue app code in your nitro code (or the other way around). But this has meant a friction point when it comes to sharing types or utilities that don't rely on the nitro/vue contexts.
For this, we have a new shared/
folder (#28682). You can't import Vue or nitro code into files in this folder, but it produces auto-imports you can consume throughout the rest of your app.
If needed you can use the new #shared
alias which points to this folder.
The shared folder is alongside your server/
folder. (If you're using compatibilityVersion: 4
, this means it's not inside your app/
folder.)
🦀 rspack
builder
We're excited to announce a new first-class Nuxt builder for rspack
. It's still experimental but we've refactored the internal Nuxt virtual file system to use unplugin
to make this possible.
Let us know if you like it - and feel free to raise any issues you experience with it.
👉 To try it out, you can use this starter - or just install @nuxt/rspack-builder
and set builder: 'rspack'
in your nuxt config file.
✨ New composables
We have new useResponseHeader
and useRuntimeHook
composables (#27131 and #29741).
🔧 New module utilities
We now have a new addServerTemplate
utility (#29320) for adding virtual files for access inside nitro runtime routes.
🚧 v4 changes
We've merged some changes which only take effect with compatibilityVersion: 4
, but which you can opt-into earlier.
-
previously, if you had a component like
~/components/App/Header.vue
this would be visible in your devtools as<Header>
. From v4 we ensure this is<AppHeader>
, but it's opt-in to avoid breaking any manual<KeepAlive>
you might have implemented. (#28745). -
Nuxt scans page metadata from your files, before calling
pages:extend
. But this has led to some confusing behaviour, as pages added at this point do not end up having their page metadata respected. So we now do not scan metadata before callingpages:extend
. Instead, we have a newpages:resolved
hook, which is called afterpages:extend
, after all pages have been augmented with their metadata. I'd recommend opting into this by settingexperimental.scanPageMeta
toafter-resolve
, as it solves a number of bugs.
🗺️ Roadmap to v3.15
They didn't quite make it in time for v3.14 but for the next minor release you can expect (among other things):
- auto-imported directives from modules (#29203)
- 'isolated' page renders (#29366)
- delayed hydration (#26468)
✅ Upgrading
As usual, our recommendation for upgrading is to run:
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
🚀 Enhancements
- deps: Upgrade to latest version of jiti (#27995)
- kit,nuxt,vite,webpack: Reimplement cjs utils using
jiti
(#29073) - nuxt: Normalise component names to match nuxt pattern (#28745)
- kit,schema: Add
addServerTemplate
utility (#29320) - nuxt: Add
useResponseHeader
composable (#27131) - rspack,webpack: Add
rspack
builder (#29142) - nuxt,schema:
pages:resolved
hook + scan meta post extend (#28861) - nuxt: Allow enabling route props in
definePageMeta
(#29586) - schema,nuxt: Add
shared/
folder and#shared
alias (#28682) - nuxt: Allow chunk error or manifest update -> reload (#28160)
- nuxt: Add
useRuntimeHook
composable (#29741)
🔥 Performance
- nuxt: Remove unneeded second call to
useNuxtApp
(#29514) - vite: Avoid redundant postcss plugins overwrite (#29619)
- kit,nuxt,vite,webpack: Hoist regex patterns (#29620)
🩹 Fixes
- nuxt: Simplify plugin
InjectionType
template conditional (#29023) - nuxt: Access server build from
webpack
memfs (#29027) - nuxt: Do not resolve non-absolute component paths (#29036)
- nuxt: Defer unsetting error handler until suspense resolves (#29037)
- nuxt: Pass
DOMException
as fetch abort exception (#29058) - vite: Don't force protocol if disabled
devServer.https
(#29049) - nuxt: Empty nitro
buildDir
in dev mode (#29068) - nuxt: Don't resolve relative import type paths for deps (#29069)
- kit: Handle passing 'bare' relative paths to modules (c7fecd8a1)
- kit: Try resolving module path from each node_modules dir (70a622d43)
- kit,vite,webpack: Resolve postcss paths from each modules dir (#29096)
- kit,vite,webpack: Strip
node_modules/
from parent urls (5bd42c893) - nuxt: Add
crossorigin
attribute for stylesheets (#29138) - nuxt: Use
routeRules
to hint pages to prerender (#29172) - nuxt: Pass absolute external link urls to
link:prefetch
(#29321) - nuxt: Error on build when required module is missing (#29287)
- nuxt: Prevent 404 when hitting component test endpoint (cb725f014)
- nuxt: Avoid throwing 404 error before middleware finishes (#29054)
- schema: Use
ConfigLayer
type fromc12
(#29370) - nuxt: Fix nested page types in
typedPages
(#29352) - nuxt: Allow islands to manipulate head client-side (#29186)
- vite: Dim repeat count in logs (#29392)
- schema: Mark
configFile
as required in layer type (3bbcd7d21) - nuxt: Remove vue compiler hints from auto import (#29713)
- vite: Update signature for
createIsExternal
(686be8168) - nuxt: Respect existing
props
value indefinePageMeta
(#29683) - schema: Hoist
nitropack/types
to ensure api routes are typed (54096875e)
💅 Refactors
- nuxt: Use
addBuildPlugin
internally (#29157) - nuxt,schema,vite,webpack: Use unplugin for vfs (#29165)
📖 Documentation
- Use
defineNuxtComponent
instead ofdefineComponent
(#29011) - Remove duotone icons for clarity (#29040)
- Fix typo (#29045)
- Remove specific Nuxt 4 release date (#29151)
- Remove redundant newlines and indentations (#29190)
- Add links to short videos from daniel (#29185)
- Fix comments typo in auto-imports example (#29195)
- Add missing word (#29230)
- Add a section about
useRequestFetch
andevent.$fetch
(#29099) - Add example of typing custom
useFetch
errors (#29253) - Ensure manifest code snippet works with pnpm (#29273)
- Consistent directory structure (#29292)
- Update to new
ofetch
...
v3.13.2
3.13.2 is the next regularly scheduled patch release.
✅ Upgrading
As usual, our recommendation for upgrading is to run:
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
🔥 Performance
- nuxt: Remove interop default for dynamic components (#28912)
🩹 Fixes
- nuxt: Fix ssr log querySelector (#28864)
- schema: Enable
propsDestructure
by default (#28830) - nuxt: Ensure injected
route
has enumerable keys (#28841) - nuxt: Don't override vue instance with legacy
asyncData
(#28842) - nuxt: Render server errors with
ssr: false
(#28834) - nuxt: Resolve full component paths (#28843)
- nuxt: Improve accuracy of module resolution conditions (#28846)
- nuxt: Log more context of prerendering errors (#28895)
- nuxt: Enable
injectAtEnd
to reduce circular auto-imports (#28822) - nuxt: Ensure we process files in
buildDir
for unimport (#28899) - nuxt: Do not accept attrs on
<NuxtErrorBoundary>
(#28901) - nuxt,schema: Accept any module in inline
modules
array (#28922) - nuxt: Fall back to original component
filePath
(#28925) - nuxt: Make
runWithContext
generic (#28926) - nuxt: Set
inheritAttrs: false
for fragment components (#28939) - nuxt: Use case-insensitive regexp for
<script>
blocks (4fd24381c) - nuxt: Ensure component imports are injected last (#28944)
- nuxt: Catch chunk errors directly in navigation (820908696)
- nuxt: Add missing
isNuxtMajorVersion
export (#29016) - nuxt: Correct type for
useError
(#28996)
💅 Refactors
- nuxt: Use
vite:preloadError
event (#28862)
📖 Documentation
- Add known limitations for app.config.ts (#28875)
- Typo fixed missing closing angle bracket (#28880)
- Update useFetch troubleshooting section (#28918)
- Capitalize text (#28972)
- Fix typo (#28983)
- Add clarity to
useFetch
parameter signature (#28993) - Remove confusing reference to 'SPA' (#28991)
🏡 Chore
- Use consola to log out compatibility info (#28854)
- vite: Use correct type import (3f508d521)
- Enable
noUncheckedSideEffectImports
(#28903) - Add
pending triage
to blank issues (#28923) - Correct comment style (c4181b5a2)
- Fix typos (462380d45)
- Refresh lockfile, use
htmlnano
+ pin workflow deps (#28946) - Pin dep + workflow by hash (4d81334c9)
- ui-templates: Use class-selector (043329f52)
✅ Tests
- Collect bundle sizes in parallel (1ce81069d)
- Add regression test for using
route
in template (#28967) - Convert set to array (6ee3b3adc)
- Switch inline snapshot to object comparison (ae5135363)
🤖 CI
- Access issue number from payload (8e4585c14)
- Configure codeql to ignore tests (d5f98a757)
- Add default permissions for workflows (3ede01cd4)
- Scan source files with codeql (#28943)
- Skip setting up node before codeql scan (c4d7c92e9)
❤️ Contributors
- Daniel Roe (@danielroe)
- Artem Maslov (@Twocram)
- Paulo Ricardo Severo (@prsevero)
- Nishant Aanjaney Jalan (@cybercoder-naj)
- @beer (@iiio2)
- Julien Huang (@huang-julien)
- Liran Tal (@lirantal)
- Anthony Fu (@antfu)
- Osama Abdallah Essa Haikal (@OsamaHaikal)
v3.13.1
3.13.1 is the next regularly scheduled patch release.
👀 Highlights
Although this is a patch release, there are two features I'd love to draw your attention to.
- 🆔
useId
now uses a built-in Vue composable for stable ids between server + client! #28285 - 🔥 a new
experimental.buildCache
feature now allows for quicker app rebuilds #28726
As always, feedback is appreciated 🙏 ❤️
✅ Upgrading
As usual, our recommendation for upgrading is to run:
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
🔥 Performance
- nuxt: Cache vue app build outputs (#28726)
- nuxt: Use
ServerPlaceholder
for ssr client components (#28563) - nuxt: Use reducer array + handle modified proto (#28768)
🩹 Fixes
- schema: Resolve user-provided
serverDir
relative to root (#28700) - nuxt: Handle mismatching declaration/plugin extensions (#28709)
- nuxt: Do not accept arbitrary strings for
MiddlewareKey
(#28676) - nuxt: Do not pass listeners to custom
NuxtLink
(#28738) - nuxt: Generate basic jsdoc for module config entry (#27689)
- nuxt: Augment
NuxtOptions
as well as config (#28747) - nuxt: Improve error logging in import protections (#28753)
- nuxt: Handle deleted cookies from
CookieStore
events (#28760) - nuxt: Allow updating
appConfig
with non-iterable objects (#28773) - nuxt: Improve
isNuxtError
type inference (#28814)
💅 Refactors
- nuxt: Update to vue v3.5 + native
useId
(#28285)
📖 Documentation
- Fix typo (#28724)
- Update broken/redirected links (#28739)
- Capitalize text (#28734)
- Updated line number for nuxt build-time hooks (#28746)
- Add missing
query
returned value fromuseRoute()
(#28743) - Persist package manager choice in code blocks (#28514)
- Fix postcss codeblock typo (#28801)
- Include
--frozen-lockfile
when installing dependencies (#28794)
🏡 Chore
- Use
tinyexec
internally (#28684) - Use
tinyglobby
internally (#28686) - Trim tag (#28687)
- Fix ci typo (#28721)
- Tidying workflows + add sherif workflow (#28793)
- Ignore eslint warnings about console logging (#28795)
✅ Tests
- Update bundle size (99df4c222)
❤️ Contributors
- Gianluca Di Francesco (@gianlucadifrancesco)
- Daniel Roe (@danielroe)
- Joaquín Sánchez (@userquin)
- Heb (@Hebilicious)
- Eckhardt (Kaizen) Dreyer (@Eckhardt-D)
- Gustav Odinger (@gustavwilliam)
- Julien Huang (@huang-julien)
- Ismail Sabet (@ismailsabet)
- Max (@onmax)
- Anthony Fu (@antfu)
- @beer (@iiio2)
- riskrole (@riskrole)
- Thimo Sietsma (@th1m0)
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:
-| 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.
🏝️ 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.
🪝 Custom Prefetch Triggers
We now support custom prefetch triggers for NuxtLink
(#27846).
For example:
<template>
<div>
<NuxtLink prefetch-on="interaction">
This will prefetch when hovered or when it gains focus
</NuxtLink>
<!-- note that you probably don't want both enabled! -->
<NuxtLink :prefetch-on="{ visibility: true, interaction: true }">
This will prefetch when hovered/focus - or when it becomes visible
</NuxtLink>
</div>
</template>
It's also possible to enable/disable these globally for your app and override them per link.
For example:
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).
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
:
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) and better inferred typing for merged module options using the new defineNuxtModule().with()
method (#27520).
✨ Improved Dev Warnings
We no longer warn when using data fetching composables in middleware (#28604) and we warn when user components' names begin with Lazy (#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, GlobalComponents and so on).
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):
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:
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
🚀 Enhancements
- nuxt: Await custom
routes
function inrouter.options
(#27644) - kit: Add new
isNuxtMajorVersion
compatibility util (#27579) - kit,schema: Add
.with
for better module options types (#27520) - nuxt: Warn when user components' names begin with
Lazy
(#27838) - nuxt: Allow specifying app id when creating a nuxt app (#28392)
- nuxt: Custom enable/disable hooks for
usePreviewMode
(#28371) - kit: Add
prepend
option toaddRouteMiddleware
(#28496) - nuxt: Allow organising pages within route groups (#28276)
- vite: Preserve vite sourcemaps for nitro build (#28521)
- nuxt: Allow defining triggers for prefetching links (#27846)
- nuxt: Namespace
__NUXT__
when using multi-app (#27263) - nuxt: Allow server islands to manipulate head (#27987)
🔥 Performance
- nuxt: Call cookie
decode
function only for named cookie (#28215) - nuxt: Avoid making client-only component setup async (#28334)
- nuxt: Avoid multiple calls to
getCachedData
(#28472)
🩹 Fixes
- nuxt: Don't warn for
definePageMeta
in client-only pages (#28246) - kit: Include module
dist/runtime/
in tsconfig includes (#28237) - schema: Support absolute/relative paths for
assetsDir
(59f0099f4) - schema: Do not override user
serverDir
(#28249) - schema: Use new options syntax for
vite-plugin-vue
(#28307) - schema: Export new module return types (c0ad8db93)
- kit: Add missing type import (1a60b4541)
- vite,webpack: Handle local postcss plugins (#28481)
- nuxt: Handle
scroll-padding-top: auto
in scrollBehavior (#28320) - nuxt: Ensure
runtimeConfig.public
is reactive on client (#28443) - nuxt: Update renamed stub composables from
nuxt/scripts
(#28449) - nuxt: Augment
@vue/runtime-core
and@vue/runtime-dom
(#28446) - nuxt: Scan jsx pages for page metadata (#28479)
- nuxt: Handle plugin type extensions more correctly (#28480)
- vite: Respect
baseURL
for public assets in dev (#28482) - vite: Add transformation result to log for parse errors (#28508)
- vite: Include module symbols in generated code (#28509)
- nuxt: Add reason when aborting request in
useFetch
(#28517) - nuxt: Only augment
vue
, not sub-packages (#28542) - nuxt: Avoid stripping js extensions in plugin injections (#28593)
- nuxt: Preserve route-specific metadata on
route.meta
(#28441) - nuxt: Don't warn when data fetching in middleware (#28604)
- nuxt: Extract route rules/page meta in 2+ script blocks (#28625)
- nuxt: Allow customising status code in
validate
method (#28612) - nuxt: Do not provide default
prefetchOn
prop (#28630) - nuxt: Revert back to object syntax for island head (#28656)
📖 Documentation
- Fix issue in cookie passing example (#28223)
- Fix note in layers usage chapter ([#28236](https://github.com/nuxt/...
v3.12.4
3.12.4 is the next regularly scheduled patch release.
👉 Changelog
🔥 Performance
- vite: Start warmups after nitro build (#27963)
- vite: Avoid extra resolve call for
resolveId
in layers (#27971) - kit,nuxt,schema,vite,webpack: Use explicit exports (#27998)
🩹 Fixes
- schema: Resolve public alias correctly (#27975)
- nuxt: Omit rendering payload prefetch when
noScripts
(#27972) - nuxt: Add
/
as fallback if page can't be identified (e6109b226) - ui-templates: Validate templates with
html-validate
(#28024) - schema: Don't constrain postcss plugin options (#28045)
- kit: Remove exports from v4 branch (5c8312e9b)
- nuxt: Use
unhead
key for ad-hoc module options (#28088) - nuxt: Use native vue-router composables (#28114)
- kit: Ensure
getNuxtVersion
returnsstring
(#28125) - nuxt: Always prerender at least one page with crawler (#28131)
- nuxt: Consider doc
scroll-padding-top
in scrollBehavior (#28083) - nuxt: Only warn when
useAsyncData
returns undefined (#28154) - nuxt: Revert change to
getCachedData
null response (d10cea11b) - schema: Don't use
app/
assrcDir
if it doesn't exist (#28176) - kit: Normalise
serverDir
within layers using v4 compat (#28177) - nuxt: Allow
getCachedData
to return undefined (#28187) - nuxt: Use
addEventListener
to register cookie store listener (#28193) - nuxt: Merge route meta properties with scanned meta (#28170)
- nuxt: Prevent duplicate
set-cookie
headers (#28211)
💅 Refactors
- schema,vite,webpack: Rework
postcss
module loading (#27946) - nuxt: Remove
_registeredComponents
from ssrContext (#27819) - nuxt: Use
errx
to handle dev log traces (#28027)
📖 Documentation
- Fix link (83bd4fde9)
- Fix Cloudflare spelling (#27989)
- Update example to use
nuxtApp.runWithContext
(#28000) - Remove deprecated
pending
variable from data fetching docs (#28011) - Clarify xrsp danger (#28053)
- Deprecate pending and emphasis undefined (#28113)
- Update phrasing in route announcer (#28108)
- Use code groups for install commands in module guide (#28094)
- Capitalize text (#28056)
- Mention content in upgrade guide v4 folder structure (#28090)
- Remove a resolved issue from view transition docs (#28091)
- Clarify navigateTo is not for nitro routes (#28092)
- Warn about nested islands (#28062)
- Add info about
layers/
directory (#28128) - Codemods for migrating to Nuxt 4 (#28072)
✅ Tests
- Add
typeCheck
test in minimal build (#28166)
🤖 CI
❤️ Contributors
- Daniel Roe (@danielroe)
- arshcodemod (@arshcodemod)
- xjccc (@xjccc)
- Julien Huang (@huang-julien)
- BoogieBen (@boogie-ben)
- Santiago A (@santiagoaloi)
- Bobbie Goede (@BobbieGoede)
- John Tanzer (@moshetanzer)
- Thomas (@ThomasWT)
- @beer (@iiio2)
- Dominic (@rexhent)
- Alex Liu (@Mini-ghost)
- Florian Metz (@Timeraa)
- Liran Tal (@lirantal)
- Daniel Kelly (@danielkellyio)
- Daniel Flanagan (@FlantasticDan)
- 山吹色御守 (@KazariEX)
- izzy goldman (@izzygld)
- Anthony Fu (@antfu)
v3.12.3
3.12.3 is the next regularly scheduled patch release.
👉 Changelog
🔥 Performance
- nuxt,vite: Use native fs utils rather than
fs-extra
(#27787) - schema: Use
chokidar
when a customsrcDir
is provided (#27871) - nuxt: Ensure
prefetchComponents
is treeshaken on server (#27905)
🩹 Fixes
- nuxt: Flag async data promise as cancelled only if defined (#27690)
- schema: Handle backwards compat for
dir.app
(0c73cb734) - nuxt: Support hoisting types of subpath imports (#27720)
- nuxt: Resolve routes when
navigateTo
called withopen
(#27742) - nuxt: Handle subpaths more correctly (d7402a799)
- nuxt: Delay navigation until user input is acknowledged (#27743)
- nuxt: Resolve aliases used in nitro plugin paths (#27741)
- schema: Do not use full path assets/public aliases (d0518650f)
- nuxt: Defer registering inp handler until nuxt is mounted (866a5319a)
- nuxt: Add
refresh
type in server component refs (#27778) - nuxt: Extract all-literal page meta (#27821)
- kit: Handle loading nuxt 4+ (cf251bd48)
- nuxt: Handle external links to named route objects (#27829)
- nuxt: Use URL to encode redirected URLs (#27822)
- nuxt: Don't use app version when verifying nuxt deps (#27864)
- nuxt: Prompt to set compatibility date with latest nitro (#27893)
- nuxt: Add
#vue-router
alias for backwards compat (#27896) - nuxt: Move app augments to core
nuxt
types (#27900) - nuxt: Pass augmented pages to child paths (ecb35d3a2)
- nuxt: Use pascal name when loading server component (#27928)
- nuxt: Improve async data warning (#27874, #27934)
- nuxt: Allow configuring server components in modules (#27936)
- vite: Omit css
?raw
from head when in dev mode (#27940) - kit,nuxt: Ensure webworker types are available (4cab71d66)
- nuxt: Seed crawler when prerendering pages (#27955)
- vite: Fix type issue with legacy dev bundler (f9fa1a3e9)
- nuxt: Improve dx around compatibility date prompt (#27965)
💅 Refactors
- kit,nuxt: Use
performance.now
to measure time (d14f7ec46)
📖 Documentation
- Add referral query variable to Vue School Links (#27670)
- Fix variable name (#27675)
- Clarify how transitions are configured globally (#27679)
- Remove outdated recommendation (#27691)
- Add
refreshCookie
onuseCookie
doc page (#27744) - Sync changes from
main
branch (e7fbc9f81) - Remove outdated tip (#27773)
- Warn about awaiting
useFetch
/AsyncData
in wrappers (#27785) - Update some code groups with package manager examples (#27791)
- Hint to use runtime config (#27859)
- Use internal link (#27883)
- Update links to
vue-router
docs (#27895) - Use internal link (#27894)
- Remove warning about type checking (#27911)
compatibilityVersion
is available in the latest release (#27919)- Update roadmap + readme (748bc751d)
- Update
Nuxt 3
->Nuxt
orNuxt 3+
(3c16c890c) - Update reference to nightly release for testing nuxt 4 (5d2dc9714)
- Remove duplicate server-side notice in runtime config (#27929)
- Warn about ref unwrapping when auto-importing
ref
s (#27933) - Mention layers in directory guide (c222fe7aa)
🏡 Chore
- Use absolute urls for sources to assets in readme (5ef305cec)
- Use relative links and update in build script (7dd15186e)
- Use backup file extension (a42a3869b)
- Allow changelogs with breaking changes (e11587189)
- Allow major bumps (dea0b86c7)
- Add
4x
tag for v4 nightly releases (9d5dd5494) - vite: Restore utils required for
dev-bundler
(e3448fa0d) - Remove nitro/h3 from renovate, and reenable vitejs/vue (9037b0d2c)
- Improve type safety with indexed access (#27626)
- Add @danielroe to code owners (7fa957729)
- Remove renovate configuration from
2.x
branch (8003cf72f) - Remove issue template for 2.x (9f9fb9251)
- Remove unused variable (f07969d88)
✅ Tests
- schema: Normalize snapshot paths for windows (#27654)
- nuxt: Normalize paths for windows (#27653)
- Bump timeout for node-compat test (228b8b889)
- Slightly improve test reliability (#27811)
🤖 CI
- Update changelog from 3.x branch updates (2b6967fbb)
- Add 3x tag instead (c0ef279f2)
- Run workflows against 3.x branch as well (31255a14d)
- Use correct SHA calculation for release-pr action (#27604)
- Resolve bash syntax error (#27789)
- Only run scorecards against
main
branch (7abd982f8) - Raise renovate prs against 3.x branch too (f176c150a)
- Ignore
@vitejs/plugin-vue
again (56660cbdd) - Prevent more than one release from occurring at same time (71705550f)
- Don't run changelog update on 2.x branch (1be639364)
❤️ Contributors
- Daniel Roe (@danielroe)
- Typed SIGTERM (@typed-sigterm)
- Seno (@s-en-o)
- Julien Huang (@huang-julien)
- Michael Brevard (@GalacticHypernova)
- Ryota Watanabe (@wattanx)
- Martin Masevski (@Archetipo95)
- Alex Liu (@Mini-ghost)
- Bochkarev Ivan (@Ibochkarev)
- Alexander Lichter (@manniL)
- Dominic (@rexhent)
- Aviv Keller (@RedYetiDev)
- Maxime Pauvert (@maximepvrt)
- Daniel Kelly (@danielkellyio)
- Damian Głowala (@DamianGlowala)
- Idorenyin Udoh (@idorenyinudoh)
v2.18.1
👉 Changelog
🩹 Fixes
- webpack: Depend on earlier version of
mkdirp
(f67056b9e)
❤️ Contributors
- Daniel Roe (@danielroe)
v2.18.0
👉 Changelog
🚀 Enhancements
- webpack: Migrate to
memfs
(#27652)
🩹 Fixes
- vue-app: Don't throw if we can't read
sessionStorage
(#27662) - config: Add back md4 monkey-patch for wider ecosystem (#27865)
🏡 Chore
- Bump internal versions (9e829b59a)
- Add non-applicable advisory GHSA-3h5v-q93c-6h6q (5ef7311f0)
❤️ Contributors
- Daniel Roe (@danielroe)