WhatsApp Us

Framework upgrade · Vue 2 is past end of life

Vue 2 to Vue 3 migration: upgrade your production app without breaking it

A Vue 2 to Vue 3 migration moves a live app off a framework that stopped getting security and browser fixes on 31 December 2023, onto the supported Vue 3 line. It is rarely a one-command job: event buses, filters, old component libraries, Vuex and Nuxt 2 all need attention. We are three freelance developers in India who audit the codebase first, then upgrade in stages behind the official migration build. Ongoing upkeep starts from ₹8,000/mo.

  • Vue 2 end of life31 December 2023, per the Vue team
  • Nuxt 2 end of life30 June 2024, per the Nuxt team
  • First stepA code audit and dependency inventory
  • Upgrade route@vue/compat, then remove compat flags
  • State managementPinia is Vue's official default
  • After release2 months free upkeep, then from ₹8,000/mo
  • Code audit first
  • @vue/compat staging
  • Vuex to Pinia
  • Vuetify 3 / Element Plus
  • Nuxt 2 to Nuxt 3
  • Zero-downtime releases
  • Itemised estimate

Three freelance developers in India · Vue, Nuxt and TypeScript · replies on WhatsApp 7 days a week

  • 3Developers who can split audit, code and testing
  • 2Working days to an itemised estimate after access
  • 2Months of free upkeep after the upgraded release
  • 7Days a week on WhatsApp during the cutover

The short answer

How do you migrate a Vue 2 app to Vue 3 safely?

A safe Vue 2 to Vue 3 migration starts with a dependency audit, then swaps in the @vue/compat migration build so the app runs on Vue 3 in Vue 2 mode. Warnings are fixed module by module, Vue Router and Vuex move to v4 or Pinia, UI libraries are upgraded, and compat is removed. Rebuilding from scratch instead starts from ₹60,000; upkeep from ₹8,000/mo.

If you also need a Vue developer for new features afterwards, see hire a Vue.js developer; for Nuxt apps, see Nuxt.js developer.

Last updated

Vue 2 to Vue 3 migration at a glance
Why nowVue 2 gets no security or browser-compatibility fixes after 31 Dec 2023
Main tool@vue/compat: Vue 3 running in configurable Vue 2 mode
Biggest cost driverUI library (Vuetify 2, Element UI, BootstrapVue) and custom plugins
StateVuex 4 as a stepping stone, or straight to Pinia
Nuxt appsNuxt 2 to Nuxt 3 is closer to a port than an upgrade
EstimateItemised after a code audit, in about 2 working days
Release styleStaged, behind staging and rollback, not a big-bang weekend

Upgrade work we take on

Pieces of a Vue 3 upgrade, scoped separately so you see the cost of each

Most Vue 2 codebases need some mix of these. We quote them as separate lines after the audit, so you can phase the work to your budget.

Why choose us

Who should run your Vue 3 upgrade?

Three common ways teams handle a Vue 2 to Vue 3 migration, and what each means for risk and cost.

Who should run your Vue 3 upgrade?
Aspect Your in-house team Hourly contractor BtechWaleTech
Knowledge of your code Deep Starts from zero Starts from a written audit you keep
Competes with feature work Yes, often stalls No No; features can continue in parallel branches
Estimate style Internal time only Open-ended hours Itemised by phase before approval
Upgrade experience Often first time Varies Compat build, Pinia, Vuetify 3 and Nuxt 3 ports
Testing before release Depends on existing tests Often manual clicking Smoke and key-flow tests added first
Release approach Big-bang common Varies Staged with a rollback plan
After release Same team Usually leaves 2 months free upkeep, then from ₹8,000/mo
Team size ceiling Your headcount One person Three people; very large monorepos need more

If your in-house developers know the codebase well and can be protected from feature requests for a few weeks, they may do the upgrade faster than any outsider; an audit from us can still help them plan it.

Pricing

What a Vue 2 to Vue 3 migration costs

We do not publish a single migration price, because two apps with the same number of screens can differ hugely in upgrade effort. The drivers are the UI library, how much code uses removed APIs such as filters and event buses, Vuex size, custom directives and plugins, Nuxt 2 usage and existing test coverage. After a code audit you receive an itemised estimate by phase in about two working days. For comparison, a fresh custom web app build starts from ₹60,000, and upkeep after the upgrade starts from ₹8,000/mo, following two free months.

