$ cat vuejs/month/2026-10-01.log
the month in review · October 2026
vue-jsx-vapor pins vue 3.6.0-rc.10 after setDynamicProps ABI break
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
The pin walled off current main from older RC builds, while HMR reached plain function components and the vapor compiler absorbed three core fixes.
chore: pin vue to 3.6.0-rc.10 to match setDynamicProps ABI changes vuejs/vue-jsx-vapor
The pin was raised to match a signature change, not a routine bump. The commit message is blunt about the reason: "setDynamicProps changed in rc.10 and the current main doesn't work." Every dependency now sits at explicitly >= rc.10, so anything you build on this branch needs the same floor or it breaks at runtime.
feat(runtime/hmr): support HMR for plain function components vuejs/vue-jsx-vapor
New defineVaporHmrComponent and defineHmrComponent wrappers, plus compiler changes that mark plain function components so they get wrapped. HMR codegen now assigns __hmrId inline and guards the import.meta.hot.accept callback. Function components were the gap in the vapor edit loop; this closes it.
fix(no-dupe-keys): detect locals aliasing a different prop vuejs/eslint-plugin-vue
The rule previously skipped any local that touched the props object, to keep const foo = toRef(props, 'foo') valid. That test only asked whether props was mentioned, not which key was read, so aliases of a different prop slipped through. It also fixes duplicate keys in v-bind object spreads. Expect new reports on aliasing patterns you may have been ignoring.
fix(types): infer emitted payloads for components with props vuejs/test-utils
Event names were already inferred for script setup components, but payloads stayed unknown[] whenever the component also declared props or models. The typical defineEmits<{ select: [id: number] }>() component now gets a typed payload instead of an unknown array. Follows the unreleased event-name inference work.
fix(vscode): avoid `registerHooks` on buggy Node versions (#6245) vuejs/language-tools
The VS Code extension skips registerHooks on Node builds that mis-handle it, tracked against the upstream Node issue. Newer Node versions where the hook is broken no longer break language features for the extension.
fix: skip global mocks mixin when mocks are empty vuejs/test-utils
mount() no longer registers a global mocks mixin when mocks are empty, which removes a warning in Vue builds that drop Options API support. Nonempty mocks, including falsy values, behave as before.
Add tronche (SVG avatar generator) vuejs/awesome-vue
Alongside: awesome-vue added Obolus under Projects Using Nuxt, @reelkit/vue to Carousel, and the tronche SVG avatar generator; VitePress segmenting Chinese and Japanese in local search and keeping code intact inside lean chunks; router on pnpm 12.9.1 and native hash scroll fixes.
$ ls vuejs/month/ # 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.