← All notes
Web dev

Vue 3.6 RC: Vapor Mode is done — the virtual DOM is now optional

DV
Daan VisserJuly 30, 2026 · 2 min read

Vue 3.6 entered release-candidate status on July 18, with Vapor Mode declared feature-complete. It marks the most significant architectural change to Vue's rendering system in years: for components that opt in, the virtual DOM disappears from the equation entirely. RC.2 followed on July 22; a stable release is expected sometime in autumn.

The virtual DOM, made optional

The frameworks that popularised the virtual DOM work through a snapshot-compare model: state changes, a new virtual DOM tree is produced, and the difference is committed to the real DOM. That works, but it carries overhead. Vapor Mode compiles Vue templates directly to imperative DOM operations — a state change touches exactly the DOM nodes it needs to, with no intermediary layer in between. For Vapor-only components, bundles shrink 20–50%; performance benchmarks land in the same range as Solid.js and Svelte 5.

Opt-in and incremental

The design deliberately favours gradualism. Vapor is opt-in per component — a Vapor component works alongside regular Vue 3 components without any extra wiring. You start with one performance-sensitive page or new feature, measure, and scale from there. The Options API is not supported; Vapor works with template-only SFCs and `<script setup>`. An existing Composition API codebase can make the transition without rewriting its logic.

The reactivity rewrite as a bonus

Running in parallel with Vapor Mode, the Vue team has fully rewritten the `@vue/reactivity` package on top of alien-signals: a signals implementation with lower overhead, better scaling under heavy component trees, and reduced memory usage. This applies regardless of Vapor Mode — everyone on Vue 3.6 benefits from the rewrite.

Our take

Vapor Mode makes the virtual DOM optional, not obsolete. That is a smarter move than a hard break. The adoption path is low-friction and reversible, the existing mental model of Vue stays intact, and the performance gain is measure-then-decide rather than all-or-nothing. If you build Vue interfaces where every millisecond counts, there is now a good reason to explore the RC.

Thinking about a build?Compile your idea →