Which Vue.js version should our shared component library target? Is it possible to support both using Vue-Demi or other compatibility wrappers?
**Considerations**
* This is closely tied up in the question of whether the library should continue supporting IE11 (T286947), because Vue 2 will continue supporting IE while Vue 3 will not.
* Many Vue 3 features (like the composition API) either already exist for Vue 2 or will be backported in an upcoming 2.x release.
* However, this is not true for many of the Vue 3 performance optimizations; if we want those we'll need to upgrade. Vue 3 also is fully written in Typescript and promises some improvements in TS workflow.
* If we want to use more modern build tools like Vite (very fast, less config than Webpack, HMR), Vue 3 is supported natively while Vue 2 requires an additional plugin; using Vue 2 and continuing to support IE11 means we'll need to continue relying on things like Babel.
* Different versions of the Vue.js browser DevTools are required to support Vue 2 vs Vue 3 apps, which is annoying. There may be other tools we're using that still rely mainly on Vue 2 – however, we're not really depending on any external Vue libraries so that is one less barrier to migration
* We may be able to build our shared library with a compatibility wrapper like [[ https://github.com/vueuse/vue-demi | Vue Demi ]], which could enable it to work in both Vue 2 and Vue 3 apps.
* Vue 3.1 is the official "migration build" of the library; we may want to look at this too: https://www.thisdot.co/blog/vue-3-1-official-migration-build-from-vue-2-to-3
**Relevant Links**
- T251974: planning for Vue 2 --> Vue 3 migrations
**Decision**
TBD