Why v0
Choosing a UI foundation is one of the most consequential decisions in a Vue project. This guide compares v0 with other popular options to help you decide.
Why Vuetify0
Vuetify0 comes from the creators of Vuetify↗—the most popular Vue component framework with 40K+ GitHub stars, 2M+ weekly downloads, and 10+ years of production use. This isn’t a side project or experiment.
What You Get
| Feature | Description | |
|---|---|---|
| Battle-tested patterns | Selection, registration, and theming systems derived from Vuetify’s core patterns. Vuetify itself will be refactored to use Vuetify0 under the hood. | |
| Quick scaffolding | Get started in seconds with Vuetify Create↗. One command sets up your project with v0 pre-configured and ready to build. | |
| Interactive playground | Every example runs live in Vuetify Play. Edit code, see results instantly, and share your experiments with a single link. | |
| AI-powered assistance | First-class MCP server for Claude and other AI assistants. Get accurate answers about v0 APIs without hallucinations. | |
| Developer tooling | Dedicated CLI for common workflows—component generation, project upgrades, and debugging utilities. Streamline your development process. |
Composable-First Architecture
Most headless libraries give you components. v0 gives you composables that optionally have components. Use the logic without any rendering overhead:
import { createSelection } from '@vuetify/v0'
// Pure logic - no components needed
const selection = createSelection({ multiple: true })
// Register items
const items = selection.onboard([
{ id: 'item-1', value: 'Item 1' },
{ id: 'item-2', value: 'Item 2' },
])
// Then select
selection.select('item-1')
selection.select('item-2')
console.log([...selection.selectedIds]) // ['item-1', 'item-2']
console.log(selection.selected('item-1')) // true
console.log(items[0].isSelected.value) // trueCompare this to other libraries where you must wrap everything in components to access selection state.
The Trinity Pattern
v0’s Trinity pattern provides three layers that work together:
Context — Dependency injection via
provide/injectComposable — Reactive logic you can use anywhere
Component — Optional rendering layer with slot props
This means the same selection logic powers a chip group, a listbox, tabs, or your custom component—without any wrappers.
Quick Comparison
| Library | Type | Components | Best For |
|---|---|---|---|
| Vuetify0 | Headless composables + components | 10+ (growing) | Custom design systems, composable logic |
| Vuetify 3↗ | Styled Material Design | 80+ | Full-featured apps with Material Design |
| Reka UI↗ | Headless components (formerly Radix Vue) | 40+ | Nuxt UI users, Radix-style patterns |
| Ark UI↗ | Headless (state machines) | 45+ | Multi-framework projects |
| VueUse↗ | Utility composables | 200+ | Browser APIs, not UI components |
When to Choose Each
Choose Vuetify 3 when:
You want Material Design↗ out of the box
You need 80+ production-ready styled components
You prefer convention over configuration
You’re building a standard business application
Choose Vuetify0 when:
Building a custom design system (not Material Design)
You need composable logic without component wrappers
You want full control over markup and styling
You’re already using Vuetify and need headless pieces
You value Vue-native patterns over React ports
Choose Reka UI when:
You need 40+ headless components now
You’re using Nuxt UI↗ as your foundation
You’re comfortable with Radix-style APIs (Reka is the Vue port of Radix, formerly called Radix Vue)
You want the shadcn-vue↗ ecosystem
Choose Ark UI when:
Building for multiple frameworks (Vue + React + Solid)
You prefer state machine predictability (Zag.js↗)
You need components v0 doesn’t have yet (e.g., color picker, tree view)
Choose VueUse when:
You need utility composables, not UI components
Browser APIs, sensors, animations, state utilities
VueUse complements v0—use them together
Feature Comparison
| Feature | v0 | Vuetify | Reka UI | Ark UI |
|---|---|---|---|---|
| Unstyled/headless | ||||
| Composable-only usage | ||||
| Vue-native design | Radix port | Zag.js | ||
| TypeScript | Full | Full | Full | Full |
| SSR/Nuxt support | ||||
| Theming system | CSS variables | SASS + CSS | ||
| Form validation | Built-in | Built-in | Field context | |
| Selection patterns | Advanced | Advanced | Basic | Basic |
| Component count | ~15 | 80+ | 40+ | 45+ |
v0 Roadmap
v0 is actively growing. The initial release focuses on core abstractions—the patterns that power Vuetify’s most complex components:
| Version | Focus | Status |
|---|---|---|
| v0.1.x | Core patterns (selection, registry, theming, forms) | Current |
| v0.2.0 | Expanded component library | Planned |
| v1.0 | Complete headless package | Target 2026 |
If you need 40+ components today, consider Reka UI or Ark UI. If you’re building a design system and want the strongest foundation for selection, forms, and composition patterns, v0 is the right choice—and more components are coming.
What about PrimeVue? PrimeVue↗ offers 80+ components with an unstyled mode↗. It’s a great option if you want a full-featured library that can be stripped down, but it’s not headless-first—the architecture is designed around styled components with unstyled as an option.
Using v0 with Vuetify
v0 and Vuetify share the same DNA. You can use v0 composables inside a Vuetify application:
<script setup lang="ts">
import { VBtn, VCard } from 'vuetify/components'
import { createSelection } from '@vuetify/v0'
const selection = createSelection({ multiple: true })
const items = selection.onboard([
{ id: 1, value: 'Option A' },
{ id: 2, value: 'Option B' },
{ id: 3, value: 'Option C' },
])
</script>
<template>
<VCard title="Select Options">
<div class="d-flex ga-2 pa-4">
<VBtn
v-for="item in items"
:key="item.id"
:color="item.isSelected.value ? 'primary' : undefined"
:variant="item.isSelected.value ? 'flat' : 'outlined'"
@click="item.toggle()"
>
{{ item.value }}
</VBtn>
</div>
</VCard>
</template>This lets you leverage v0’s selection patterns while keeping Vuetify’s styled components.
After Vuetify 4 releases, Vuetify 5 will immediately begin implementing Vuetify0 into key parts of its internal functionality. See the roadmap for more details.
Summary
| If you need… | Choose |
|---|---|
| Material Design, batteries included | Vuetify 3 |
| Custom design system, full control | Vuetify0 |
| Most components, fastest start | Reka UI |
| Multi-framework consistency | Ark UI |
| Utility composables | VueUse (pairs with any) |
Still unsure? Start with the Getting Started guide and try Vuetify0’s selection patterns. If they click, you’re in the right place.