What vuejs/core shipped
Written by FoxPlug from public releases; not affiliated with Vue.js. An automatic summary of the public release, pull request and commit data of github.com/vuejs/core. Vue.js did not write it and does not use or endorse FoxPlug. Every line links to the public change it describes.
Get a weekly update like this for your product, free
Week of September 21, 2026
What shipped
- Fixed dynamic component remounting in Vapor that lost local state during navigation between routes rendering the same component. Pull request #15631
- Refactored component key handling in Vapor to pass keys through creation calls instead of using setBlockKey, improving consistency for dynamic and keyed components. Pull request #15644
- Fixed root element class and style handling in Vapor so fallthrough updates no longer overwrite or remove the element's own values. Pull request #15642
- Fixed template ref access from VDOM parents to Vapor children so reading `$el` and other VDOM properties no longer throws errors on exposed instances. Pull request #15624
- Fixed style binding nullification in DOM to preserve CSS variables injected by `v-bind()` when `:style` becomes null or undefined. Pull request #15623
- Fixed checkbox and select element handling in Vapor to write checked and selected as attributes, matching VDOM behavior for form resets and attribute selectors. Pull request #15636
- Fixed KeepAlive components in Vapor to properly propagate fallthrough attributes like class and style to their root element. Pull request #15583
- Refactored Vapor SSR hydration to always emit fragment markers instead of using a separate markerless mode, simplifying the hydration process. Pull request #15590
- Improved slot fallback handling in hydration by marking them in SSR output so the client knows whether the server rendered content or fallback. Pull request #15589
- Migrated the test suite to Vitest 5 with Vite+. Pull request #15633
Why it matters
This week focused on closing gaps between Vapor and VDOM behavior, particularly around component interop, attribute handling, and hydration. Many fixes address edge cases in dynamic components, keyed elements, and style binding that affect real applications. The refactoring of hydration markers and slot handling simplifies Vapor's internal mechanics while improving reliability.
Changelog entry
- fix(runtime-vapor): patch same-type vnodes passed to a dynamic component Pull request #15631
- refactor(vapor): pass component keys through their creation calls instead of setBlockKey Pull request #15644
- fix(runtime-vapor): preserve root class and style across fallthrough updates Pull request #15642
- fix(runtime-core): skip vdom public properties on exposed vapor instances Pull request #15624
- fix(runtime-dom): keep injected css vars when style binding becomes nullish Pull request #15623
- fix(runtime-vapor): also set checked and selected as attributes like vdom Pull request #15636
- fix(compiler-vapor): propagate component root through KeepAlive Pull request #15583
- refactor(vapor): always emit fragment markers in ssr output and drop markerless hydration Pull request #15590
- refactor(hydration): mark slot fallbacks in ssr output and hydrate them by the marker Pull request #15589
- fix(vapor): hydrate custom element children Pull request #15595
- fix(runtime-vapor): create the rows of a keyed insert in source order Pull request #15601
- chore: migrate to Vitest 5 with Vite+ Pull request #15633
This week: fixed dynamic component remounting, improved key handling, stabilized style/class inheritance, and refined hydration for slots and fragments. Vapor behavior now aligns more closely with VDOM across interop scenarios.
This week's updates to Vue.js core focused on strengthening Vapor's compatibility and reliability. Key improvements include fixing dynamic component remounting that lost state during navigation, refactoring component key handling for consistency, and ensuring style and class attributes work correctly across fallthrough updates. We also refined hydration markers for slots and fragments, simplifying the internal model. These changes address important edge cases in component interop and attribute handling that affect real applications.