$ cat vuejs/week/2026-09-28.log
the week in review · Sep 28 – Oct 4, 2026
vue-tsc silently skipped template checks on TypeScript 5.4 to 6.0
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
Language-tools shipped the fix; Vue Router deprecated scrollBehavior in favor of built-in restoration.
fix(language-core): avoid type guards missing from tsc bundle in template binding analysis vuejs/language-tools
Between #6181 and #6184, template binding analysis called type guards that are not part of the tsc bundle, so a plain typescript install threw `ReferenceError: isDeleteExpression is not defined` and produced no diagnostics for any .vue file with an interpolation. Silent is the dangerous part: CI stayed green while templates went unchecked. The fix landed as #6214, with #3 following up to restor...
Deprecate scrollBehavior vuejs/router
Built-in scroll restoration now restores a saved position when there is one, otherwise scrolls to a matching hash target, otherwise resets to the top, and the release notes confirm that custom restore handlers can use the documented escape hatches. If your app carries its own scrollBehavior for the common cases, that code is now redundant work on a deprecated API.
feat(router): restore hashes and top by default vuejs/router
Hash and top restoration are the default in this change, which is what makes the deprecation actionable rather than theoretical: the built-in path covers what most hand-written scrollBehavior implementations did, and #10 adds diagnostics for the older experimental beforeEnter migration.
docs(router): deprecate scrollBehavior and document migration vuejs/router
The migration guide documents the replacement for scrollBehavior, so the deprecation comes with a stated path off it rather than a bare warning in the type definitions.
feat(runtime/hmr): support HMR for plain function components vuejs/vue-jsx-vapor
Plain function components in vue-jsx-vapor are now covered by HMR: the compiler marks them and the runtime wraps them via defineVaporHmrComponent and defineHmrComponent, with __hmrId assigned inline and the import.meta.hot.accept callback guarded. Editing a function component no longer forces a full reload.
feat: add option to scaffold without deleting existing files vuejs/create-vue
create-vue can now scaffold into a directory that already has files instead of wiping them, which removes the footgun of running it inside a non-empty project folder. Vitest 5.0 came along with it [#12], and the oxfmt bump to ^0.71.0 is routine [#13].
perf(language-core): precompile attribute glob matchers vuejs/language-tools
Template codegen checked every component prop against vueCompilerOptions.dataAttributes and htmlAttributes with picomatch's isMatch, which compiles the glob on every call; precompiling the matchers removes that repeated work while generating template code. It was found benchmarking a larger project internally.
feat: add Obolus to Projects Using Nuxt vuejs/awesome-vue
Alongside: devtools improved Switch a11y and resolved a Node 25 localStorage test conflict, and awesome-vue picked up Obolus under Projects Using Nuxt.
$ 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.