The Wire · Showcase
VUE PATCHES TELEPORT RACE CONDITION THAT BREAKS SUSPENSE
By RepoJournal · Filed · About Vue.js
A critical fix for deferred teleports inside Suspense prevents stray DOM updates when content is discarded before mount, solving a class of silent failures that hit production apps.
Vue core shipped two compiler fixes overnight that address real-world edge cases in rendering pipelines. The teleport fix [1] closes a gap where discarded content could still attempt to mount or unmount when Suspense async operations were abandoned, potentially leaving orphaned DOM nodes. Alongside that, the v-for key handling [2] stops the compiler from double-processing memo and key expressions, cutting unnecessary work and fixing inconsistent prefix handling in template v-for scenarios. A third critical fix [3] ensures server-renderer now properly propagates sync errors from ssrRenderSuspense, resolving issues that silently swallowed errors in Nuxt deployments. On the performance side, runtime-dom's event handler dispatch [4] eliminates per-dispatch allocations and wrapper closures for array handlers, a targeted win for high-frequency event scenarios. Language-tools also patched grammar scope leakage in capitalized tags [5], fixing IDE highlighting pollution. Router landed three feature commits: repeatable params in subsegments [6], string-based param parsers [7], and experimental types config override support [8] for stricter type checking in projects that need it.
Action items
- → Pull and test the teleport + Suspense fix in any server-rendered or async component flows vuejs/core [plan]
- → Update language-tools to fix VSCode grammar scope pollution on custom components vuejs/language-tools [monitor]
- → Review router experimental types config if you're strict-checking param handling vuejs/router [monitor]
References
- [1] fix(teleport): skip child unmount when pending mount discarded (#14876) ↗ vuejs/core
- [2] fix(compiler-core): avoid double processing v-for keys with v-memo ↗ vuejs/core
- [3] fix(server-renderer): propagate sync errors from `ssrRenderSuspense` (#14804) vuejs/core
- [4] perf(runtime-dom): optimize array event handler dispatch ↗ vuejs/core
- [5] fix(vscode): prevent grammar scopes leakage in capitalized tags ↗ vuejs/language-tools
- [6] fix(experimental): repeatable params in subsegments vuejs/router
- [7] feat: allow string as a param parser for convenience vuejs/router
- [8] feat: override useRouter() return with experimental types config vuejs/router
FAQ
- What changed in Vue.js on May 28, 2026?
- A critical fix for deferred teleports inside Suspense prevents stray DOM updates when content is discarded before mount, solving a class of silent failures that hit production apps.
- What should Vue.js teams do about it?
- Pull and test the teleport + Suspense fix in any server-rendered or async component flows • Update language-tools to fix VSCode grammar scope pollution on custom components • Review router experimental types config if you're strict-checking param handling
- Which Vue.js repositories shipped on May 28, 2026?
- vuejs/core, vuejs/language-tools, vuejs/router