Starting prices in INR and USD
ServiceIndia (INR)Worldwide (USD)Typical timelineWhat is included
Static website from ₹10,000 from US$150 1 to 2 weeks Up to 100 pages, Responsive design, Contact form and enquiry setup, Basic SEO tags and sitemap
SEO website (299+ pages) from ₹20,000 from US$300 3 to 5 weeks 299+ SEO pages, Keyword and page planning, Schema, sitemap, and internal linking, Design to deployment included
Ecommerce store from ₹50,000 from US$750 4 to 8 weeks Product and category pages, Payment gateway setup, Order and inventory basics, Performance tuning
Android & iOS app from ₹40,000 from US$600 6 to 10 weeks Android and iOS app (Flutter or React Native), Login, forms and push notifications, Admin panel and API connection, Google Play and App Store publishing
Custom web app or software from ₹60,000 from US$900 6 to 12 weeks Custom features and APIs, User accounts and roles, Admin panel, Deployment and handover
AI automation from ₹40,000 from US$600 2 to 4 weeks Workflow mapping, Tool and CRM integrations, AI agent or automation build, Testing and handover
Monthly SEO from ₹10,000/mo from US$150/mo Ongoing, monthly Technical fixes, On-page and content work, Local SEO and listings, Search Console reporting
Maintenance and support from ₹8,000/mo from US$120/mo Ongoing, monthly Content updates, Bug fixes, Backups and security checks, Speed and uptime checks

All prices are starting points, quoted in INR for India and USD for international clients, not fixed quotes. Final cost depends on the number of pages, features, integrations, content, and timelines. Share your requirement and you get an itemised estimate with nothing hidden. See full pricing.

What happens to a Vue 2 app after end of life?

Nothing breaks on the day itself. Vue 2 keeps working and stays downloadable, but since 31 December 2023 it receives no updates, including security and browser-compatibility fixes, according to the Vue team's official end-of-life page.

That makes Vue 2 end of life a slow risk rather than an outage. Each month, three things drift. Security: any vulnerability found in Vue 2 or in Vue 2-only libraries will not be patched upstream. Ecosystem: libraries drop Vue 2 support, so updating a date picker or chart package increasingly means you cannot. Hiring: developers who join your team learn Vue 3 patterns and find Vue 2 code, with mixins, filters and event buses, slower to work with.

The Vue team's EOL page also notes that browsers occasionally ship changes that break legacy libraries; it calls this extremely rare, but possible. For a customer-facing app, that tiny chance matters, because nobody upstream will issue a fix.

There are two responsible responses. Upgrade through a planned Vue 2 to Vue 3 migration, or, if an upgrade is truly impossible for now, buy paid extended support; the Vue EOL page points to a commercial option that continues security fixes. Doing nothing and hoping is the only irresponsible choice.

Is it safe to keep running Vue 2 in production?

For a short, deliberate period, often yes; indefinitely, no. The risk depends on what the app exposes to the internet, what data it handles and whether customers or auditors ask about unsupported software.

Score your app on four questions. Is it public, or behind a login used only by staff? Does it handle payments, health, financial or personal data? Do enterprise clients send security questionnaires that ask whether all components are supported? Do you plan significant new features in the next year? Every “yes” shortens the time you can safely wait.

An internal admin panel behind a VPN with no new features planned can wait months while you budget properly. A customer portal that handles personal data and is growing should treat the Vue 2 to Vue 3 migration as this quarter's work. Security questionnaires are an often-missed trigger: “uses end-of-life framework” can stall a sale.

  • Public-facing plus sensitive data: plan the upgrade now.
  • Staff-only tool, stable, no new features: schedule it, but do not wait for a crisis.
  • Being rewritten within a year anyway: consider paid extended support as a bridge.
  • Library updates already blocked: the cost of waiting is rising every month.

Vue 2 to Vue 3 migration: what actually breaks?

The official Vue 3 migration guide lists dozens of breaking changes, but in real codebases a handful cause most of the work: removed APIs, changed component contracts and libraries built on Vue 2 internals.

Removed outright

Filters are gone, so every {{ price | currency }} becomes a method or computed value. $on, $off and $once are removed, which kills the classic global event bus. $children and the propsData option are removed too.

Changed contracts

v-model on components uses a new prop and event name and replaces .sync. The .native modifier is removed; components declare emitted events with emits. $listeners merges into $attrs, which now also carries class and style. v-if and v-for precedence changed when both sit on one element.

Global API

new Vue() becomes createApp(), and global registrations such as Vue.use, Vue.component and Vue.prototype move onto the app instance. Plugins written the old way need adjusting.

Lifecycle and reactivity

beforeDestroy and destroyed are renamed beforeUnmount and unmounted. Watching an array for mutations now needs the deep option. data must always be a function.

The last category is the expensive one: component libraries and plugins that relied on Vue 2 internals. The official migration build documentation names Vuetify and Element UI as examples it cannot reliably support. We cover them in their own section below.

