$ cat vuejs/week/2026-09-14.log
the week in review · Sep 14 – Sep 20, 2026
create-vue 3.24.0 ships tsgo option
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
The scaffold release also tightens its Oxlint and Vitest templates; vue core fixed two runtime bugs affecting v-model and v-once.
2026-09-16 (v3.24.0) vuejs/create-vue
The scaffold's new option swaps TypeScript for typescript-native-bridge, alongside a clarified overwrite prompt that now says it deletes all existing files. Generate a fresh project with the tsgo flag to try it; existing projects keep the standard toolchain.
fix(shared): handle circular references in looseEqual vuejs/core
Since the change that made looseEqual recurse into Map and Set entries, a `<select v-model>` whose option values were Sets of mutually referencing objects threw "RangeError: Maximum call stack size exceeded" during mount. Cycle detection now covers those containers, so the recursion the earlier commit introduced no longer blows the stack on self-referencing values.
fix(runtime-core): unmount v-once children after parent rerenders vuejs/core
A component inside v-once could survive a parent rerender and then never unmount. The fix preserves the block's hasOnce marker across updates and the cache index when cloning vnodes, and clearing a component's cache on unmount no longer invalidates another slot instance.
fix(compiler-sfc): ignore comment delimiters inside strings and url() when parsing css vars vuejs/core
CSS variable parsing in compiler-sfc treated comment delimiters inside quoted strings and url() values as real comments. If your SFC styles put /* or */ inside a string or a url(), the compiled output was wrong; it now preserves that text.
fix: add extension to Vitest config import vuejs/create-vue
Generated Vitest configs imported './vite.config' with no extension, which Vite's current loader tolerates but its native config loader will not. Regenerate or hand-edit the import to include the extension before the loader switch bites.
fix: keep the namespace prefix in attributes() (#2941) vuejs/test-utils
attributes() in test-utils was dropping namespace prefixes, so assertions against namespaced attributes like xlink:href failed. The prefix is now kept in the returned attribute map.
fix(suspense): skip rendering async components unmounted while pending vuejs/core
An async component unmounted while its Suspense boundary was still pending could still be rendered. That render is now skipped, and the change is on the developing branch rather than a tagged release.
ci(issues): remove automatic issue closing workflow (#15557) vuejs/core
Alongside: core removed the workflow that closed issues automatically, js-yaml moved to 4.3.2 in the v2 docs site, vue-jsx-vapor added ElementAttributesProperty to the JSX global namespace, and the lock-file and pnpm 12 housekeeping continued across create-vue and core.
$ 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.