$ cat vuejs/week/2026-09-21.log
the week in review · Sep 21 – Sep 27, 2026
language-tools 翻越 vueCompilerOptions.plugins 不再合并
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
The change follows how `extends` already treats other array options, so inherited plugin lists replace rather than accumulate.
fix(language-core): override vueCompilerOptions.plugins instead of merging vuejs/language-tools
Configs that never declare `plugins` are unaffected, and an empty array clears anything inherited. In a shared base config, the plugin you relied on is now gone unless you re-declare it yourself.
fix(language-core): deduplicate vueCompilerOptions.plugins on resolve vuejs/language-tools
The same plugin module could previously be registered more than once when tsconfigs form an `extends` chain, which the writeup says is common in Nuxt monorepos with shared layers. Plugin entries are now deduplicated when the config resolves.
fix(language-core): keep union props when using withDefaults (#6180) vuejs/language-tools
`withDefaults(defineProps<A | B>())` no longer collapses to `DefineSetupFnComponent<Record<string, any>>`; the report says a homomorphic `[K in keyof T]` mapped type distributed `__VLS_TypePropsToOption` across the union.
fix(client): forward slots to client components vuejs/vitepress
`defineClientComponent` discarded slots from its parent, so a client-only component used in Markdown rendered its fallback content even after loading. Slots are now forwarded when `args` is omitted, empty, or contains only props.
fix(no-ref-object-reactivity-loss): improve IIFE handling vuejs/eslint-plugin-vue
Reading from a ref inside an immediately invoked function expression loses reactivity the same way a direct read does, and the rule now reports it. Code that calls an IIFE synchronously in the enclosing scope will start flagging.
fix(require-default-prop): don't report on `defineModel` vuejs/eslint-plugin-vue
The `require-default-prop` half of #3032 is reverted: a `defineModel` without a default has no valid fix, since Vue's types reject `default: undefined` and a real default de-syncs parent and child. `require-valid-default-prop` still checks `defineModel`.
fix(no-unused-properties): ignore props typed as `never` vuejs/eslint-plugin-vue
A prop typed `never` exists to forbid its usage, so reporting it as unused was noise. The rule now ignores those props.
fix(runtime): prevent HMR registration outside Vue vuejs/vue-jsx-vapor
The runtime no longer registers HMR handlers when it is not running under Vue, addressing the linked issue. Alongside: KeepAlive now propagates the component root in the vapor compiler, and the Volar macro dropped its `defineComponent` alias.
$ 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.