Vue vs React
I use Vue 3. I've built production apps with both. The honest answer: for a SaaS you're building solo (or mostly with AI agents), the framework choice matters less than people think. But there are real differences worth knowing.
Quick Comparison
| Vue 3 | React | |
|---|---|---|
| Reactivity | Built-in (Proxy-based) | External (useState, useReducer) |
| Template syntax | HTML-based templates | JSX |
| State management | Pinia (official) | Redux, Zustand, Jotai, etc. |
| Routing | Vue Router (official) | React Router, TanStack Router |
| TypeScript | First-class | First-class |
| Component style | SFC (.vue files) | Functions (.tsx files) |
| Learning curve | Gentler | Steeper (hooks mental model) |
| Job market | Smaller | Larger |
| Corporate backing | Evan You + community | Meta |
| Meta-frameworks | Nuxt | Next.js, Remix |
Developer Experience
Vue's Single File Components put template, script, and styles in one file. The <script setup> syntax is concise:
<script setup lang="ts">
import { ref, computed } from "vue"
const count = ref(0)
const doubled = computed(() => count.value * 2)
</script>
<template>
<button @click="count++">{{ doubled }}</button>
</template>
React's equivalent:
import { useState, useMemo } from "react"
function Counter() {
const [count, setCount] = useState(0)
const doubled = useMemo(() => count * 2, [count])
return <button onClick={() => setCount(c => c + 1)}>{doubled}</button>
}
Both are readable. Vue's reactivity system means you rarely think about dependency arrays or stale closures — common React pain points. React's JSX gives you full JavaScript expressiveness in templates.
The practical difference: Vue has fewer footguns for common SaaS patterns. React gives you more flexibility for unusual patterns. For typical CRUD applications, Vue means less debugging time.
Reactivity
This is the fundamental difference. Vue uses a Proxy-based reactivity system — mutate state, the framework tracks dependencies and updates the DOM. You don't tell Vue what changed; it knows.
React uses immutable state — call setState to trigger re-renders, and the framework re-runs your component. You're responsible for telling React what changed (setState) and what shouldn't re-compute (useMemo, useCallback).
Vue's approach is simpler for most cases. React's approach is more explicit but requires more manual optimization to avoid unnecessary re-renders.
For AI coding agents, Vue's reactivity model is easier to work with. The agent doesn't need to reason about dependency arrays, memoization, or stale closure bugs.
Ecosystem
React has a larger ecosystem. More component libraries, more packages, more tutorials. If you need a specific widget, there's probably a React version.
Vue's ecosystem is smaller but curated. The official packages — Vue Router, Pinia, Vue DevTools — are maintained by the core team. They work well together and stay in sync. React's ecosystem is more fragmented: multiple routing libraries, state management solutions, form libraries.
For a SaaS application, both ecosystems have everything you need. Component libraries (shadcn-vue / shadcn), form handling, state management, routing. You won't hit an ecosystem gap.
Performance
Both are fast enough. The benchmark differences — microseconds per render, memory per component — don't matter when your app is making API calls and rendering forms.
Where it matters: rendering large lists (1000+ items), Vue's fine-grained reactivity tends to handle updates more efficiently out of the box. React's virtual DOM diffing can struggle with large re-renders without virtualization or memoization, though both frameworks benefit from optimization at that scale.
AI Coding Agents
This matters more than people realize. AI coding agents write most of the code in many indie developer workflows.
Vue's SFC structure is more predictable for agents — clear sections (script, template, style), consistent Composition API patterns. The agent can modify the template without touching business logic and vice versa.
React components are more flexible in structure, which means more variation in how code gets organized. AI agents work with React, but the combinatorial explosion of patterns — hooks composition, render patterns, state management approaches — introduces more room for inconsistency.
Vue's opinionated structure gives agents less room for inconsistent patterns.
Hiring
React has a much larger job market. If you're building a team, finding React developers is easier.
For indie developers building solo or with AI agents, the hiring argument is less relevant. You're choosing the tool that lets you ship fastest.
When to Choose Vue
- You value simplicity and less boilerplate
- You want batteries-included (official router, state management)
- You want fine-grained reactivity without manual optimization
- You're building solo or with a small team
- You're using AI coding agents heavily
When to Choose React
- You need the largest possible ecosystem
- You're hiring developers
- You need a specific React-only library
- Your team already knows React well
What Stacknaut Uses
I chose Vue 3 with the Composition API and TypeScript.
Vue's SFC structure is predictable for AI coding agents — but that only works well if your project has consistent patterns for the agent to follow. That's where a comprehensive AGENTS.md matters. Stacknaut includes one that covers conventions, architecture, component patterns, and common pitfalls. Your agent writes consistent code from the first prompt.
The frontend stack is already assembled — Vue 3, shadcn-vue, Pinia, Vue Router, TypeScript throughout. Auth flows, Stripe billing UI, SEO pre-rendering, dark mode. You're not wiring up a framework; you're building your product.
See what's included or check out the AI agent configuration.