$ cat vuejs/week/2026-11-02.log
the week in review · Nov 2 – Nov 8, 2026
Suspense cleanup fixes dominate Vue core's week
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
Six separate Suspense fixes landed alongside a router deprecation notice and test-utils changes that alter how stubs behave across apps.
fix(suspense): release parent dep on suspensible unmount vuejs/core
When a nested `<Suspense suspensible>` is removed while it and its parent are both still pending, the parent never leaves its fallback and nothing is logged. The fix releases the parent's dependency on unmount, which matters if you gate suspensible boundaries behind `v-if` inside an outer boundary.
fix(suspense): resolve async deps whose pending cycle was discarded vuejs/core
Async components in Suspense branches that were switched away from and then revisited now resolve instead of hanging on a pending cycle that was already discarded.
fix(suspense): drop the unmount hooks of a pending branch when the boundary is unmounted vuejs/core
Unmount hooks attached to a boundary's pending branch are dropped when the boundary itself goes away, including for components that never finished becoming active.
fix(transition): switch modes around a keyed suspense boundary vuejs/core
Keyed Suspense boundaries get transition modes applied correctly, covering cases where either the content or the fallback branch is the one active. Out-in transitions keep their sequencing.
fix(runtime-core): render nothing for a component whose async setup rejects vuejs/core
A component whose async `setup` rejects now renders an empty placeholder rather than falling back to its template or triggering further work, so a failed loader shows nothing instead of stale markup.
fix(#2541): stub globally registered components by their registration key vuejs/test-utils
Libraries that register components under a key different from `name` (naive-ui's `NButton`, Arco's `AButton`) can now be stubbed by that key. The release notes describe the old behavior plainly: "`<n-button>` still renders the real naive" component.
fix: only apply stubs to the app being rendered vuejs/test-utils
`mount`, `shallowMount` and `renderToString` used to install stubs globally via `transformVNodeArgs` and never remove them, so other apps rendered later in the same test file were stubbed too, even after `unmount()`. Stubs are now scoped to the app being rendered.
fix(compiler-sfc): respect catch and switch lexical scopes (fix #16098) vuejs/core
Reactive props destructuring in `compiler-sfc` could rewrite a shadowing local variable into a prop access, so catch patterns and switch cases read the prop instead of the local binding. Catch parameter defaults also saw body declarations too early.
$ ls vuejs/week/ # the briefings behind this review
Keep up with Vue.js in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.
Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.