The code audit that should come before any Vue 3 upgrade estimate

Any honest estimate for a Vue 2 to Vue 3 migration comes after someone has read the code. The audit turns “we have a Vue 2 app” into a list of specific blockers, each with an effort range.

When you give us read access to the repository, we check package.json for every dependency and whether a Vue 3 version exists, the build setup (Vue CLI, webpack or Vite), the UI library and how heavily it is customised, the number of files using filters, event buses, .sync, .native and mixins, the size and shape of the Vuex store, custom directives and plugins, whether Nuxt 2 is involved, and what automated tests exist.

The output is a short written report you keep, whether or not you hire us. It lists blockers by severity, suggests a phase plan and gives an itemised estimate. Teams with in-house developers often use it as their own roadmap. We deliver it in about two working days after receiving access, and nothing is billed before you approve the written quote.

  • Dependency inventory with Vue 3 availability for each package.
  • Count of files using removed or changed APIs.
  • UI library verdict: upgrade, replace or wrap.
  • State management plan: Vuex 4 first or direct to Pinia.
  • Test gaps that should be filled before touching anything.

How does the @vue/compat migration build work?

@vue/compat is a special build of Vue 3 that behaves like Vue 2 by default and prints a warning wherever your code relies on changed behaviour. The official guide says it runs in Vue 2 mode by default, with most public APIs behaving exactly like Vue 2.

Setting it up means installing Vue 3 alongside @vue/compat, aliasing vue to @vue/compat in your build tool, and enabling compatConfig: { MODE: 2 } in the compiler options. The migration guide includes examples for Vue CLI, plain webpack and Vite. Once the app boots, the browser console becomes your to-do list: each deprecation warning names the feature and links to the relevant guide entry.

The magic is granularity. Compat behaviour can be switched off per feature globally, or per component with a compatConfig option. That lets you migrate one module, flip it to full Vue 3 behaviour, test it, release it, and move on, while the rest of the app still leans on compat.

It has limits, and the official page is frank about them. Dependencies that depend on Vue 2 internal APIs or undocumented behaviour are not reliably supported. Internet Explorer 11 support is dropped entirely in Vue 3. Custom server-side rendering setups need rework beyond what the migration build covers. Knowing these limits before you start is why the audit matters.

Step-by-step Vue 2 to Vue 3 migration path for a live app

The safest order is: add tests, upgrade tooling, switch to the compat build, fix warnings in small releases, upgrade router and store, replace the UI library, then remove compat. Each step ships to production separately.

  • Freeze and fence. Tag the current release, write smoke tests for login, the main dashboard and money-related flows.
  • Tooling first. Upgrade the build chain, often moving to Vite, while still on Vue 2.7 if that helps.
  • Swap to @vue/compat. Get the app compiling and booting on Vue 3 in Vue 2 mode.
  • Fix compiler warnings. Templates first: filters, v-model, .sync, .native, v-if/v-for.
  • Router and store. Move to Vue Router 4 and Vuex 4, or begin the Pinia move.
  • Runtime warnings, module by module. Event buses, $listeners, lifecycle names, array watchers.
  • UI library. Upgrade or replace, screen by screen, with visual checks.
  • Remove compat. Drop the alias, run the full test suite, release.

Vue 2.7 deserves a mention: it backported the Composition API and <script setup> to Vue 2, so moving to 2.7 first lets you write Vue 3-style code before the switch. It is a useful stepping stone, not a destination, because it shares Vue 2's end-of-life date.

Vuex to Pinia: should state management move in the same Vue 2 to Vue 3 migration?

Not necessarily in the same release. The Vuex site says Pinia is now the new default and Vue's official state library, while Vuex 3 and 4 are still maintained but unlikely to gain new features. Vuex 4 works with Vue 3, so you can upgrade Vue first and move to Pinia after.

We usually recommend a split plan. During the core Vue 2 to Vue 3 migration, move Vuex 3 to Vuex 4, which requires small changes such as creating the store with createStore. Then convert to Pinia module by module. Pinia's own migration guide confirms that Pinia and Vuex can be mixed during the migration, so there is no big-bang moment.

What the conversion involves: each Vuex module becomes a Pinia store with an id, which replaces namespacing. Mutations disappear; their logic moves into actions, or state is assigned directly. Getters that merely return state can be deleted. Components switch from mapState and mapActions helpers to calling the store directly, or keep equivalent Pinia helpers during the transition.

Why bother at all if Vuex 4 works? Better TypeScript inference, less boilerplate, devtools support and the fact that new Vue developers learn Pinia first. For a small store the move is a day or two; for a large, tangled store it deserves its own line in the estimate.

