$ cat vuejs/week/2026-10-19.log
the week in review · Oct 19 – Oct 25, 2026
eslint-plugin-vue migrates 26 rules to TypeScript
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
Devtools lands its first Vue Vapor support alongside a batch of inspection and lifecycle fixes; core corrects two runtime-dom and v-model behaviors.
refactor: migrate `require-*` component and template rules to TypeScript vuejs/eslint-plugin-vue
With this batch the rule set moved to TypeScript spans 26 rules in a day: eleven require-* rules, nine HTML markup rules, five component option rules, then the directive and computed/watch groups. The changes are described as mechanical, so lint behavior should not shift, but rules now carry real types instead of loose JS.
refactor: migrate remaining `valid-v-*` rules to TypeScript vuejs/eslint-plugin-vue
The larger directive validators (bind-sync, for, memo, model, on, slot) follow the earlier migration. They depend only on utils, which is why they fit in one review.
refactor: migrate directive rules to TypeScript vuejs/eslint-plugin-vue
Ten template directive rules including no-v-html, no-v-text and no-useless-v-bind moved over. If you extend the plugin or read its source to debug a false positive, the rule code you land in is now typed.
feat: add initial Vue Vapor support vuejs/devtools
First step of Vue Vapor (3.6) support in devtools, with a plan file covering breakage inventory, phases and open questions, plus a playground running a pure createVaporApp. Later phases land as separate pull requests.
feat(kit): walk vapor component trees vuejs/devtools
Devtools can now walk Vapor component trees, the plumbing the Vapor work depends on. Neither the kit hardening fixes in this period are reachable through the Vite or Chrome hosts today, so this is groundwork rather than a change you will see in an extension workflow.
fix(language-core): check bindings of generic directive hooks vuejs/language-tools
Generic or overloaded directive hooks had their bindings silently unchecked since a prior change, because signature padding fell back to a permissive (...args: any[]) overload. Generated calls now go through a temp variable and pass never for each unpadded parameter, restoring the check in your templates.
fix(runtime-dom): treat disablepictureinpicture and disableremoteplayback as boolean attributes vuejs/core
In core's runtime-dom, <video :disablepictureinpicture="false"> was rendering the attribute string, so the browser read it as present and kept Picture-in-Picture disabled. Both that and disableremoteplayback now render as boolean attributes.
fix(chrome): keep detection on same-page navigation vuejs/devtools
Chrome fires tabs.onUpdated with status loading for same-document navigations (pushState, replaceState, hash changes, back/forward), and the background was resetting detection state on every one, greying the icon and swapping the popup to not-found.html. Alongside: core respects the number modifier for Set select values, and router restores scroll after native hash links.
$ 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.