As a result of decisions made at the recent Vue.js Developer Summit, we will migrate to Vue 3 for all existing and new Vue-based code. This means Vue-based features will no longer be able to support IE11 and other non-ES5 browsers.
===== Acceptance Criteria =====
The Vue 3 migration is complete. All code that uses Vue has been migrated to the full version of Vue 3, and the compatibility build has been removed.
===== Milestones =====
We are taking an iterative approach to this project to mitigate the risks of breaking changes that a major upgrade can cause. For each milestone, we will work with affected teams to assist with changes and coordinate testing and deployment.
1. [[ https://v3.vuejs.org/guide/migration/migration-build.html#overview | Vue 3 compatibility build ]] (aka "the migration build"), which is a build of Vue 3 that provides configurable Vue 2 compatible behavior. At this stage, existing Vue 2 behaviors will continue to work, with deprecation warnings. The compatibility build is designed to support everything the full build supports, so teams can also begin [[ https://v3.vuejs.org/guide/migration/migration-build.html#per-component-config | testing their components ]] against the full version of Vue 3.
2. [[ https://v3.vuejs.org/guide/migration/introduction.html#overview | Vue 3 full build ]]. After the compatibility build is deployed to production, we will replace any remaining Vue 2 code and eliminate runtime errors. We must also upgrade Vuex, the state management app for Vue, to [[ https://next.vuex.vuejs.org/ | Vuex 4 ]].
===== Steps: Vue 3 Compatibility Build =====
[x] Prepare a patch to upgrade the Vue version in MediaWiki to the migration build of Vue 3.2 (more detail at T251974)
[x] Verify that this patch doesn't break any of the existing extensions using Vue (T289019)
[x] Wait for the security readiness review for Vue 3 (T257734) to be completed
[x] Merge the compatibility build upgrade patch
===== Steps: Vue 3 Full Build =====
[ ] Begin migrating all code using Vue, addressing migration warnings then disabling compat mode for migrated components (T289020)
[x] Ensure all code using Vuex is ready to be migrated (T289089)
[x] Wait for the security readiness review for Vuex 4 (T288768) to be completed
[x] Upgrade the Vuex version in MediaWiki to 4.0.2 (T289102)
[ ] Migrate code using Vuex to the new calling style (T289103)
[ ] Once everything is migrated, remove compatibility code and switch from the migration build of Vue to the regular build (T289104)
[ ] Clean up other compatibility/migration remnants, like the `{ compatConfig: { MODE: 3 } }` settings disabling compat mode for migrated components (T289105)
===== Deploy Checklist =====
[ ] Coordinate QA timelines and QA sign-off across teams (product/program)
[ ] Target deploy train and post ETA in comments
[ ] Prod verify and address fast-follows