Vue Router 3 to Vue Router 4: what changes?

Vue 3 needs Vue Router 4. The upgrade is usually modest: the router is created with createRouter and a history function, catch-all routes use a new syntax, and a few navigation behaviours changed.

In most apps we see four kinds of change. Router creation moves from new VueRouter() to createRouter() with createWebHistory() or createWebHashHistory(). The * catch-all becomes a named parameter with a custom regex. router-link props like tag and event are removed in favour of a scoped slot. And navigation now returns promises consistently, which surfaces redirect loops and unhandled rejections that Vue 2 apps silently ignored.

The last point catches teams out. Code that pushed the same route twice, or fired navigation inside guards without returning, may now log errors or behave differently. We add a test for each guard in the audit phase, so these show up before release rather than in a customer's browser.

If your app uses route-based code splitting, the () => import() pattern still works. If you used router.app or relied on the old next() callback style heavily in guards, budget a little extra time.

Upgrading Vuetify 2 and Element UI during a Vue 2 to Vue 3 migration

The UI library is usually the single largest cost in a Vue 2 to Vue 3 migration. Vuetify 2 and Element UI were built for Vue 2, and the official migration build notes it cannot reliably support libraries like them that lean on Vue 2 internals. You move to their Vue 3 versions, Vuetify 3 and Element Plus, or replace them.

Why it is expensive: component names, props, slots, grid systems and theming changed between major versions. A data table with custom slots, a form built from dozens of inputs with validation rules, or a navigation drawer with nested lists may each need rewriting against the new API. Custom SCSS overrides aimed at old class names stop matching.

We handle this screen by screen. First we list every component the app uses and how often. Then we build a small mapping sheet from old usage to new usage for your most common patterns, so fixes stay consistent. We take before and after screenshots of each screen and compare them, because a UI library upgrade that silently shifts a button can break a user's muscle memory.

Vuetify 2 to Vuetify 3

Expect changes in data tables, lists, forms and theming. Plan extra time for heavily customised data tables and any SCSS overrides.

Element UI to Element Plus

Component coverage is broadly similar, but props, events and icon handling changed. Form validation and table slots deserve careful testing.

Abandoned libraries

If a library never released a Vue 3 version, replace it with a maintained one, or write a thin component of your own if you used only a small part.

Nuxt 2 to Nuxt 3 migration notes

Nuxt 2 reached end of life on 30 June 2024, according to the Nuxt team's announcement, and receives no further security or browser fixes. Moving to Nuxt 3 is closer to a port than an upgrade, because Vue, the build tool and the server engine all change at once.

The Nuxt migration overview names three shifts: Vue 2 to Vue 3 with the Composition API and <script setup> as the default style, webpack 4 and Babel to Vite or webpack 5 with esbuild, and a runtime Nuxt dependency to a minimal standalone server compiled with Nitro. Each has knock-on effects for your code.

In practice we check data fetching first, because Nuxt 2's asyncData and fetch patterns need translating to Nuxt 3's composables. Then modules: every Nuxt 2 module needs a Nuxt 3 equivalent or replacement. Then server middleware and API routes, which move into the Nitro server directory. Then head and meta handling, which matters for SEO; we compare rendered titles, meta descriptions and canonical tags before and after on every route type.

Nuxt also offers Nuxt Bridge for teams that must stay on Nuxt 2 for a while but want some Nuxt 3 features. It can reduce risk on very large apps, though it is still a detour. Our Nuxt.js developer page covers new Nuxt work once the port is done.

Options API or Composition API after the upgrade?

Keep the Options API. Vue 3 fully supports it, and rewriting every component in the Composition API during a migration adds risk with no benefit to users. Write new code in the Composition API if your team prefers it.

This is the most common scope creep we see in a Vue 2 to Vue 3 migration. A developer, excited by <script setup>, starts rewriting working components “while we are in there”. The diff balloons, reviews slow down, and bugs appear in code that had nothing to do with the upgrade.

Our rule: the migration changes only what Vue 3 requires. Mixins that still work stay mixins for now. Once the app is on plain Vue 3 and stable, you can convert mixins to composables gradually, starting with the ones that cause naming clashes or are shared most widely. That becomes normal maintenance work, not a migration line item.

The exception is code you must touch anyway. If a component uses an event bus and filters and relies on $listeners, it may be simpler to rewrite it with the Composition API than to patch three patterns separately. We flag those cases in the audit so you can decide.

How to run a Vue 2 to Vue 3 migration on a production app without downtime

