Vue versions, Vapor Mode, and what changed recently
Verified 2026-08. Cross-check ../../STACK_BASELINE.md before quoting a version in an interview.
Where things stand
| Status | |
|---|---|
| Vue 2 | End of life since 2023-12-31. No patches, no security fixes. Migrating off it is a legitimate project to talk about. |
| Vue 3.5.x | Current stable (3.5.41 as of 2026-08). |
| Vue 3.6 | Release candidate (rc.2, 2026-07-22). Vapor Mode feature-complete; reactivity rewritten on alien-signals. Not shipped stable yet — say “in RC”, not “released”. |
Getting the 3.6 status right is worth doing. A candidate who says “Vue 3.6 shipped Vapor Mode” is repeating blog headlines; the accurate answer is that it is feature-complete in RC with stable expected later in 2026.
What 3.4 and 3.5 actually gave you
Recent additions that change how you write code, not just version numbers:
| Version | Change | Why it matters |
|---|---|---|
| 3.3 | defineSlots, generic components, imported types in macros |
typed component boundaries became practical |
| 3.4 | defineModel stable |
replaces the modelValue prop plus update:modelValue emit boilerplate |
| 3.4 | faster parser, rewritten reactivity effects | fewer unnecessary re-computations |
| 3.5 | reactive props destructure | const { x = 1 } = defineProps() stays reactive |
| 3.5 | useTemplateRef, useId |
proper template ref typing; SSR-safe ids |
| 3.5 | onWatcherCleanup |
cleanup inside watch without the callback argument |
| 3.5 | lazy hydration for async components | hydrate on idle, on visible, or on interaction |
If your notes still show modelValue plus emit('update:modelValue') for a two-way-bound component, they predate 3.4.
Vapor Mode
An opt-in compilation mode that compiles SFCs to imperative DOM operations with no virtual DOM. Same authoring model — templates, refs, composables — different output.
- Opt-in per component, and Vapor and VDOM components interoperate in one app, so adoption is incremental rather than a rewrite.
- Supports a subset of the current API. Anything depending on the VNode representation does not apply.
- Smaller bundles and lower update cost, since there is no VNode allocation and no diff — reported in the range of Solid and Svelte for Vapor-only apps.
- The whole runtime can be dropped from a Vapor-only build, which is where the largest bundle savings come from.
The strategic point worth making: Vue is converging with the fine-grained-reactivity camp without changing what developers write. Signals-based frameworks got there by exposing signals to the author; Vue already had refs, so only the compiler output had to change.
Alien-signals
@vue/reactivity was rewritten in 3.6 on top of alien-signals — lower overhead per dependency, better scaling in deep component trees, less memory. It is an internal change: the public ref/computed/watch API is unchanged. Mention it as evidence you follow the project, not as something that changes your code.
Migrating from Vue 2
Still a real interview topic, because plenty of production Vue 2 exists past EOL.
| Vue 2 | Vue 3 |
|---|---|
Object.defineProperty reactivity |
Proxy — new properties and array index assignment now work, so Vue.set is gone |
| Options API only (Composition via plugin) | Composition API built in |
| One root node per template | fragments allowed |
filters |
removed — use computed properties or methods |
$listeners, .sync |
folded into $attrs and v-model arguments |
new Vue() global config |
createApp() — no global pollution between apps |
| Vuex | Pinia |
EventBus via a Vue instance |
removed; use props/emits, provide/inject, or a store |
The migration build (@vue/compat) runs Vue 3 with Vue 2 behaviour and per-feature warnings, which is the incremental path. The honest framing for a large app is: upgrade the build tooling, move to the migration build, clear warnings feature by feature, then adopt Composition API where it pays — not all at once.
Interview angle
- “What version of Vue would you start a project on today?” - 3.5 stable. 3.6 is in RC; you would track it and adopt Vapor Mode selectively for hot components once it ships.
- “What is Vapor Mode and what does it change?” - opt-in compilation to direct DOM operations, no virtual DOM, interoperable with existing components. Bundle size and update cost drop; the authoring model does not change. It is Vue’s answer to Solid and Svelte.
- “Is Vue 2 still supported?” - no, EOL since the end of 2023. Anything still on it is accruing unpatched security risk, and that is the argument you make to a product owner.
- “How would you migrate a large Vue 2 app?” - migration build first, warnings cleared incrementally, then Composition API only where it earns its keep. A big-bang rewrite of a large app is how these projects die.
- “What changed in 3.4/3.5 that affects how you write components?” -
defineModelremoved the two-way-binding boilerplate, reactive props destructure removed theprops.xprefix, anduseTemplateReffixed template ref typing.