Six Engineers Maintain Two Rendering Engines as One Company Owns the DOM
Every time a developer writes a div inside a React component or a Vue template, two separate rendering engines reconcile that element against the browser's real DOM. One is maintained by a team of roughly six to ten engineers at Meta. The other is shepherded by Evan You and a small paid core, with significant community contributions. These two engines do the same job—diffing virtual trees against the live document—but they are funded, governed, and evolved by entirely different economic models. The duplication inflates maintenance budgets across the industry, and nobody seems willing to talk about it.
Two Engines, One Browser: The Unseen Cost of Dual Rendering
React's virtual DOM, introduced in 2013, was a breakthrough. Instead of touching the real DOM directly, React keeps a lightweight JavaScript object representing the UI. When state changes, it computes a diff and applies minimal updates. Vue followed a similar path in 2014, but with a reactive system that tracks dependencies at the data level. Both approaches work. Both require dedicated teams to maintain, patch, and evolve the core diffing logic. According to public job postings and conference talks, Meta employs roughly 12 people on the React core team, a subset of whom focus on the reconciler. Vue's core team is smaller—around 6 paid engineers, including Evan You, funded through Patreon, corporate sponsorships, and grants from foundations like Open Collective.
The duplication is not just about headcount. Every new browser API, every edge case in event handling, every performance regression must be diagnosed and fixed in both engines. When React 18 shipped concurrent features, the reconciler's architecture changed fundamentally. Vue 3's composition API required a complete rewrite of the reactivity system. These are not one-time costs. They are recurring investments that the industry pays for, either through corporate taxes (Meta's stock pays for React) or through donations and the unpaid overtime of open-source contributors.
A rough estimate based on public salary data from Levels.fyi and conference talks suggests the total engineering cost of maintaining two major virtual DOM implementations is in the range of $5–10 million per year, counting salaries, infrastructure, and opportunity cost. That figure excludes the hundreds of third-party libraries that wrap each engine—form libraries, state managers, animation frameworks—each of which must be kept in sync. The browser itself, meanwhile, has no native virtual DOM. It simply exposes the DOM API and lets frameworks invent their own abstractions on top.
Who Pays for the DOM? The Economics of Framework Ownership
Meta's investment in React is straightforward: React powers Facebook, Instagram, WhatsApp, and a growing number of internal tools. A faster, more reliable React means a faster, more reliable Meta. The company can justify a dozen engineers because the framework directly supports its core products. But React is also used by millions of developers who do not work for Meta. Those developers benefit from Meta's investment without contributing directly. This is not charity—it is strategic infrastructure spending. React keeps the web ecosystem aligned with Meta's interests, particularly around performance patterns that benefit large-scale social applications.
Vue's economics are more fragile. Evan You started the project as a personal experiment. As adoption grew, he raised money through Patreon and later through a small company called Vue Technology, which was acquired by NetEase in 2016. Today, Vue's core team is supported by a mix of corporate sponsors—including companies like Nvidia, Indeed, and Retool—and individual donations. The Vue.js organization on Open Collective reports roughly $200,000 per year in revenue, which covers a fraction of the team's salaries. Most core contributors work on Vue in their spare time or as part of their job at companies that use Vue heavily.
The difference in funding models creates different incentives. React's roadmap is influenced by Meta's internal needs. Vue's roadmap is shaped by community consensus and the availability of volunteer time. Neither model is inherently better, but both have blind spots. React sometimes ships features that only make sense at Meta's scale—like Server Components, which require a complex orchestration layer. Vue sometimes moves slowly on enterprise features, like TypeScript support, which arrived later than many users wanted.
The Vendor Lock-In That Nobody Admits
Vendor lock-in in open-source frameworks is subtle. There are no contracts, no license fees, no annual renewals. But the cost of switching is real. A mid-size team with a production React app faces a rewrite of roughly four to six months to migrate to Vue—or vice versa. That estimate assumes the team already knows both frameworks. If they need to learn the new one, add another two months. Few engineering leaders approve such a project unless the current framework is actively causing harm.
React's license terms have shifted over time. Originally under BSD with a controversial patent clause, React moved to MIT in 2017 after community backlash. But the patent grant is still present in the MIT-licensed version, and it explicitly terminates if a user sues Meta over patents. This asymmetry means that any company that might sue Meta—or that Meta might sue—cannot safely use React. In practice, this clause has rarely been tested, but it creates a legal overhang that enterprise legal teams must evaluate.
Vue's license is pure MIT, with no additional patent clauses. On paper, it is more neutral. But the lack of a single corporate patron means that long-term stability is less assured. If Evan You stopped maintaining Vue tomorrow, the community would likely fork it, but the transition would be chaotic. React, for all its corporate entanglements, has a predictable maintenance stream as long as Meta exists. Engineering leaders must weigh these risks: React's corporate lock-in versus Vue's dependency on a small team's goodwill.
Performance Myths: Where Each Engine Actually Excels
Benchmarking frontend frameworks is notoriously difficult. Real-world applications include network latency, third-party scripts, and complex layout calculations that dwarf the cost of virtual DOM diffing. Still, microbenchmarks reveal meaningful differences. React's fiber architecture, introduced in version 16, breaks rendering into incremental units that can be interrupted and resumed. This makes React better suited for large, complex applications with frequent updates—think social feeds with thousands of components. Vue's reactive system, on the other hand, tracks dependencies at the data level and only re-renders components whose dependencies change. For small to medium DOM trees, Vue typically outperforms React by a small margin, sometimes as much as 10–15% in synthetic tests.
Bundle size is another axis. React with ReactDOM adds roughly 40 KB to a production bundle, before tree-shaking. Vue 3 with its runtime compiler adds about 33 KB. These are not huge numbers, but they compound when you add routing, state management, and UI libraries. A typical React app with React Router, Redux, and Material-UI can exceed 200 KB. A comparable Vue app with Vue Router, Pinia, and Vuetify might be 180 KB. The difference is rarely decisive, but for mobile users on slow connections, every kilobyte matters.
Real-world load time differences between the frameworks are often less than 10%, according to the HTTP Archive's 2023 Web Almanac chapter on JavaScript. The bigger performance wins come from using the framework correctly: avoiding unnecessary re-renders, lazy-loading routes, and optimizing images. Both React and Vue provide tools for these tasks, but neither has a decisive advantage. The choice of framework is unlikely to be the bottleneck for most applications.
The Hidden Tax: Dependency Hell and Upgrade Cycles
Framework upgrades are rarely painless. React 18 introduced concurrent features and automatic batching, which broke some existing patterns around state updates and lifecycle methods. Teams that relied on componentWillMount or componentWillUpdate had to migrate to the new lifecycle APIs. The upgrade took most enterprise teams three to six months, based on anecdotal reports from the React community on GitHub and Twitter. Vue 3's composition API was an even bigger shift. It required rewriting most Vue 2 components that used the Options API, and some third-party libraries never made the jump, leaving users stranded.
The lag between a framework release and ecosystem support is a persistent pain point. When React 18 shipped in March 2022, popular libraries like React Router and Redux did not fully support concurrent features for another six to twelve months. Vue 3's ecosystem took even longer—Vue Router 4 and Pinia were stable by early 2022, but many smaller libraries, like form validators and chart components, still have incomplete Vue 3 support as of late 2024. Teams that upgrade early often find themselves debugging issues that the core team has not yet documented.
Dependency managers like npm and Yarn help, but they cannot solve the fundamental problem: a framework change cascades through every layer of the stack. UI component libraries, testing utilities, build tools, and even IDE plugins must be updated. For large organizations with dozens of applications, coordinating these upgrades is a project management challenge as much as a technical one. Some teams choose to stay on older versions indefinitely, accepting the security and performance risks. Others invest in automated migration tools, which reduce the manual effort but still require testing and validation.
What a Unified Rendering Standard Would Look Like
The idea of a browser-native virtual DOM has been discussed in the WICG (Web Incubator Community Group) since at least 2019. Proposals have included a DOM diffing API that would let frameworks offload reconciliation to the browser, eliminating the need for each framework to maintain its own engine. Such an API could expose hooks for batched updates, priority scheduling, and incremental rendering—all features that React and Vue currently implement in JavaScript. The browser could optimize these operations at the native level, potentially improving performance and reducing memory overhead.
Adoption would require buy-in from Google, Meta, Apple, and Mozilla. Each has different incentives. Google owns Angular and has invested heavily in its own rendering approach. Meta owns React and has little reason to standardize away its competitive advantage. Apple has been slow to adopt new web APIs that do not directly benefit Safari's performance. Mozilla, despite its advocacy for open standards, lacks the engineering resources to push a complex proposal through the standards process. The historical precedent is jQuery: as browsers standardized DOM manipulation APIs like querySelector and classList, jQuery's raison d'être shrank. But jQuery took a decade to fade, and it still has a long tail of usage.
A unified standard would also need to address the philosophical differences between React and Vue. React treats the UI as a function of state, with explicit reconciliation. Vue treats the UI as a reactive graph, with implicit change detection. These are not just implementation details—they shape how developers think about component design. A browser API would have to be generic enough to support both mental models, or the community would have to converge on one. Neither outcome is guaranteed.
Practical Advice for Engineering Leaders Evaluating Both
If you are choosing between React and Vue for a new project, start by auditing your team's existing skill distribution. A team of React veterans will be more productive in React, even if Vue has technical advantages for your use case. The cost of retraining is real, and it often outweighs framework differences. Conversely, if your team is evenly split or has no strong preference, consider the total cost of ownership over three to five years, not just initial developer speed. That includes upgrade effort, library availability, and hiring ease.
Prototype your most critical user flows in both frameworks using a small spike team. Measure bundle size, time-to-interactive, and memory usage on a representative device. Pay attention to how each framework handles your data fetching patterns—React's Suspense and Server Components versus Vue's async components and useFetch from VueUse. These details matter more than generic benchmarks.
Finally, consider the long-term corporate backing for each framework in your vertical. If you are building a large-scale social application, React's alignment with Meta's priorities is an asset. If you are building a data-heavy dashboard for finance or healthcare, Vue's smaller footprint and simpler mental model might be more maintainable. Both choices come with trade-offs: React offers corporate stability but with potential legal entanglement, while Vue provides a cleaner license but relies on a smaller team. The real cost of two rendering engines is not just the engineering hours at Meta and the Vue core team—it is the fragmentation that every team must navigate when they choose one engine over the other. There is no universal right answer, only the right answer for your context.