Ship the migration as a series of small releases, each tested on staging and deployable with a one-step rollback. Users should never notice a “migration day”.

Big-bang upgrades fail for predictable reasons: too many changes to review, too many screens to test manually, and no clean way back if something breaks on a Monday morning. The compat build exists precisely to avoid this, so use it.

Our release discipline for a Vue 3 upgrade looks like this. Every phase lives on its own branch and merges only after smoke tests and key-flow end-to-end tests pass. We deploy to a staging copy wired to test data, and your team clicks through a written checklist of business-critical screens. Production deploys happen early in the week at a time your users are least active, with the previous build kept ready to restore. For apps with heavy usage, we can route a small share of traffic or a group of internal users to the new build first.

Error monitoring is the final safety net. If you do not already capture front-end errors, we add a lightweight tool before the migration starts, so we can compare error rates before and after each release.

Fixed-scope or hourly: how Vue 2 to Vue 3 upgrade estimates work

A fixed-scope quote works when the audit has mapped the blockers and the codebase is well understood. Hourly billing suits messy, poorly documented code where surprises are likely. A phased mix, with the core upgrade scoped and the unknowns billed by time, often suits both sides.

Fixed scope gives you budget certainty, and the developer carries the risk of underestimating. The catch: to protect themselves, some sellers pad the figure, or define scope so tightly that every surprise becomes a change request. Hourly billing is transparent but open-ended, and it needs trust and regular progress reports.

We prefer an itemised estimate by phase after the audit. Well-understood phases, such as tooling, compat switch-over and template fixes, are estimated as defined deliverables. Uncertain phases, such as rescuing a heavily customised Vuetify data table or porting an unusual Nuxt module, are flagged with a range and the reason for the uncertainty. You approve phase by phase, so you can stop after any release with a working app. Our general thinking on billing models is on fixed price vs time and material.

Whatever model you choose, insist on written phase boundaries. “Migrate to Vue 3” is not a scope; “app runs on Vue 3 without the compat build, all listed flows pass tests” is.

Upgrade or rewrite: when is a fresh Vue 3 build smarter?

Upgrade in almost every case. A rewrite makes sense only when the app is small, the code is so tangled that nobody can change it safely, or the business needs have shifted so far that most screens would be redesigned anyway.

Rewrites are seductive because they promise clean code. They also throw away years of bug fixes and edge cases hidden in the old code, and they freeze feature work until the new version catches up. Most teams underestimate how long that takes.

Signs a rewrite might win: the app has fewer than a dozen screens, there are no tests and no original developers, the UI library is abandoned and would be replaced anyway, and a redesign is already planned. Signs you should upgrade: the app is large, works, earns money and has users who know its screens. For a rewrite, custom web app work starts from ₹60,000.

Occasionally teams ask whether to switch frameworks entirely. That is a much bigger decision than a Vue 2 to Vue 3 migration and rarely justified by the EOL alone; Vue 3 is actively maintained. If you are weighing it for hiring reasons, our page on hiring a Svelte developer discusses how framework choice affects hiring and maintenance.

Worked example: a Vue 2 to Vue 3 migration plan for a hypothetical Gurgaon dashboard

This scenario is imagined to show how an audit shapes the plan. It is not a client or a real result.

Say a logistics startup in Gurgaon runs a Vue 2.6 dispatcher dashboard built with Vue CLI, Vuetify 2 and a Vuex store of fourteen modules. Filters format dates and currency in about sixty templates, and a global event bus pushes live shipment updates between components. There are almost no automated tests. The app is staff-only but handles customer addresses and phone numbers, and a large enterprise prospect has asked whether all software is supported.

The audit would recommend six phases. First, smoke tests for login, shipment search, assignment and invoicing. Second, move to Vite on Vue 2.7. Third, switch to @vue/compat and clear template warnings, replacing filters with small formatting helpers. Fourth, Vue Router 4 and Vuex 4, and replace the event bus with a tiny emitter or a Pinia store. Fifth, the Vuetify 3 upgrade, screen by screen, starting with the least-used screens to learn the patterns. Sixth, remove compat and convert Vuex modules to Pinia one at a time.

Each phase would ship on its own, and the enterprise questionnaire could be answered honestly with a dated plan after phase three. The Vuetify data tables would carry the widest estimate range.

Vue 2 to Vue 3 migration help across India

We work remotely with product teams and businesses across India. Many Vue 2 apps date from the years when Vue was the friendly choice for small teams, so they turn up everywhere, not just in tech hubs.

