npm / vue
vue
What changed in vue 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
2 breaking1 security1 new APIs and options4 performance1 behavior and defaults168 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initvue 3177 changes
Breaking changes 2
Server rendering now rejects carriage returns in attribute names.
Reverts cleanup of component effect scopes after SSR render.
Security 1
Prevents server-rendered comment escaping from creating closing delimiters.
New APIs and options 1
Type support now includes named tuple emits.
Performance 4
Optimizes dispatch of array event handlers.
Skips type checks for cached proxies.
Avoids materializing iterables in ssrRenderList.
Uses binary search to determine line and column locations.
Behavior and default changes 1
Reverts the compiler-core fix for correctly handling TypeScript type assertions in expressions.
Fixes and other changes 168
Mounts a resolved async component with its own namespace in Suspense.
Skips rendering async components unmounted while pending in Suspense.
Skips mounting an async custom element removed while its component is loading.
Keeps the async placeholder for block patching and pending component updates.
Propagates errors from async setup during server rendering.
Reports an error when defineModel prop options reference a destructured prop.
Observes children of a display: contents root during visible hydration.
Unmounts a pruned current component when its vnode was cloned on mount.
Avoids mutating native array iterators in reactivity handling.
Stops a once watcher when its callback throws.
Treats playsinline as a boolean attribute.
Detects new prop keys when comparing full props.
Flushes only jobs queued by the root render itself.
Exposes _setupProxy for Vue 2.7 compiled script setup in compat mode.
Preserves shallow collection semantics in reactivity.
Moves targetStart while keeping children before targetAnchor.
Handles component roots wrapped in comments.
Measures nested groups against their moving outer item.
Parenthesizes the v-for key in the v-memo cache guard to fix generated code.
Renders nothing for an invalid v-for range in production.
Correctly stringifies 0 and false values used with v-html.
Injects the persisted transition setting for v-show in production.
Preserves the display value for unchanged style strings.
Honors falsy vnode content overrides during SSR.
Does not track dependencies in watcher callbacks run inside another effect.
Array copy methods now preserve readonly wrappers.
The DOM claimed by an interrupted async component is now unmounted.
The SFC compiler now prepends a semicolon for await in a switch case.
The SFC compiler now restores await scope when leaving nested blocks.
The SFC compiler now ignores comment delimiters inside strings and url() when parsing CSS vars.
Leave hooks now run for hydration placeholders.
looseEqual now handles circular references.
Optional props are now kept when a runtime prop uses a generic PropType.
Comment-like text in style values is now preserved.
Nested Suspense patches are no longer dropped during hydration.
A Suspense boundary now stays pending while its branch is patched.
A hydrating boundary's pending branch is now patched in place.
Children of v-once nodes are now unmounted after the parent rerenders.
Moving an unresolved async fragment is now handled correctly.
$el is now resolved for a development root comment fragment.
Async components unmounted before lazy hydration are now handled correctly.
Map and Set values are now compared correctly.
Style bindings now support !important on CSS custom properties.
Unmounted Suspense children are no longer cached.
A leaving branch is no longer treated as the fallback while its mount is pending.
Select elements are re-synced when the model is overridden in a change handler.
The .trim result is preserved when the .trim and .number modifiers are combined.
Restores SSR setup state when handling an async setup result.
Warns when custom element props override native properties.
Preserves defineModel type inference with factory defaults.
Normalizes hidden states during SSR hydration.
Preserves mount order for nested asynchronous custom elements.
Avoids stack overflow when flushing very large post-callback arrays.
Avoids re-fetching resource props when their values have not changed.
Handles transformed template ASTs after cache invalidation.
Supports transitions to a Teleport component child.
Handles nullish v-bind slot props.
Preserves vnode lifecycle behavior in stable v-for lists.
Preserves text input before hydration.
Unwinds dangling blocks when slot content throws.
Passes the namespace when patching dynamic props during hydration.
Handles effects being removed while their scope is stopping.
The component $el type is no longer constrained to Element.
Skips lazy hydration for detached roots.
Handles errors in optimized component renders during server rendering.
Respects the current select model type.
Prevents compiler-generated slot branch keys from leaking into rendered output.
Fixes updates for non-isomorphic block elements.
Hydration now respects data-allow-mismatch on conditional branches.
Types now validate defineModel defaults.
Preserves event names when option modifiers are used.
Corrects recursive filter rewriting in the compiler.
Function children are normalized for elements and Teleport.
Tracking is paused when function refs are invoked.
Dynamic props are now force-patched during hydration.
Preserves the event listener name for once listeners.
Effects are no longer triggered when a set operation fails.
Deduplicates inherited scope IDs during vnode rendering in SSR.
Resolves nested async Teleport content during SSR.
Fixes a Teleport unmount edge case.
Resolves top-level exports from files registered as global types.
Avoids repeated hydration mismatch checks.
Skips idle persisted transition hooks during keep-alive moves.
Propagates synchronous errors from ssrRenderSuspense.
Skips child unmount when a pending mount is discarded.
Avoids double processing v-for keys when used with v-memo.
Type re-exports inside declare global are resolved.
Creating an effect in a stopped scope no longer leaves an orphan effect.
Hash hrefs are preserved on <image> elements.
Props validation avoids coercing symbols.
Vue ref wrapper types are inferred when the source is unresolvable.
An out-in transition in a v-if fragment no longer causes a DOM leak.
Nested :deep selectors in selector pseudos are now handled correctly.
Effect scopes are unlinked correctly when off is called out of order.
Teleport children are no longer moved before they are mounted.
Textarea resize dimensions are preserved.
The placeholder is preserved for conditional explicit default slots.
Prevents currentInstance from leaking into a sibling render during async setup re-entry.
Allows customRef to use different getter and setter types.
Uses private branding for shallowReactive.
Handles updates that occur before a deferred mount.
compiler-sfc now allows Node.js subpath import patterns in asset URLs.
defineModel now supports a template literal as its name.
mergeProps preserves nullish event handlers.
Model listeners are no longer merged when their value is null or undefined.
The shallowReactive marker no longer leaks into value unions.
Component effect scopes are cleaned up after an SSR render.
Suspense avoids unmounting its active branch twice when wrapped in a transition.
The Suspense vnode's el is updated during a branch self-update.
Teleport mounting and updating are deferred until Suspense resolves.
toRef normalizes property keys before dependency lookup, with improved types.
The enter guard is skipped while HMR is updating.
Detached v-for memo vnodes are invalidated after unmount.
The activeElement check for v-model now works in Shadow DOM.
Calling reduce on reactive arrays preserves reactivity.
Child component styles are injected in the correct order before parent styles.
Parent components are properly located when slotted in Shadow DOM.
Props are properly patched for Vue custom elements.
Generics work with runtime props in defineComponent.
Handles the edge case of a Set initialized with reactive values.
Adding values avoids duplicate raw/proxy entries in a Set.
Class and style typing is narrowed for TSX.
Vue now warns about negative numbers used in v-for.
Prevents a watch from firing after an async setup await during SSR.
Server rendering now renders className as an escaped string.
Prevents an enter transition from starting while a leave transition is in progress.
Prevents an instance leak in withAsyncContext.
Async component updates that occur before the component resolves are handled properly.
Transition done callbacks no longer receive an unexpected cancelled parameter.
EffectScope is marked with
__v_skipto prevent reactive conversion.compiler-sfc now tries resolving
.mtsand.ctsfiles.Child components are not updated when the style remains unchanged.
Disabled Teleport targets and their anchors are handled properly.
Move translation is corrected for scaled elements by using the element rect.
A setup ref is no longer updated for a useTemplateRef key.
Generated parameters are now provided when using withDefaults.
withModifiers now handles null or undefined handlers.
Server rendering uses the ssrRenderClass helper for the className attribute.
Collection iteration now inherits iterator instance methods.
Correctly handles variable shadowing in a for loop when destructuring defineProps.
Handles indexed access types in declare global blocks.
Uses the correct scope when resolving indexed access types from external files.
Reserved props are no longer patched for custom elements.
Handles v-bind modifiers when rendering attributes during SSR.
Ensures the correct anchor element is used for deeper unresolved async components.
Fixes the compat handler for draggable.
Handles updates to cached text nodes during hot module replacement.
Uses the resolved component name when pruning async components from the cache.
Handles SSR attribute fallthrough when whitespace is preserved.
Fixes an edge case when patching stable fragments.
Handles the v-model deprecation warning when appContext is missing.
Demotes const reactive bindings used in v-model.
Keeps Options API typing intact when expose is used.
Correctly wraps iterated array items so their readonly status is preserved.
Warns when provide is used after mounting, helping developers catch calls made too late.
Defers clearing the fallback vnode el when it has directives.
Fixes edge cases involving ref unwrapping.
Custom element prop patching is batched.
Slot retrieval is optimized to avoid duplicates.
Hydration avoids mismatches when interpolated text contains newlines.
The iframe sandbox value is handled as an attribute to prevent unintended behavior.
Props and children are passed to the loading component.
Numeric literals and template literals without expressions are resolved as static property keys.
Animations use offsetLeft and offsetTop instead of getBoundingClientRect to avoid transform scale affecting them.
Expressions containing TypeScript type assertions are now handled correctly by the compiler.
The compiler now correctly handles v-bind shorthand in in-DOM templates.
The number modifier is now handled on change.
Server-side rendering now handles textarea elements with the v-text directive.