Headless Vue 3 UI primitives and composables for building modern applications and design systems. @vuetify/v0 is the foundation of the Vuetify ecosystem, offering lightweight, unstyled building blocks with full TypeScript support and accessibility features built-in.
Note: This package is in early development (pre-1.0). APIs may change between minor versions.
This is a pnpm monorepo containing:
| Package | Description |
|---|---|
@vuetify/v0 |
Core headless components and composables |
@vuetify/paper |
Styling and layout primitives |
apps/docs |
Documentation site (0.vuetifyjs.com) |
apps/playground |
Interactive development environment |
- Node.js >= 22
- pnpm >= 10.6
- Vue >= 3.5.0
npm install @vuetify/v0@latest
# or
pnpm add @vuetify/v0
# or
yarn add @vuetify/v0
# or
bun add @vuetify/v0The package provides tree-shakeable subpath exports:
import { ... } from '@vuetify/v0' // Everything
import { ... } from '@vuetify/v0/components' // Components only
import { ... } from '@vuetify/v0/composables' // Composables only
import { ... } from '@vuetify/v0/utilities' // Utilities only
import { ... } from '@vuetify/v0/types' // Types only
import { ... } from '@vuetify/v0/constants' // Constants only
import { ... } from '@vuetify/v0/date' // Date adapter and utilities| Component | Description |
|---|---|
| Atom | Polymorphic base element with dynamic as prop and renderless mode |
| Portal | Teleport wrapper with automatic z-index stacking via useStack |
| Presence | Animation-agnostic mount lifecycle with lazy mounting and exit timing |
| Component | Description |
|---|---|
| Group | Multi-selection with tri-state support |
| Locale | Locale context provider for internationalization |
| Scrim | Overlay backdrop with click-to-dismiss and z-index management |
| Selection | Multi-selection state with v-model binding |
| Single | Single-selection with automatic deselection |
| Step | Sequential navigation (first, last, next, prev) |
| Theme | Theme context provider with CSS variable injection |
| Component | Description |
|---|---|
| Button | Button with loading grace period, toggle groups, and icon accessibility |
| Toggle | Pressable on/off button with standalone and group modes |
| Component | Description |
|---|---|
| Checkbox | Dual-mode checkbox (standalone/group) with tri-state support |
| Combobox | Filterable selection with autocomplete, virtual focus, and custom input |
| Form | Form validation coordinator with submit handling and error aggregation |
| Input | Text input with label, description, error messages, and character counting |
| NumberField | Numeric input with increment/decrement, scrub, and Intl formatting |
| Radio | Radio group with single-selection and keyboard navigation |
| Select | Dropdown selection with virtual focus and multi-select support |
| Rating | Star/icon rating with hover preview, half-stars, and keyboard navigation |
| Slider | Range input with snapping, range mode, and custom tracks |
| Switch | Toggle switch with on/off states and label association |
| Component | Description |
|---|---|
| AlertDialog | Confirmation dialog with deferred close and wait()/close() pattern |
| Collapsible | Single-item disclosure toggle for showing and hiding content |
| Dialog | Modal dialog using native <dialog> with focus management |
| ExpansionPanel | Accordion-style collapsible panels |
| Popover | CSS anchor-positioned popup content |
| Tabs | Tab panel navigation with keyboard support and lazy content rendering |
| Treeview | Hierarchical tree with nested selection and expand/collapse |
| Component | Description |
|---|---|
| Avatar | Image/fallback avatar with priority loading |
| Breadcrumbs | Navigation breadcrumbs with overflow detection and truncation |
| Pagination | Page navigation with semantic <nav> wrapper |
| Snackbar | Toast notification with queue, positioning, and auto-dismiss |
| Splitter | Resizable panel layout with drag handles |
Core factories that provide the foundation for all other composables:
createContext- Type-safe Vue dependency injection wrappercreatePlugin- Vue plugin factory with context provisioncreateTrinity- Context triple pattern:[use, provide, default]
Base data structures that most other composables build upon:
createRegistry- Enhanced Map with indexing, caching, and event supportcreateQueue- FIFO queue with timeout management (notifications/toasts)createTimeline- Bounded undo/redo historycreateTokens- Design token registry with alias resolution
createDataTable- Data table with sort, filter, pagination, row selection, grouping, and adapter patterncreateFilter- Reactive array filtering with multiple modescreatePagination- Lightweight page navigationcreateVirtual- Virtual scrolling for large lists
Selection management composables built on createRegistry:
createSelection- Base selection with Set-based trackingcreateModel- Value store for single-value statecreateGroup- Multi-selection with tri-state/mixed supportcreateSingle- Single-selection specializationcreateStep- Navigation through items (first, last, next, prev)createNested- Hierarchical tree management with parent-child relationships and open state
createForm- Form validation and state management with async rulescreateInput- Shared form field state: validation, dirty/pristine, ARIA IDscreateNumberField- Numeric input state with formatting, stepping, and validationcreateValidation- Field-level validation with sync/async rulescreateCombobox- Combobox state management with filtering and virtual focuscreateRating- Bounded rating value with discrete items and half-step supportcreateSlider- Slider state with snapping, range mode, and step control
useProxyModel- Bridge selection context to component v-modeluseProxyRegistry- Convert registry Map to reactive object
createBreadcrumbs- Breadcrumb navigation model with depth tracking and path traversalcreateOverflow- Container overflow measurement for item capacity
toArray- Array transformation utilitiestoElement- Normalize refs, selectors, and elements to DOM elementstoReactive- Reactive object conversion
useClickOutside- Click outside detection with cleanupuseEventListener- Lifecycle-managed event listenersuseHotkey- Hotkey combinations and sequencesuseIntersectionObserver- Intersection observer with auto-cleanupuseLazy- Deferred content rendering for dialogs, menus, and tooltipsuseMediaQuery- Reactive CSS media query matchinguseMutationObserver- DOM mutation observationusePopover- Popover positioning and anchor managementuseRaf- requestAnimationFrame loop with start/stop controluseResizeObserver- Resize observer utilitiesuseRovingFocus- Roving tabindex keyboard navigationusePresence- Animation-agnostic mount lifecycle with lazy mounting and exit timinguseTimer- Countdown and interval timer with pause/resumeuseToggleScope- Conditional effect scope managementuseVirtualFocus- Virtual focus management via aria-activedescendant
Plugin-capable composables following the trinity pattern:
useBreakpoints- Responsive breakpoint detectionuseDate- Date manipulation with adapter pattern and locale syncuseFeatures- Feature flags with variationsuseHydration- SSR hydration helpersuseLocale- Internationalization with message interpolationuseLogger- Logging adapter (consola/pino/custom)useNotifications- Toast/snackbar queue management with positioningusePermissions- RBAC/ABAC permission systemuseRtl- Right-to-left text direction detection and managementuseRules- Validation rule adapter with built-in rule libraryuseStack- Overlay z-index stacking with automatic scrim coordinationuseStorage- Storage adapter (localStorage/sessionStorage/memory)useTheme- Theme management with CSS variable injection
- Headless First: Components provide logic and accessibility without imposed styling
- Slot-Driven: Maximum flexibility through comprehensive slot APIs
- CSS Variables: All styling configurable via
--v0-*custom properties - TypeScript Native: Full type safety with generics for extensibility
- Minimal Dependencies: Only Vue 3.5+ required (markdown libraries optional)
- Composable Architecture: Reusable logic through Vue 3 composables
For detailed API documentation, examples, and guides, visit 0.vuetifyjs.com.
# Install dependencies
pnpm install
# Start playground
pnpm dev
# Start documentation site
pnpm dev:docs
# Run tests
pnpm test
# Run tests (CI mode)
pnpm test:run
# Type check
pnpm typecheck
# Lint
pnpm lint:fix
# Full validation (lint + typecheck + test)
pnpm validateWe are not currently accepting external contributions. Check back later or join our Discord community for updates.
Built with care for the Vue ecosystem. Part of the Vuetify family.