We see Vue 2 dashboards at SaaS and logistics startups in Gurgaon, Noida and Pune, internal tools at IT service firms in Hyderabad, Chennai and Kochi, ecommerce admin panels in Ahmedabad and Jaipur, and ed-tech portals in Indore and Bhopal. The upgrade process is identical wherever the team sits: repository access, written audit, itemised estimate, staged releases.

We work in English and Hindi, reply on WhatsApp seven days a week, and schedule calls during IST working hours.

Vue 2 to Vue 3 migration checklist

Use this list to prepare before you talk to any developer. The more boxes you can tick, the tighter and cheaper the estimate.

  • Repository access ready to share, read-only is fine for the audit.
  • Current Vue, Vue Router, Vuex and UI library versions noted.
  • List of business-critical flows that must never break.
  • Staging environment available, or budget to create one.
  • Front-end error monitoring in place, or agreed to add it.
  • Browser support policy decided (Vue 3 does not support IE11).
  • Nuxt 2 usage, SSR and any custom build steps documented.
  • A named person on your side to test each phase on staging.
  • Feature work plan agreed so it does not collide with migration branches.
  • Decision on Pinia now or after the core upgrade.

If your previous developer has left and access is patchy, start with recovering a project when a developer leaves. Otherwise, share the repository via the contact page and we will begin the audit.

Breaking changes

Common Vue 3 breaking changes, their symptoms and fixes

Drawn from the official Vue 3 migration guide; the compat build warns about most of these at runtime.

Common Vue 3 breaking changes, their symptoms and fixes
Vue 2 patternSymptom on Vue 3Usual fix
Filters: {{ x | currency }} Template compile errorMethod, computed value or helper function
Event bus with $on/$emit Listeners never fireSmall emitter library, provide/inject or a Pinia store
.sync modifier Parent value stops updatingv-model:propName
@click.native Click handler ignoredDeclare emits or rely on attribute fallthrough
beforeDestroy / destroyed Cleanup never runsbeforeUnmount / unmounted
new Vue() and Vue.use() App fails to bootcreateApp() and app.use()
Array watcher without deep Watcher misses pushesAdd deep: true

Timeline by phase

Typical phases of a Vue 2 to Vue 3 migration

Durations vary with codebase size; the audit gives you figures for your app.

Typical phases of a Vue 2 to Vue 3 migration
PhaseWhat happensShips to production?Main risk
Audit Dependency inventory, blocker list, estimateNoHidden internals in custom plugins
Safety net Smoke and key-flow tests, error monitoringYes, tests onlyLow
Tooling Build chain update, optional Vue 2.7 stepYesBuild config quirks
Compat switch Vue 3 via @vue/compat, template fixesYesLibrary incompatibilities surface
Router and store Vue Router 4, Vuex 4 or PiniaYesNavigation guard behaviour
UI library Vuetify 3, Element Plus or replacementYes, screen by screenLargest effort and visual drift
Compat removal Plain Vue 3, full regression runYesStray Vue 2 behaviour

Estimate models

Fixed-scope, hourly or phased: which suits your migration?

Our general comparison of billing models is on fixed price vs time and material.

Fixed-scope, hourly or phased: which suits your migration?
ModelWorks best whenWatch out for
Fixed scope Audit done, clean code, clear phase boundariesPadding, or every surprise becoming a change request
Hourly Messy code, no tests, unknown internalsOpen-ended cost; needs weekly progress reports
Phased mix Most real apps: known phases scoped, unknowns rangedNeeds written boundaries per phase
Retainer after upgrade Ongoing features and dependency updatesScope creep; ours starts from ₹8,000/mo
In-house with outside audit Strong team, limited upgrade experienceFeature pressure pausing the migration

Teams across India

Where we help with Vue 2 to Vue 3 migration work

