v3.6.0-alpha.1
-
Please see About Vapor Mode section below for details.
- reactivity: refactor reactivity core by porting alien-signals (#12349) (313dc61)
- css-vars: nullish v-bind in style should not lead to unexpected inheritance (#12461) (c85f1b5), closes #12434 #12439 #7474 #7475
- reactivity: ensure multiple effectScope
on()
andoff()
calls maintains correct active scope (#12641) (679cbdf) - reactivity: queuing effects in an array (#13078) (826550c)
- reactivity: toRefs should be allowed on plain objects (ac43b11)
- scheduler: improve error handling in job flushing (#13587) (94b2ddc)
- scheduler: recover nextTick from error in post flush cb (2bbb6d2)
Vapor Mode is a new compilation mode for Vue Single-File Components (SFC) with the goal of reducing baseline bundle size and improved performance. It is 100% opt-in, and supports a subset of existing Vue APIs with mostly identical behavior.
Vapor Mode has demonstrated the same level of performance with Solid and Svelte 5 in 3rd party benchmarks.
Vapor Mode is available starting in Vue 3.6 alpha. Please note it is still incomplete and unstable during the alpha phase. The current focus is making it available for wider stability and compatibility testing. For now, we recommend using it for the following cases:
- Partial usage in existing apps, e.g. implementing a perf-sensitive sub page in Vapor Mode.
- Build small new apps entirely in Vapor Mode.
We do not recommend migrating eixsting components to Vapor Mode yet.
Things that do not work in this version yet:
- SSR hydration* (which means it does not work with Nuxt yet)
- Async Component*
- Transition*
- KeepAlive*
- Suspense
Features marked with * have pending PRs which will be merged during the alpha phase.
Vapor Mode only works for Single File Components using <script setup>
. To opt-in, add the vapor
attribute to <script setup>
:
<script setup vapor>
// ...
</script>
Vapor Mode components are usable in two scenarios:
-
Inside a Vapor app instance create via
createVaporApp
. Apps created this way avoids pulling in the Virtual DOM runtime code and allows bundle baseline size to be drastically reduced. -
To use Vapor components in a VDOM app instance created via
createApp
, thevaporInteropPlugin
must be installed:import { createApp, vaporInteropPlugin } from 'vue' import App from './App.vue' createApp(App) .use(vaporInteropPlugin) // enable vapor interop .mount('#app')
A Vapor app instance can also install
vaporInteropPlugin
to allow vdom components to be used inside, but it will pull in the vdom runtime and offset the benefits of a smaller bundle.
When the interop plugin is installed, Vapor and non-Vapor components can be nested inside each other. This currently covers standard props, events, and slots usage, but does not yet account for all possible edge cases. For example, there will most likely still be rough edges when using a VDOM-based component library in Vapor Mode.
This is expected to improve over time, but in general, we recommend having distinct "regions" in your app where it's one mode or another, and avoid mixed nesting as much as possible.
In the future, we may provide support tooling to enforce Vapor usage boundaries in codebases.
By design, Vapor Mode supports a subset of existing Vue features. For the supported subset, we aim to deliver the exact same behavior per API specifications. At the same time, this means there are some features that are explicitly not supported in Vapor Mode:
- Options API
app.config.globalProperties
getCurrentInstance()
returnsnull
in Vapor components- Implicit instance properties like
$slots
and$props
are not available in Vapor template expressions @vue:xxx
per-element lifecycle events
Custom directives in Vapor also have a different interface:
type VaporDirective = (
node: Element | VaporComponentInstance,
value?: () => any,
argument?: string,
modifiers?: DirectiveModifiers,
) => (() => void) | void
value
is a reactive getter that returns the binding value. The user can set up reactive effects using watchEffect
(auto released when component unmounts), and can optionally return a cleanup function. Example:
const MyDirective = (el, source) => {
watchEffect(() => {
el.textContent = source()
})
return () => console.log('cleanup')
}
Vapor Mode attempts to match VDOM Mode behavior as much as possible, but there could still be minor behavior inconsistencies in edge cases due to how fundamentally different the two rendering modes are. In general, we do not consider a minor inconsistency to be breaking change unless the behavior has previously been documented.
v3.6.0-alpha.1
-
Please see About Vapor Mode section below for details.
- reactivity: refactor reactivity core by porting alien-signals (#12349) (313dc61)
- css-vars: nullish v-bind in style should not lead to unexpected inheritance (#12461) (c85f1b5), closes #12434 #12439 #7474 #7475
- reactivity: ensure multiple effectScope
on()
andoff()
calls maintains correct active scope (#12641) (679cbdf) - reactivity: queuing effects in an array (#13078) (826550c)
- reactivity: toRefs should be allowed on plain objects (ac43b11)
- scheduler: improve error handling in job flushing (#13587) (94b2ddc)
- scheduler: recover nextTick from error in post flush cb (2bbb6d2)
Vapor Mode is a new compilation mode for Vue Single-File Components (SFC) with the goal of reducing baseline bundle size and improved performance. It is 100% opt-in, and supports a subset of existing Vue APIs with mostly identical behavior.
Vapor Mode has demonstrated the same level of performance with Solid and Svelte 5 in 3rd party benchmarks.
Vapor Mode is available starting in Vue 3.6 alpha. Please note it is still incomplete and unstable during the alpha phase. The current focus is making it available for wider stability and compatibility testing. For now, we recommend using it for the following cases:
- Partial usage in existing apps, e.g. implementing a perf-sensitive sub page in Vapor Mode.
- Build small new apps entirely in Vapor Mode.
We do not recommend migrating eixsting components to Vapor Mode yet.
Things that do not work in this version yet:
- SSR hydration* (which means it does not work with Nuxt yet)
- Async Component*
- Transition*
- KeepAlive*
- Suspense
Features marked with * have pending PRs which will be merged during the alpha phase.
Vapor Mode only works for Single File Components using <script setup>
. To opt-in, add the vapor
attribute to <script setup>
:
<script setup vapor>
// ...
</script>
Vapor Mode components are usable in two scenarios:
-
Inside a Vapor app instance create via
createVaporApp
. Apps created this way avoids pulling in the Virtual DOM runtime code and allows bundle baseline size to be drastically reduced. -
To use Vapor components in a VDOM app instance created via
createApp
, thevaporInteropPlugin
must be installed:import { createApp, vaporInteropPlugin } from 'vue' import App from './App.vue' createApp(App) .use(vaporInteropPlugin) // enable vapor interop .mount('#app')
A Vapor app instance can also install
vaporInteropPlugin
to allow vdom components to be used inside, but it will pull in the vdom runtime and offset the benefits of a smaller bundle.
When the interop plugin is installed, Vapor and non-Vapor components can be nested inside each other. This currently covers standard props, events, and slots usage, but does not yet account for all possible edge cases. For example, there will most likely still be rough edges when using a VDOM-based component library in Vapor Mode.
This is expected to improve over time, but in general, we recommend having distinct "regions" in your app where it's one mode or another, and avoid mixed nesting as much as possible.
In the future, we may provide support tooling to enforce Vapor usage boundaries in codebases.
By design, Vapor Mode supports a subset of existing Vue features. For the supported subset, we aim to deliver the exact same behavior per API specifications. At the same time, this means there are some features that are explicitly not supported in Vapor Mode:
- Options API
app.config.globalProperties
getCurrentInstance()
returnsnull
in Vapor components- Implicit instance properties like
$slots
and$props
are not available in Vapor template expressions @vue:xxx
per-element lifecycle events
Custom directives in Vapor also have a different interface:
type VaporDirective = (
node: Element | VaporComponentInstance,
value?: () => any,
argument?: string,
modifiers?: DirectiveModifiers,
) => (() => void) | void
value
is a reactive getter that returns the binding value. The user can set up reactive effects using watchEffect
(auto released when component unmounts), and can optionally return a cleanup function. Example:
const MyDirective = (el, source) => {
watchEffect(() => {
el.textContent = source()
})
return () => console.log('cleanup')
}
Vapor Mode attempts to match VDOM Mode behavior as much as possible, but there could still be minor behavior inconsistencies in edge cases due to how fundamentally different the two rendering modes are. In general, we do not consider a minor inconsistency to be breaking change unless the behavior has previously been documented.
v4.9.21
- feat(Tab): Add useAllTabStatus and replace useTabStatus by @yuhengshen in https://github.com/youzan/vant/pull/13516
- fix(Progress): width overflow by @pany-ang in https://github.com/youzan/vant/pull/13519
- fix(FloatingBubble): should handle negative gap values by @inottn in https://github.com/youzan/vant/pull/13544
- fix(checkbox): apply 'checked-color' when 'checkbox' is indeterminate by @keeplearning66 in https://github.com/youzan/vant/pull/13553
- chore(deps): update dependency terser to ^5.43.1 by @renovate[bot] in https://github.com/youzan/vant/pull/13510
- chore(deps): update dependency commander to v14 by @renovate[bot] in https://github.com/youzan/vant/pull/13511
- chore(deps): update dependency @rslib/core to ^0.10.4 by @renovate[bot] in https://github.com/youzan/vant/pull/13529
- chore(deps): update dependency prettier to ^3.6.2 - autoclosed by @renovate[bot] in https://github.com/youzan/vant/pull/13541
- chore(deps): update dependency @babel/core to ^7.28.0 by @renovate[bot] in https://github.com/youzan/vant/pull/13549
- chore(deps): update rsbuild to v1.4.6 by @renovate[bot] in https://github.com/youzan/vant/pull/13540
- chore(deps): update all patch dependencies by @renovate[bot] in https://github.com/youzan/vant/pull/13528
- chore(deps): update dependency @types/node to ^22.16.3 by @renovate[bot] in https://github.com/youzan/vant/pull/13550
- @keeplearning66 made their first contribution in https://github.com/youzan/vant/pull/13553
Full Changelog: https://github.com/youzan/vant/compare/v4.9.20...v4.9.21
v5.5.0
🎉 This release contains work from a new contributor! 🎉
Thank you, Osny Netto (@osnysantos), for all your work!
- feat: support rounded pixels for crop area #615 (@osnysantos)
- Osny Netto (@osnysantos)
v4.45.0
2025-07-12
- Improve tree-shaking when both branches of a conditional expression return the same boolean value (#6000)
- In environments that support both CJS and ESM, prefer the ESM build of Rollup (#6005)
- Ensure static blocks do not prevent tree-shaking if they access
this
(#6001)
v15.4.0-canary.127
- Pass
filterStackFrame
everywhere: #81516 - Upgrade React from
60b5271a-20250709
to96c61b7f-20250709
: #81505 - [segment explorer] redesign file pills and boundary trigger: #81302
- Update eslint and restore
.eslintrc.cli.json
being used for CLI/CI-based linting: #81553 - [sourcemaps] Properly devirtualize
rsc:
URLs: #81554 - Upgrade React from
96c61b7f-20250709
to97cdd5d3-20250710
: #81551 - fix: update useEffect closure when menu is truly mounted: #81531
- Turbopack: refactor ReadRef deref + clone to the intended pattern: #81537
- Turbopack: remove
clone_value
again: #81539 - docs: root layout + opengraph-image + cna-eslit vs next lint bootstrap: #81542
- Turbopack: add module cost benchmark: #81530
- Turbopack: fix
@opentelemetry/api
resolve fallback: #81541 - [test] Use same pnpm in temporary repo directory: #81540
- Turbopack: only emit
*.single.css
chunks in dev: #81490 - Update rust-cache action to v1.0.9: #81555
- docs: update Page example to use Promise-based params in 05-server-and-client-components.mdx: #81557
Huge thanks to @eps1lon, @mischnic, @icyJoseph, @sokra, @huozhi, @ijjk, @unstubbable, @nick20name17, and @RobPruzan for helping!
v1.127.3
Version 1.127.3 - 7/11/25, 11:19 PM
- don"t run router.load() when hydrating only SSRed matches (#4630) (4b4562a) by Manuel Schiller
- (8df504c) by Nico Lynzaad
- @tanstack/router-core@1.127.3
- @tanstack/solid-router@1.127.3
- @tanstack/react-router@1.127.3
- @tanstack/router-generator@1.127.3
- @tanstack/start-server-core@1.127.3
- @tanstack/start-plugin-core@1.127.3
- @tanstack/react-router-with-query@1.127.3
- @tanstack/zod-adapter@1.127.3
- @tanstack/valibot-adapter@1.127.3
- @tanstack/arktype-adapter@1.127.3
- @tanstack/router-devtools@1.127.3
- @tanstack/solid-router-devtools@1.127.3
- @tanstack/react-router-devtools@1.127.3
- @tanstack/router-devtools-core@1.127.3
- @tanstack/router-cli@1.127.3
- @tanstack/router-plugin@1.127.3
- @tanstack/router-vite-plugin@1.127.3
- @tanstack/solid-start-plugin@1.127.3
- @tanstack/solid-start-client@1.127.3
- @tanstack/solid-start-server@1.127.3
- @tanstack/start-client-core@1.127.3
- @tanstack/react-start-plugin@1.127.3
- @tanstack/react-start-client@1.127.3
- @tanstack/react-start-server@1.127.3
- @tanstack/start-server-functions-fetcher@1.127.3
- @tanstack/start-server-functions-client@1.127.3
- @tanstack/solid-start@1.127.3
- @tanstack/react-start@1.127.3
v1.127.2
Version 1.127.2 - 7/11/25, 9:28 PM
- remove unused jsesc (#4628) (418ab85) by kusiewicz
- @tanstack/router-core@1.127.2
- @tanstack/solid-router@1.127.2
- @tanstack/react-router@1.127.2
- @tanstack/solid-start-client@1.127.2
- @tanstack/start-server-core@1.127.2
- @tanstack/react-start-client@1.127.2
- @tanstack/react-router-with-query@1.127.2
- @tanstack/zod-adapter@1.127.2
- @tanstack/valibot-adapter@1.127.2
- @tanstack/arktype-adapter@1.127.2
- @tanstack/router-devtools@1.127.2
- @tanstack/solid-router-devtools@1.127.2
- @tanstack/react-router-devtools@1.127.2
- @tanstack/router-devtools-core@1.127.2
- @tanstack/router-generator@1.127.2
- @tanstack/router-cli@1.127.2
- @tanstack/router-plugin@1.127.2
- @tanstack/router-vite-plugin@1.127.2
- @tanstack/solid-start@1.127.2
- @tanstack/solid-start-server@1.127.2
- @tanstack/start-client-core@1.127.2
- @tanstack/react-start@1.127.2
- @tanstack/react-start-server@1.127.2
- @tanstack/start-server-functions-fetcher@1.127.2
- @tanstack/start-server-functions-client@1.127.2
- @tanstack/start-plugin-core@1.127.2
- @tanstack/solid-start-plugin@1.127.2
- @tanstack/react-start-plugin@1.127.2
electron v36.7.1
- Fixed a crash when calling
desktopCapturer.getSources
with an empty thumbnail size. #47651 (Also in 37, 38) - Fixed an issue where child windows could crash if they were opened from a fullscreen parent and have
roundedCorners
set tofalse
. #47683 (Also in 37, 38) - Fixed an issue where printing PDFs with
webContents.print({ silent: true })
would fail. #47624 (Also in 37) - Fixed an issue where the window required restart in order to recognize system accent color setting change. #47657 (Also in 37, 38)