Hire Vue.js developers
Vue sits between React's flexibility and Angular's structure, and hiring for it means establishing which of its two very different APIs someone actually works in.
What Vue.js actually is
Vue is a front-end framework maintained by an independent team rather than by a large corporation, funded largely through sponsorship. It is designed to be adoptable incrementally: it can enhance a single page in an existing server-rendered application, or it can be the foundation of a complete single-page application with official routing and state libraries.
Its distinguishing quality is the single-file component, which keeps a component's template, logic and styles in one file with scoped CSS by default. Teams consistently report that Vue is the easiest of the major frameworks to become productive in, and that is a real commercial advantage when the people writing front-end code are not primarily front-end specialists.
The hiring complication is that Vue has two substantially different authoring styles. The older options API organises a component by category, with data, computed values and methods in separate sections. The newer composition API organises by concern and composes logic into reusable functions. Both are supported and both are common in production. They read very differently, and a developer comfortable in one is not automatically comfortable in the other.
The part that separates seniors from mid-levels
Vue's reactivity is the thing to understand, because it works differently from React's. Rather than re-running a component function when state changes, Vue tracks which parts of the template depend on which reactive values and updates only those. This is why Vue applications often perform well without explicit optimisation, and it is also why the framework has specific rules about what is reactive. Developers who have hit those rules can tell you about losing reactivity by destructuring a reactive object, which is the classic Vue mistake.
The composition API is where the levels separate. Organising logic into composable functions that can be shared between components is genuinely powerful, and doing it badly produces composables with hidden dependencies and unclear lifecycles. A senior Vue developer can explain what belongs in a composable, how it cleans up after itself, and why a composable that reaches into global state is usually a mistake.
The third area is the ecosystem's official nature. Vue's router and state library are maintained by the core team rather than assembled from competing options, which removes a category of decision that React teams have to make. That is a genuine advantage, and it means that Vue experience is more uniform than React experience: two Vue developers are more likely to have used the same surrounding tools.
Where Vue.js is used
The label “Vue.js developer” covers several jobs that share a technology and little else. These are the settings the work usually turns up in, and the one you are hiring into should shape the whole process, because the judgement each demands is different.
Progressive enhancement
Adding interactivity to existing server-rendered applications, often Laravel or Django, without rewriting the front end.
Admin and internal tools
Dashboards and back-office interfaces where the shallow learning curve lets back-end developers contribute.
Product front ends
Complete single-page applications using the official router and store, common in small and mid-sized product teams.
Commerce storefronts
Headless commerce front ends, frequently through Nuxt for server rendering.
Agency work
Client projects where speed of delivery and ease of handover matter, and Vue's readability is an asset.
Migration from jQuery
Older applications adding structure incrementally, which Vue supports better than the alternatives.
If a candidate's experience sits in a different row of that list from the work you have, that is not a reason to reject them, but it is the thing to probe. Ask what would be different about their approach in your setting. Someone who can answer that has transferable judgement. Someone who says it would be much the same has probably not thought about it.
Which Vue.js versions are still supported
Vue publishes support windows per major version, and Vue 2 has reached end of life, which makes the version a codebase runs on a material fact rather than a detail.
The table is generated from public release data rather than written by hand, so it states what is supported today rather than what was true when any given article was published. Of the 8 most recent release lines, 3 are still maintained and 5 have passed their published end-of-life date. That distinction is the practical one when you read a job specification: a requirement written against a line that is now out of support tells you the specification is older than the codebase it describes, and it is worth asking which of the two the new developer will actually work in.
| Release | Released | End of life | Status | Latest patch |
|---|---|---|---|---|
| 3.5 | 2024-09-03 | none published | No published end-of-life date | 3.5.43 (2026-09-17) |
| 3.4 | 2023-12-29 | 2024-09-03 | End of life | 3.4.38 (2024-08-15) |
| 3.3 | 2023-05-11 | 2023-12-29 | End of life | 3.3.13 (2023-12-19) |
| 2.7 | 2022-07-01 | 2023-12-31 | Maintained | 2.7.16 (2023-12-24) |
| 3.2 | 2021-08-09 | 2023-05-11 | End of life | 3.2.47 (2023-02-02) |
| 3.1 | 2021-06-07 | 2021-08-09 | End of life | 3.1.5 (2021-07-16) |
| 3.0 | 2020-09-18 | 2021-06-07 | End of life | 3.0.11 (2021-04-01) |
| 2.6 | 2019-02-04 | 2022-07-01 | Maintained | 2.6.14 (2021-06-07) |
Source: endoflife.date public release data, read 2026-09-25.
Two questions follow from this table in an interview. The first is which line the candidate has most recently shipped against, because someone whose last production work was on an unsupported line has not had to deal with the changes since. The second is how they have handled an upgrade. Version migrations are where you see whether a developer reads release notes, writes characterisation tests before changing anything, and knows how to stage a rollout, or whether they upgrade in place on a Friday and hope.
The toolchain around it
Nobody hires for Vue.js alone. The surrounding tools are where most of the day-to-day work happens, and a gap in any of them costs more time than a gap in the core library. This is the set that turns up most often on real job specifications alongside it.
- Vite
- Build tool and dev server, from the same author as Vue and the default for new projects.
- Pinia
- The official state library, notably simpler than what it replaced.
- Vue Router
- Official routing, maintained by the core team rather than chosen from alternatives.
- Nuxt
- The meta-framework adding server rendering, routing conventions and deployment.
- TypeScript
- Well supported in the composition API and increasingly expected in commercial work.
- Vitest with Testing Library
- Testing, with behaviour-level component tests.
- VueUse
- A large collection of composables that removes a lot of routine work.
- Tailwind CSS
- Common styling choice, though scoped styles in single-file components are also idiomatic.
Related skills that frequently appear on the same specification: Node.js, Laravel, JavaScript, Next.js, TypeScript.
What to test in an interview
These are the topics that separate candidates in practice. Each one is given with why it discriminates, what a strong answer sounds like, and the response that should make you slow down. None of them requires a whiteboard.
Which API they work in
The first filter, since the two styles read very differently.
- Strong answer: States clearly which their recent work used and can explain why a team might choose either.
- Warning sign: Cannot distinguish them, which places their experience well back.
Reactivity and its limits
The classic source of Vue bugs, where state changes and nothing updates.
- Strong answer: Explains what loses reactivity, particularly destructuring, and how to avoid it.
- Warning sign: Has hit the problem and worked around it without understanding the cause.
Composables and their lifecycle
The main abstraction in modern Vue and easy to do badly.
- Strong answer: Writes composables with clear inputs and cleanup, and avoids hidden global state.
- Warning sign: Uses composables as a place to put shared mutable state.
Computed values versus watchers
Overuse of watchers is the most common structural mistake in Vue codebases.
- Strong answer: Prefers computed values for derived state and reserves watchers for side effects.
- Warning sign: Uses watchers to keep several pieces of state in sync, which is a sign the state is modelled wrongly.
Component communication
Tests whether they can structure an application rather than a page.
- Strong answer: Props down and events up by default, provide and inject for genuinely cross-cutting concerns, and a store only when warranted.
- Warning sign: Reaches for a global store for any communication between components.
Server rendering with Nuxt
Only relevant if you use it, and a distinct body of knowledge when you do.
- Strong answer: Understands the server and client boundary, hydration, and what breaks when browser APIs are touched too early.
- Warning sign: Treats Nuxt as Vue with extra configuration.
Migration experience
A significant share of Vue work involves older versions.
- Strong answer: Has moved an application across major versions and can describe the ecosystem problems rather than only the code changes.
- Warning sign: Has only worked on current-version greenfield projects.
Warning signs in a Vue.js codebase
The fastest way to read a candidate is to ask what they have found wrong in code they inherited. These are the patterns that come up most often, what they cost, and what fixing them looks like. A developer who recognises three or four of these from their own experience is worth more than one who can recite the documentation.
Losing reactivity by destructuring
- What you see: Pulling values out of a reactive object into local variables.
- What it costs: State changes and the interface does not update, producing a bug that looks like the framework is broken.
- The fix: Keep the reactive reference, or convert explicitly with the provided helpers. This is the single most common Vue mistake.
Watchers instead of computed values
- What you see: Watchers used to derive one piece of state from another.
- What it costs: Extra update cycles, ordering problems, and state that can be briefly inconsistent.
- The fix: Use computed values for anything derived. Keep watchers for genuine side effects such as fetching or persisting.
Global store as a message bus
- What you see: A store used to pass values between components that could use props and events.
- What it costs: Ownership becomes unclear and unrelated components couple to each other through shared state.
- The fix: Props down, events up. Introduce a store for state that genuinely has multiple independent consumers.
Composables with hidden state
- What you see: A composable holding module-level state shared by every caller unintentionally.
- What it costs: Components that should be independent affect each other, and the cause is invisible at the call site.
- The fix: Create state inside the composable unless sharing is the explicit purpose, and document it when it is.
Mutating props
- What you see: A child component writing to a value it received as a prop.
- What it costs: Data flow becomes bidirectional and untraceable, and the framework warns but does not prevent it.
- The fix: Emit an event and let the owner update. Use the two-way binding convention where genuinely appropriate.
Untyped component APIs
- What you see: Props and emitted events without type definitions.
- What it costs: Errors surface at runtime in the browser rather than in the editor, which in a large codebase is a steady tax.
- The fix: Type props and emits. The composition API supports this well and the cost is small.
What each level can own
Job titles are not comparable between companies, so it is more useful to describe levels by what a person can be left to own without supervision. These are the boundaries we use when we assess a Vue developer.
- Junior
- Builds components within an existing application. Needs review on reactivity, watchers and component boundaries.
- Mid-level
- Owns a feature including routing, state and tests. Writes reusable composables and understands the reactivity rules.
- Senior
- Owns application architecture, the state approach, the rendering strategy where Nuxt is involved, and can migrate across major versions.
- Staff
- Owns the component library, conventions across applications, and the boundary between Vue and whatever server-side framework it sits alongside.
How the work is usually scoped
Team shape follows the kind of work, not the headcount you happen to have budget for. These are the shapes that come up most often and the constraint that actually governs each one.
Adding Vue to an existing server-rendered application
- Usual team: One developer.
- What governs it: Vue's strongest scenario. Incremental by design, with no rewrite required.
New single-page application
- Usual team: One to two developers.
- What governs it: Fast, helped by official router and store removing early decisions.
Nuxt build with a headless CMS
- Usual team: One to two developers plus a content modeller.
- What governs it: Rendering strategy per route is the decision that matters most.
Vue 2 to Vue 3 migration
- Usual team: One to two developers.
- What governs it: Scoped by third-party library compatibility rather than by application code, which is where these projects actually stall.
Component library
- Usual team: One senior developer plus a designer.
- What governs it: Scoped by consumer count and accessibility requirements.
Migration work you may actually be hiring for
A large share of Vue.js work is not new development. It is moving an existing system from one state to another while it stays in service. These are the migrations that come up most often, and each one asks for a different kind of experience from the person you hire.
Vue 2 to Vue 3
- Why teams do it: Vue 2 is no longer maintained, and the current ecosystem targets Vue 3.
- What to watch: Application code is the easy half. Audit every dependency first, because a component library or plugin with no Vue 3 release is what actually blocks these migrations and it is better found in week one than month three.
The options API to the composition API
- Why teams do it: Reusable logic, better TypeScript support, and the direction of the ecosystem.
- What to watch: Both work in the same application, so migrate component by component. There is no need to convert working code that nobody is touching.
Vuex to Pinia
- Why teams do it: Pinia is the official successor, with much less boilerplate and better type inference.
- What to watch: They can coexist during transition. Move one store at a time and update consumers with it rather than attempting a single cutover.
jQuery to Vue
- Why teams do it: Structure and maintainability without rewriting the server-rendered application.
- What to watch: Vue's incremental adoption suits this well. Mount Vue on specific elements and convert section by section, keeping the two working side by side for as long as necessary.
Migration work rewards a different temperament from greenfield work. The useful question in an interview is not whether someone has done the specific migration you face, but whether they have ever run one incrementally: behind a flag, with both paths live, and with a way back. Developers who have only done big-bang cutovers tend to propose them again.
What a good brief for this role contains
Most of the time lost in hiring a Vue developer is lost before anyone is interviewed, in the gap between what the brief says and what the team actually needs. These are the points that, for this technology specifically, change who the right candidate is. A brief that answers them can be matched in days. One that does not produces a shortlist that looks reasonable and converts badly.
- Which Vue version the codebase uses, since Vue 2 is no longer maintained.
- Whether components use the options API, the composition API, or both.
- Whether Nuxt is involved, because server rendering is a distinct skill.
- Whether Vue is the whole front end or an enhancement layer on a server-rendered application.
- Whether TypeScript is in use, which varies more in the Vue world than in React or Angular.
- What state management exists, and whether a migration from Vuex is part of the work.
If you cannot answer some of these yet, that is normal and it is still worth writing down which ones are open. An unknown that is named can be worked around. An unknown that is papered over in a job specification turns into a rejected shortlist and a restart four weeks later.
What the US market pays for this work
Vue.js work is counted by the US Bureau of Labor Statistics under Software Developers. That classification is broader than the technology itself, so treat the figures as the shape of the market a Vue developer is hired into rather than as a rate card for the skill. Across the United States the Bureau counts 1,687,890 people in this occupation, with a median annual wage of $135,980.
The spread matters more than the midpoint. The 90th percentile is about 2.6 times the 10th, which is a wide band for a single occupation and tells you that the title on its own carries very little pricing information. Two people described as a Vue developer can sit at $82,460 and $214,670 in the same national dataset. When a budget is set from a median without asking which end of that range the work actually needs, the hire that follows is usually the wrong one in one direction or the other.
Related classifications are worth reading alongside it, because teams hiring for Vue.js frequently end up recruiting against these titles too:
| Occupation | Employed | 25th percentile | Median | 75th percentile | 90th percentile |
|---|---|---|---|---|---|
| Software Developers | 1,687,890 | $105,210 | $135,980 | $171,980 | $214,670 |
| Web Developers | 70,190 | $64,230 | $92,650 | $126,230 | $162,290 |
Source: BLS Occupational Employment and Wage Statistics, May 2025. Figures cover all US employers and are not FuturByte rates.
These are employer-side wage figures for people on a US payroll. They exclude employer taxes, benefits, recruitment cost and the months a seat sits empty, all of which are real and none of which appear in a salary line. The useful way to read the table is as the cost of the alternative you are comparing against, not as a number to match.
How US metro markets compare for this role
The same job is priced very differently across the country. Ranked by median annual wage for Software Developers, the gap between the highest and lowest of the 28 metro areas covered here is a factor of about 1.7. San Jose sits at the top with a median of $213,110; Pittsburgh sits at the bottom with $124,500. A budget built from a national median will be wrong in both of those markets, in opposite directions.
| Metro area | Employed | Median wage | vs US median | Location quotient |
|---|---|---|---|---|
| San Jose, CA | 87,350 | $213,110 | +57% | 7.09 |
| San Francisco, CA | 69,030 | $186,640 | +37% | 2.68 |
| Seattle, WA | 92,770 | $167,280 | +23% | 4.10 |
| New York, NY | 121,000 | $166,830 | +23% | 1.17 |
| Boston, MA | 42,310 | $166,090 | +22% | 1.44 |
| San Diego, CA | 20,610 | $163,270 | +20% | 1.23 |
| Los Angeles, CA | 55,540 | $160,920 | +18% | 0.82 |
| Portland, OR | 18,260 | $156,000 | +15% | 1.39 |
| Washington, D.C. | 69,060 | $154,930 | +14% | 2.03 |
| Baltimore, MD | 16,850 | $138,900 | +2% | 1.14 |
| Denver, CO | 27,010 | $137,610 | +1% | 1.55 |
| Charlotte, NC | 20,820 | $135,920 | 0% | 1.41 |
| Chicago, IL | 40,370 | $134,380 | -1% | 0.82 |
| Austin, TX | 31,960 | $134,120 | -1% | 2.28 |
| Dallas-Fort Worth, TX | 67,030 | $133,290 | -2% | 1.52 |
| Philadelphia, PA | 28,480 | $133,040 | -2% | 0.91 |
| Atlanta, GA | 36,300 | $132,960 | -2% | 1.16 |
| Raleigh, NC | 12,580 | $132,770 | -2% | 1.56 |
| Miami, FL | 18,900 | $132,650 | -2% | 0.62 |
| Phoenix, AZ | 29,380 | $131,750 | -3% | 1.14 |
| Minneapolis-St. Paul, MN | 27,410 | $130,920 | -4% | 1.29 |
| Detroit, MI | 24,870 | $130,760 | -4% | 1.20 |
| Tampa, FL | 14,230 | $130,450 | -4% | 0.91 |
| Orlando, FL | 13,440 | $129,620 | -5% | 0.88 |
| Salt Lake City, UT | 19,040 | $129,600 | -5% | 2.12 |
| Houston, TX | 22,940 | $129,440 | -5% | 0.64 |
| Kansas City, MO | 12,160 | $124,990 | -8% | 1.02 |
| Pittsburgh, PA | 10,320 | $124,500 | -8% | 0.85 |
Location quotient compares how concentrated this occupation is in the metro against the national average. A value above 1 means the metro has more of this work than its size would predict.
The location quotient column is the more useful one for hiring. A high median tells you what a role costs; a high quotient tells you whether the people exist. San Jose, San Francisco, Seattle, Washington, D.C., Denver, Austin each have a quotient of 1.5 or above, meaning the work is concentrated there well beyond what the size of the local economy would predict. Those are the markets where a search is likely to be quick and competitive at the same time, and where a counter-offer is most likely to take a candidate off the table late in the process.
The opposite case is worth planning for too. In a metro with a low quotient, the total pool is small even when wages look reasonable, so the realistic options are to widen the search radius, accept a longer time to hire, or bring the capability in from outside the local market entirely. That last option is what most teams are weighing when they come to us.
Hiring risks worth naming
Every one of these has produced a bad hire somewhere. They are written down so that the process tests for them deliberately rather than discovering them in month three.
Vue 2 experience for Vue 3 work. Ask which API and which version. The gap is real, particularly around the composition API and tooling.
Framework use without JavaScript depth. Vue's gentle learning curve means some developers have not needed the fundamentals. Test them directly.
No TypeScript experience. Increasingly expected in commercial Vue work, and a real gap in candidates whose experience is older.
Nuxt assumed rather than confirmed. Server rendering is a separate skill. Ask explicitly if your project uses it.
Hiring Vue.js developers by metro area
Wages for this occupation vary more between US metro areas than most budget models assume. Each page below sets out the published employment and wage figures for that market, how it compares with the national picture, and what the local industry mix means for the kind of Vue developer who will be available.
- New York, NY $166,830 median
- Seattle, WA $167,280 median
- San Jose, CA $213,110 median
- Washington, D.C. $154,930 median
- San Francisco, CA $186,640 median
- Dallas-Fort Worth, TX $133,290 median
- Los Angeles, CA $160,920 median
- Boston, MA $166,090 median
- Chicago, IL $134,380 median
- Atlanta, GA $132,960 median
- Austin, TX $134,120 median
- Phoenix, AZ $131,750 median
- Philadelphia, PA $133,040 median
- Minneapolis-St. Paul, MN $130,920 median
- Denver, CO $137,610 median
- Detroit, MI $130,760 median
- Houston, TX $129,440 median
- Charlotte, NC $135,920 median
- San Diego, CA $163,270 median
- Salt Lake City, UT $129,600 median
- Miami, FL $132,650 median
- Portland, OR $156,000 median
- Baltimore, MD $138,900 median
- Tampa, FL $130,450 median
- Orlando, FL $129,620 median
- Raleigh, NC $132,770 median
- Kansas City, MO $124,990 median
- Pittsburgh, PA $124,500 median
Frequently asked questions
Is Vue a safe choice given it is not backed by a large company?
It has been maintained consistently for over a decade, is funded through sponsorship by companies that depend on it, and has a large installed base. Independent governance is arguably a benefit, since the framework's direction is not tied to one company's internal priorities. The practical risk to weigh is hiring pool size rather than project continuity.
Vue or React?
React has the larger hiring pool and the larger ecosystem. Vue is easier to learn, more consistent between codebases because the router and store are official, and better suited to adding interactivity to an existing server-rendered application. For a team that is mostly back-end developers, Vue frequently produces a better result. For a large dedicated front-end team, React's pool usually wins.
What is the difference between the options and composition APIs?
The options API organises a component by category: data here, computed values there, methods below. The composition API organises by concern and lets related logic be extracted into reusable functions. Both are supported. New work generally uses the composition API, particularly where TypeScript is involved, and large existing codebases often use the older style throughout.
How hard is migrating from Vue 2 to Vue 3?
The application code changes are usually manageable and well documented. The difficulty is almost always the ecosystem: component libraries, plugins and tooling that need compatible versions or replacements. Audit dependencies before committing to a timeline, because that inventory rather than the framework is what determines the size of the project.
Can our back-end developers write Vue?
More readily than with the other major frameworks, and this is one of Vue's genuine strengths. Single-file components are approachable and the official ecosystem removes most early decisions. The caveat is the same as anywhere: they will produce working screens and will benefit from review on state structure, accessibility and component boundaries.
Do we need Nuxt?
If you need server rendering, static generation or file-based routing, yes, and it is the standard answer. If the application is behind a login and search visibility is irrelevant, plain Vue is simpler and there is no reason to add the layer. The decision should follow from whether unauthenticated pages matter.
Why does our Vue state change without the interface updating?
Almost certainly lost reactivity, and almost certainly through destructuring a reactive object into plain variables. It is the most common Vue bug by a wide margin, it looks like a framework failure, and it is a one-line fix once you know the cause.
Is Vue suitable for a large application?
Yes, with the same caveat as any framework: the structure you impose matters more than the framework does. Vue provides official routing and state and leaves the architecture to you, so large Vue applications succeed when someone owns the conventions. It is less prescriptive than Angular, which is an advantage for capable teams and a risk for teams without a senior front-end voice.