All migration work is remote: repository access, video calls and WhatsApp. These city pages describe the local businesses we work with.

  • SaaS dashboard upgrades in Gurgaon

    Gurgaon's logistics, fintech and SaaS startups often run Vue 2 dashboards built quickly in their early years that now face enterprise security reviews.

  • Product team support in Noida

    Noida product companies and IT service teams need Vue upgrades done alongside feature work without pulling their own developers off the roadmap.

  • Startup app upgrades in Pune

    Pune's startups and automotive software teams maintain Vue admin panels that must stay stable for staff while the framework moves to Vue 3.

  • Internal tool migrations in Hyderabad

    Hyderabad IT and pharma firms run internal Vue 2 tools behind logins, where a staged upgrade avoids disrupting daily operations.

  • Enterprise portal upgrades in Chennai

    Chennai's manufacturing and services companies use Vue-based portals for dealers and vendors that need supported software for audits.

  • Tourism and IT apps in Kochi

    Kochi's IT park teams and travel businesses maintain Vue booking and admin apps that still depend on Vue 2 component libraries.

  • Ecommerce admin panels in Ahmedabad

    Ahmedabad sellers and distributors often run custom order and inventory panels in Vue 2 that need upgrading before adding new features.

  • IT service projects in Mohali

    Mohali development shops sometimes inherit Vue 2 client projects and need a partner for the upgrade audit and the risky UI library phase.

  • Ecommerce and travel apps in Jaipur

    Jaipur handicraft exporters and travel operators run Vue front ends for catalogues and bookings that must keep working through the upgrade.

  • Ed-tech portals in Indore

    Indore's coaching and ed-tech businesses use Vue student portals with exam and payment flows that need thorough testing on each release.

  • Government-adjacent tools in Bhopal

    Bhopal institutions and contractors maintain long-lived Vue dashboards where a written upgrade plan helps with procurement and audits.

  • Media and fintech apps in Kolkata

    Kolkata publishers and finance firms run Vue apps where Nuxt 2 powered public pages and SEO must survive the Nuxt 3 port intact.

  • Agritech and wine-region apps in Nashik

    Nashik agritech and trading businesses use Vue dashboards for procurement and dispatch that small teams keep running with limited time.

  • Banking and port software in Mangaluru

    Mangaluru's banking, education and port-linked businesses maintain Vue tools where security questionnaires flag end-of-life frameworks.

  • Product engineering in Bengaluru

    Bengaluru teams with large Vue codebases often want an outside audit and a second pair of hands for Pinia and Vuetify phases.

How it works

How we run a Vue 2 to Vue 3 migration

  1. Share access and context

    Give read access to the repository and tell us which flows matter most, who uses the app and any upcoming deadlines such as an enterprise security review.

  2. Written audit and estimate

    In about two working days you get a blocker list, a phase plan and an itemised estimate. You keep the report whether or not you proceed.

  3. Safety net first

    We add smoke and key-flow tests and front-end error monitoring before touching the framework, so every later change can be checked quickly.

  4. Staged upgrade

    Tooling, compat switch, template fixes, router and store, UI library and compat removal, each on its own branch and staging deploy.

  5. Release with rollback

    Each phase goes live early in the week with the previous build ready to restore, and we watch error rates closely afterwards.

  6. Handover and upkeep

    Updated README, notes on remaining Options API or mixins, and two months of free upkeep before paid maintenance from the agreed rate.

Questions

Vue 2 to Vue 3 migration: questions teams ask

When did Vue 2 reach end of life?

Vue 2 reached end of life on 31 December 2023, according to the Vue team's official page. It remains available on npm and CDNs, but no longer receives updates, including security and browser-compatibility fixes. Apps keep running, but any newly found vulnerability will not be patched upstream, and libraries steadily drop Vue 2 support.

Is it safe to keep using Vue 2?

For a short, planned period it can be acceptable, especially for staff-only tools with no new features. For public apps handling personal or payment data, the risk grows each month because security issues will not be fixed upstream. Enterprise security questionnaires also increasingly flag end-of-life frameworks. Plan an upgrade, or buy paid extended support as a bridge.

How long does a Vue 2 to Vue 3 migration take?

It depends on the codebase rather than the number of screens. A small app with a light UI library can move in a couple of weeks; a large dashboard with Vuetify 2, a big Vuex store and no tests can take a few months in stages. The written audit gives you phase-by-phase durations for your specific app.

How much does a Vue 2 to Vue 3 migration cost?

We quote after a code audit, because effort depends on the UI library, removed APIs in use, store size, Nuxt usage and test coverage. You receive an itemised estimate by phase in about two working days. For reference, a fresh custom web app starts from ₹60,000, and maintenance after the upgrade starts from ₹8,000/mo, after two free months.

What is the @vue/compat migration build?

@vue/compat is an official build of Vue 3 that runs in Vue 2 mode by default and warns wherever code relies on behaviour that changed. You alias vue to @vue/compat, enable compatibility mode, then fix warnings feature by feature or component by component. It lets a live app move to Vue 3 in small, testable steps instead of one risky release.

What does @vue/compat not handle?

According to the official guide, it cannot reliably support dependencies that rely on Vue 2 internal APIs or undocumented behaviour, with component libraries like Vuetify and Element UI given as examples. Vue 3 also drops Internet Explorer 11 entirely, and custom server-side rendering setups need rework beyond the migration build. These are the areas to check first in an audit.

Do I have to move from Vuex to Pinia?

