The New Default. Your hub for building smart, fast, and sustainable AI software
Table of Contents
Migrating from Vue 2 to Vue 3 is no longer optional for most actively developed applications. Vue 2 reached end of life on December 31, 2023 and no longer receives updates or security fixes. The migration itself doesn't have to be painful, though. Plan it in advance, audit your dependencies, and move in small steps, and it becomes a predictable project rather than a leap in the dark.
That's the core message of an online Q&A organized at Monterail with Principal Frontend Engineer Szymon Licau and Frontend Architect Artur Rosa. Below, we summarize what they said about how to migrate from Vue 2 to Vue 3: the risks of staying put, what you gain, when migrating isn't worth it, and how to keep shipping features while you do it. The session was recorded in 2023, so we've added short updates wherever the Vue ecosystem has moved on since.
Executive Summary
Vue 2 has been out of support since the end of 2023, so for any application that's still actively developed, the question is how and when to migrate to Vue 3, not whether to. The safest route is incremental.
Audit the project first, then migrate in small, deployable milestones using a migration build, a parallel Vue 3 app or micro frontends, so feature work never has to stop. Dependencies, not the Vue framework itself, are usually the hardest part, especially in Nuxt 2 projects.
For small, stable apps in maintenance mode, staying on Vue 2 (ideally on Vue 2.7, possibly with paid extended support) can still be the more cost-effective choice.
Here's the 60-minute recording of the session. It goes into more detail on the migration stages and what to prepare in advance:
If you're pressed for time, read the summary below.
Why Did Monterail Wait to Migrate Its Projects to Vue 3?
Monterail held off on migrating existing projects because, for a long time after Vue 3's release, the ecosystem didn't support it. Many projects had critical dependencies that only worked with Vue 2.
Artur Rosa: At Monterail, we have many success stories with Vue. We used Vue 2 in our projects, and Vue 1 before that. I must admit we kind of love Vue. We're pretty much a Vue.js agency at heart. When our Vue.js developers found out that Vue 3 was about to be released, we were eager to start using it.
However, even though the stable version of Vue 3 was released in September 2020, the Vue.js ecosystem needed quite some time to catch up. So, for a long time, migrating our projects seemed like a really tough task. In many of them, we had critical dependencies that did not support Vue 3.
Now we're in a totally different situation. The Vue ecosystem is pretty strong, and Vue 3 has become the default version of Vue. That's also the case at Monterail: when we start a new project, Vue 3 is the way to go. So the time has come to reconsider migrating some of our existing projects.
Another reason to start thinking about it is that Vue 2 is closed to new features and will reach its End of Life (EOL) at the end of 2023. After that, it will no longer receive updates, including security fixes. I know this may sound scary, but it's good to understand what it means in practice. Basically, this is the final reason why you should at least consider migration.
What Are the Risks of Staying on Vue 2 After Its End of Life?
The main risks of staying on Vue 2 aren't in the framework itself. They're in everything around it: third-party libraries that won't be updated, external integrations that move to Vue 3 only, and a shrinking pool of developers willing to work with end-of-life technology.
Artur Rosa: The question is: what will happen to Vue 2 projects once the maintenance phase is over? Truth be told, probably nothing special for quite some time. Vue 2 is a very stable and well-tested framework. There might be some issues with support in new browser versions at some point, but we don't expect that in the foreseeable future. Such things don't happen often.
The same risk applies to community-driven Vue 2 libraries and other third-party dependencies. After Vue 2's End of Life, it's very likely that most of these libraries won't see an update, so assess the risk per project, depending on how many critical parts of your product depend on external libraries.
Pay particular attention to integrations with external services, because they may simply stop working if the vendor only ships changes for Vue 3. Normally, the vendor would release a new version of their library, but here that may not happen.
Another aspect that shouldn't be underestimated is the developer community. As time goes by, it will be increasingly difficult to find people willing to work with end-of-life technologies like Vue 2, so plan for this in advance.
Szymon Licau: At the same time, migration itself is risky. If you think about it, it's a change that affects your whole application, and it can introduce bugs and breaking changes. Of course, that's bad, because you don't want to impact your users negatively.
Because it's such a big change, it's also difficult to accurately estimate how much time and effort the migration will take. There are so many uncertainties involved. Even taking it one step at a time, you'll uncover new things that add to the workload.
2026 update: Vue 2's End of Life is now behind us. The final release is Vue 2.7.16, and the Vue team no longer ships fixes, including security patches. Vue 2 apps keep running, and the packages remain available on npm, but each year the technical debt grows. If you have to stay on Vue 2 for compliance or security reasons, the official EOL page points to paid extended support from HeroDevs (Vue 2 NES).
What Are the Benefits of Migrating from Vue 2 to Vue 3?
Migrating to Vue 3 gets you better performance, stronger TypeScript support, new architectural features such as the Composition API, Teleport and Suspense, and access to a modern, fast-moving ecosystem that Vue 2 can't use.
Artur Rosa: The upgrade will not only eliminate future problems, but it can also be rewarding. So, what can we gain?
Let me start with performance. I'm not a huge fan of stating how much faster an application has become, because it depends on multiple factors. The truth is that in almost all cases, Vue 3 is faster than the previous version, thanks to its new rendering engine, and for some applications the change is quite noticeable. Performance has a significant impact on UX and on how users perceive an application, and it can also affect search engine optimization. If that's important for your project, keep it in mind.
Vue 3 also introduces several new features, such as:
the Composition API,
Teleport,
Suspense,
multiple root elements in a template.
These features open up entirely new possibilities for building a maintainable and scalable architecture, which matters most in large, complex applications. The Vue team has backported some of them to Vue 2, but only some, and with additional limitations. To take full advantage of them, you need to migrate. They also help with performance, because they provide new ways of sharing logic. So they're not only great tools for developers; they can change how the application works.
When creating Vue 3, the core team was very focused on developer experience. My impression is that this focus has become a priority across the ecosystem. Just take a look at Vite, Vitest, and libraries such as Pinia or VueUse, which work with virtually no configuration and are super fast, lightweight and intuitive. Thanks to Vue 2.7, it's still possible to use some libraries developed mostly for Vue 3, but unfortunately only a tiny part of them.
Another thing is TypeScript support. Thanks to it, code editors can help developers as they work. We also have more ways to ensure the stability of the software, because Vue 3 lets you analyze the entire application's code statically.
Lastly, I want to mention some upcoming Vue 3 features. As a sneak peek, this year's releases should include lazy hydration and SSR-only template elements. The plan for the second half of the year is to ship Vapor Mode, an alternative compilation strategy for Vue components inspired by SolidJS. It could be a game changer for applications that require extreme performance. Unfortunately, there's no hope of those features being backported to Vue 2.
2026 update: Lazy hydration shipped in Vue 3.5 in September 2024. Vapor Mode took longer than planned. As of October 2026, it's part of Vue 3.6, which is still in the release-candidate stage, while 3.5 remains the latest stable line. Vapor Mode is opt-in and works with the Composition API only. For a closer look at what changed in 3.5, see our Vue 3.5 release overview.
When Is the Right Time to Migrate from Vue 2 to Vue 3?
The right time depends on the application. Migrate sooner if you're actively building new features or planning significant updates. A small, stable app that's mostly in maintenance mode may not justify the cost, and an app that must support Internet Explorer 11 can't move to Vue 3 at all.
Szymon Licau: So, you know the benefits, and the migration may look enticing. But it's not as simple as one might think. Sometimes it may not be a good choice, or even possible. Before we dive into things a bit deeper, let me bring back a quote from Evan You, the creator of Vue, from the State of Vue.js report produced by the team at Monterail:
"I suggest evaluating the situation on a case-by-case basis. [...] If Vue 2 works well, making a change might not be a cost-effective solution. It really depends on how much you want to leverage the new features."
— Evan You, creator of Vue.js
Essentially, if Vue 2 works well for you, migrating might not be the most cost-effective solution, and you should weigh several factors. The situation has changed quite a bit since Evan said that, since there's now an End of Life announcement for Vue 2, but I think the point still stands.
Should a Small or Maintenance-Mode Vue 2 App Be Migrated?
Sometimes the decision isn't as difficult as you think. Start with the size of your application. If you have a small application that has been working reliably for a long time, it may not be worth migrating it to Vue 3, and your resources could perhaps be allocated elsewhere. However, if you're planning significant updates, or you want to benefit from improved tooling and TypeScript support, consider migrating sooner rather than later.
Likewise, if you're not building new features for an application, or only in a limited fashion, and it's mostly maintenance, the migration may be too costly, because it requires additional resources. Staying with Vue 2 may be the better option.
Finally, if your application has to support older browsers like Internet Explorer 11, Vue 3 won't work there, so you have to stay with Vue 2. That's the only choice you have, but there are still things you can do to improve your codebase with Vue 2.7.
2026 update: Microsoft retired Internet Explorer 11 in June 2022, so very few products still need to support it. If yours is one of them, it's worth questioning that requirement before ruling out a Vue 3 migration.
Which Technical Factors Make a Vue 3 Migration More Complex?
Some technical factors influence how complex the migration will be. Ask yourself:
How many dependencies don't support Vue 3, how important are they, and do you have alternatives?
Does your app use non-public Vue APIs?
Does it rely on behavior that changed between Vue 2 and Vue 3?
Does the code follow the best practices in the Vue Style Guide?
Does it use non-standard syntax, such as class-based components?
Is server-side rendering involved?
Does it use a meta-framework on top of Vue, such as Nuxt?
Are you using a UI framework?
What Makes a Vue 2 to Vue 3 Migration Smoother?
High test coverage and few external dependencies are the two biggest factors that make a Vue 3 migration smoother. With both in place, the official Vue migration guide is often all you need.
Szymon Licau: The short answer is: it depends on many factors that you have to look at carefully. If your application has high test coverage, that's excellent. Automated tests catch regressions quickly, so you'll be much more confident that the app still works and that you're not introducing new bugs. Migration is actually quite a scary and risky process, so that confidence matters.
If you have few external dependencies, the migration may be pretty straightforward. The official Vue migration guide is just what you need to complete it, and it won't take much time or effort. Combining it with an incremental migration strategy also helps you avoid downtime.
How Can You Prepare a Vue 2 App If You're Not Migrating Yet?
Even if you decide not to migrate, or not right now, there are good steps you can take to improve your codebase:
Move from Vue CLI and webpack to Vite. It's the recommended way to build Vue applications today, and it improves build speed, developer experience and configuration.
Upgrade to Vue 2.7. If you haven't done it yet, I highly recommend it. Many features are backported from Vue 3, including the Composition API and
<script setup>. You also get access to new libraries such as VueUse, better TypeScript support and better tooling support (Volar).
Monterail's Vue migration cheat sheet breaks these preparation steps down further.
How Does Monterail Approach Vue 2 to Vue 3 Migration?
Monterail migrates incrementally. After an audit of the project, the team splits the migration into small milestones that are deployed often, which limits the risk to end users and makes each step easier to estimate.
Szymon Licau: Before we begin the migration, we, of course, audit the project to get the bigger picture. You have to think not only about what to complete before migrating to Vue 3, but also about your resources, the technical aspects and the project's status.
As for the actual migration, at Monterail we always try to minimize the risk for your end users. That's why we use a concept called incremental migration. As the name suggests, the migration isn't a single step where your team takes a giant leap. Instead, you define smaller milestones, deploy your application more often, and get there in smaller steps. This also minimizes the risk, because you control which areas of the application you affect.
If you go step by step, you'll be better able to predict how much effort is needed, what the unknowns are, and how long a given step could take.
If your project doesn't have automated tests yet, this is an excellent moment to introduce them and increase your confidence in the code you ship to production. That means you can continuously improve your codebase and start reaping the benefits early.
It's also important to remember that migration doesn't have to block development. Feature work can continue in parallel.
To see how this works in practice, read our Vue 3 migration case study and the lessons our team learned. For a larger example, see how we moved Gradido's platform from Vue 2 to Vue 3, replacing incompatible libraries and rewriting more than 1,000 tests along the way.
Which Incremental Migration Strategies Let You Keep Shipping Features?
Here are a few solutions that make it possible.
The first one is probably the most obvious: using the migration build. It lets you have Vue 3 and Vue 2 code in a single codebase, so you can change the parts of the application you want one by one, gradually migrating them over to Vue 3. Once you're done, you switch from the migration build to a regular Vue 3 build.
It's not all roses, though. The migration build adds performance overhead to your application and can increase your bundle size. If parts of your application are very performance-critical, this might not be the way for you, because it will definitely impact those areas.
Another solution is perhaps more radical, but it's particularly useful if you plan to introduce new features. The idea is this: you start writing them in Vue 3 in a separate application, even before you migrate. There are quite a few non-trivial issues to solve here, like sharing code between the two applications, but you can write new, modern Vue 3 code and slowly move the old modules over to the new application. Once you're done, you sunset your Vue 2 application. This approach is also useful if you have some refactoring of your codebase in mind.
A third solution, and perhaps the most complex one, is to introduce a micro frontend architecture. Instead of one large application, you split it into several submodules, each working as a small application.
This approach adds complexity, but it has benefits. Each of these smaller applications can use different technologies, including different frameworks or different versions of the same framework. You essentially cut your workload into smaller pieces, which you can address in parallel or one by one, migrating each of them when you need to.
How Do You Handle Vue 2 Dependencies That Don't Support Vue 3?
When a dependency doesn't support Vue 3, you have five options: find an alternative, wrap the dependency behind your own abstraction, wait for official support, contribute the fix yourself, or replace it with a custom solution.
Szymon Licau: There are some dependency issues between the two versions. Here are some steps you can take to address them.
If a dependency doesn't support Vue 3 but worked fine with Vue 2, you can, of course, try to find an alternative. You'll often have to tweak your code to account for the differences between the two libraries, and that isn't always possible, but it's always an option.
If you're not already doing so, you can also decouple your dependencies by putting each one behind a wrapper. This way, you have your own abstraction with the external dependency inside it, and you treat it like a black box. You can tweak and change its internals while the rest of your code keeps working. This works especially well for UI components.
You can wait for Vue 3 support if you know that the team behind the dependency is working on it. Check whether waiting fits your product timeline. If the dependency is essential, this decision could force you to put off the migration.
If you know the dependency is the only option and nobody is working on Vue 3 support, you can always contribute to the Vue community and help solve the issue yourself.
Lastly, if everything else fails, you can replace the dependency with a custom solution. This will obviously increase your workload, so I'd see it as a last resort.
Why Is Migrating a Nuxt 2 App to Vue 3 Harder?
Szymon Licau: Typically, the issues that come up aren't connected to the Vue framework itself. They're usually about the dependencies. For example, migrating a Nuxt application might be quite complex and challenging, especially because many of the popular modules for Nuxt 2 are still not available for Nuxt 3.
The Nuxt team has proposed some solutions here, like Nuxt Bridge, and there are other ways to approach it. If your product doesn't have many dependencies and you follow the official migration guide, the whole process should be pretty straightforward.
2026 update: Nuxt 2 reached end of life on June 30, 2024, so the same reasoning that applies to Vue 2 now applies to Nuxt 2 as well. For more examples of the problems teams run into, see our roundup of Vue 3 migration challenges and case studies.
Key Takeaways
Vue 2 has been end-of-life since December 31, 2023, and gets no more fixes, including security patches.
Dependencies, not the Vue framework itself, are usually the hardest part of a Vue 3 migration.
High test coverage is the biggest single factor in a low-risk migration.
Incremental migration (a migration build, a parallel Vue 3 app or micro frontends) lets feature work continue.
Staying on Vue 2 can still make sense for small, stable apps in maintenance mode. Upgrade them to Vue 2.7 and Vite either way.
Is Migrating from Vue 2 to Vue 3 Worth It?
For most applications that are still growing, yes. Deciding not to migrate can be valid for a small, stable product, but it has gotten harder to defend since Vue 2 reached end of life. Each year without security fixes, library updates or developers who want to work with the stack makes staying put more expensive.
If you do migrate, treat it as a project of its own. Start with an honest audit of your dependencies, test coverage and team capacity. Then migrate incrementally, in milestones small enough to deploy, so problems surface early and never reach your users all at once. No plan will predict everything, but an incremental one keeps the surprises small. And migration doesn't have to freeze your roadmap: with the right strategy, feature work continues in parallel.
If you'd like help assessing your Vue 2 application or planning the migration, Monterail's frontend team has done this for our own products and for clients, and we're also available for broader web application development work. Get in touch to talk through your project.
Vue 3 Migration FAQ


)



