Step 7 of 8Vapor Mode support matrix (pinned: vue@3.6.0-rc.1)|
...
...

Limitations & What Doesn't Work Yet

An honest map of Vapor Mode's current edges in Vue 3.6.0-rc.1: Options API, dynamic components, slots, SSR, custom directives, event handling, devtools, and ecosystem compatibility.

What it is#

Vapor Mode is experimental. Vue 3.6.0-rc.1 supports a large but not complete subset of Vue's template features. This lesson is the honest map.

Why you'd care#

Knowing the edges keeps you from fighting the compiler. If a feature isn't supported, Vapor fails loudly at compile time — that's the signal, not your code.

Before#

"It's just Vue — everything works." That's the vdom default today.

After#

For the pinned version vue@3.6.0-rc.1, the support picture is:

AreaStatus in Vue 3.6.0-rc.1
<script setup vapor> / <template vapor>✅ Supported (opt-in per SFC)
Options API❌ Not supported
v-if / v-for / v-show✅ Supported
Dynamic components <component :is>✅ Supported (hydration fixes in rc.1)
Slots / scoped slots✅ Supported — slots.default() is not a side-effect-free dry run
SSR / hydration✅ Supported, feature-complete in rc.1 (active bug-fixing during RC)
Custom directives⚠️ Different VaporDirective interface (reactive getter value, returns cleanup fn)
Event handling⚠️ Delegated to document; ancestor stopPropagation() breaks handlers — use @[event], v-bind="{ onClick }", or v-on="{}"
Template refs on components⚠️ Do not expose $el/$props/$attrs/$slots/$refs
getCurrentInstance()❌ Returns null in Vapor (by design)
app.config.globalProperties❌ Not available
@vue:xxx lifecycle events❌ Not supported
v-memo❌ Not supported
VDOM ⇄ Vapor interop⚠️ Via vaporInteropPlugin; edge cases remain
Third-party (VDOM) libraries⚠️ Only through interop; rough edges expected
Devtools⚠️ Immature (Vapor is RC)
Performance✅ On par with Solid / Svelte 5

Do it yourself#

None — read the matrix, then check it against anything you'd want to build.

Gotchas#

  • Unsupported syntax fails at compile time, not runtime — easy to tell apart from a logic bug.
  • Vapor and the vdom can coexist in one app via vaporInteropPlugin, so unsupported parts can stay on the VDOM path while the rest goes Vapor.

Recap#

Vapor covers most templates but not all features yet. Compile-time failures are the tell. Coexistence means you can adopt incrementally.