Not immediately. Vuex 4 works with Vue 3, and the Vuex site says versions 3 and 4 are still maintained, though unlikely to get new features. Pinia is now Vue's official default. We usually upgrade Vue with Vuex 4 first, then convert modules to Pinia gradually, since Pinia's guide confirms both can run side by side during migration.

How hard is upgrading Vuetify 2 to Vuetify 3?

It is often the largest single task in the migration. Components, props, slots, grid and theming changed, so heavily customised data tables, forms and navigation need rewriting against the new API, and SCSS overrides may stop matching. We work screen by screen with before-and-after screenshots so layout changes are caught and fixed deliberately.

What about Element UI apps?

Element UI was built for Vue 2, so a Vue 3 app moves to Element Plus, its Vue 3 counterpart. Coverage is broadly similar, but props, events, icons and some form behaviour differ. Tables with custom slots and form validation rules need the most testing. If only a few components are used, replacing them with lighter alternatives can also make sense.

Can you migrate Nuxt 2 to Nuxt 3?

Yes. Nuxt 2 reached end of life on 30 June 2024. Moving to Nuxt 3 changes Vue, the build tool and the server engine together, so it is closer to a port. We translate data fetching, replace modules, move server middleware into the Nitro server and compare meta tags on every route type so SEO is preserved.

Should we rewrite in the Composition API while migrating?

No. Vue 3 fully supports the Options API, and rewriting working components during the upgrade adds risk without helping users. Keep the migration to what Vue 3 requires, then convert mixins to composables gradually afterwards. The exception is a component that needs several fixes at once, where a rewrite may genuinely be simpler.

Will users notice the upgrade?

They should not. We ship the migration as a series of small releases, each tested on staging with smoke and key-flow tests, deployed at quiet times with the previous build ready to restore. Front-end error monitoring lets us compare error rates before and after each release, so problems are caught quickly.

Should I choose a fixed-scope quote or hourly billing for the migration?

Fixed scope suits a well-understood codebase after an audit; hourly suits messy code with many unknowns. We usually recommend an itemised estimate by phase: defined phases scoped as deliverables, uncertain ones given a range with the reason. You approve each phase separately, so you can pause after any release with a working app.

Do we need tests before migrating?

You need at least a small safety net. If the app has few or no automated tests, we add smoke tests and end-to-end tests for business-critical flows such as login, search, checkout or invoicing before touching the framework. They are cheap compared with a regression reaching customers, and they stay useful after the migration.

Is Vue 2.7 a good stepping stone?

Often, yes. Vue 2.7 backported the Composition API and script setup to Vue 2, so moving there first lets your team write Vue 3-style code and upgrade tooling before the switch. It shares Vue 2's end-of-life date, though, so it is a step on the way, not a place to stay.

Should we switch to React instead of upgrading Vue?

Rarely, if the only reason is Vue 2's end of life. Vue 3 is actively maintained, and upgrading keeps years of business logic and bug fixes. A framework switch is effectively a rewrite, with the cost and feature freeze that implies. Consider it only if hiring, product direction or a planned redesign already point that way.

Can our in-house team do the migration with your help?

Yes. Some teams hire us only for the written audit and phase plan, then carry out the work themselves. Others ask us to take the riskiest parts, such as the UI library or Nuxt port, while their developers handle templates. Scope is agreed in writing before any work is billed.

Vue 2 se Vue 3 upgrade karna zaroori hai kya?

Haan, agar app lambe samay tak chalana hai. Vue 2 ko 31 December 2023 ke baad security fixes nahi milte. App abhi chal raha hai, lekin naye libraries aur security issues ke saath risk badhta jaata hai. Hum pehle code audit karte hain, phir stages mein upgrade karte hain taaki live app kabhi band na ho.

How do we share our code securely with you?

Add us as collaborators on your GitHub, GitLab or Bitbucket repository with the least access needed; read-only is enough for the audit. Secrets and production credentials should stay out of the repository. If you need an NDA, raise it at the start and any agreed terms go into the written quote. Remove our access whenever the work ends.

How do payments work for a migration project?

Payments follow the phases in your approved quote, with nothing billed before written approval. Clients in India pay by UPI or bank transfer. International teams pay in USD via Wise, bank wire or PayPal. Our general terms and refund policy pages explain the rest.

What happens after the migration is finished?

You get an updated README, notes on remaining mixins or Options API code worth converting later, and two months of free upkeep for bugs and dependency updates. After that, ongoing maintenance starts from ₹8,000/mo, with the scope written into your quote. We can also continue with new features on the upgraded codebase.

Next step

Get a written Vue 3 upgrade plan

Share read access to your repository and tell us which flows matter most. Within about two working days you will have a blocker list, a phase plan and an itemised estimate, and nothing is billed until you approve it.