Compare Vue.js versions and see exactly what changes, what requires action, and what you can start using.
→
12Changes
1Breaking
1Actions
5Features
0Migration tools
Breaking Changes
defineComponent() function overload type changed
Action required
breakinglow impact
Vue 3.3 repurposes the rarely used defineComponent() function overload to support improved generic component typing, changing its TypeScript type behavior.
Migration
Review code that passes a function directly to defineComponent(). This overload was rarely used, but its type signature changed in Vue 3.3.
No migration is required. Components that previously needed a second normal <script> block solely for supported component options can use defineOptions().
Vue 3.3 introduces experimental support for destructuring defineProps() while preserving reactivity and allowing native default-value syntax.
Migration
No migration is required. This feature was experimental in Vue 3.3 and should be treated according to the behavior and stability of the target Vue version.
Vue 3.3 introduces the experimental defineModel() compiler macro for declaring a component v-model prop and its corresponding update event with less boilerplate.
toRef() normalization improved and toValue() introduced
featuremedium impact
Vue 3.3 enhances toRef() so it can normalize values, getters and existing refs, and introduces toValue() for normalizing values, refs and getters into values.
No migration is required. Composables can use toValue() when accepting values, refs or getters, and the normalization form of toRef() when a ref representation is needed.
SFC macros support imported and complex TypeScript types
typescripthigh impact
Vue 3.3 expands type support in macros such as defineProps() and defineEmits(), allowing imported types and a broader set of complex TypeScript types to be used directly.
<script setup lang="ts">
import type { UserProps } from "./types"
defineProps<UserProps>()
</script>
Migration
No migration is required. Existing local type declarations remain valid. Imported and supported complex types can now be used directly with SFC compiler macros.
Vue 3.3 adds support for TypeScript's jsxImportSource option, allowing Vue JSX typing to be opted into explicitly and reducing conflicts with other JSX ecosystems.
Vue 3.3 still provides the global JSX namespace for backwards compatibility, but TSX users should configure jsxImportSource for forward compatibility because the default global registration was planned for removal in Vue 3.4.
defineComponent() gained generic component support
typescriptmedium impact
Vue 3.3 improves TypeScript support for authoring generic components with defineComponent(), complementing generic support in <script setup>.
Migration
No migration is required. Library and component authors can use the improved generic typing when component APIs need to preserve relationships between types.