plugins/vercel/skills/v0-dev/SKILL.md
v0 by Vercel expert guidance. Use when discussing AI code generation, generating UI components from prompts, v0 CLI usage, v0 SDK/API integration, or integrating v0 into development workflows with GitHub and Vercel deployment.
npx skillsauth add openai/plugins v0-devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are an expert in v0 (v0.app) — Vercel's AI-powered development agent that generates production-ready code from natural language descriptions.
v0 transforms prompts into working React/Next.js code. It supports 6M+ developers and 80K+ active teams globally. v0 operates as a universal coding agent with research, planning, debugging, and iteration capabilities.
v0 package)Install and pull v0-generated components into your Next.js project:
# Initialize v0 in an existing Next.js project (one-time setup)
npx v0@latest init
# Add a specific v0-generated component by ID
npx v0@latest add <component-id>
# With pnpm
pnpm dlx v0@latest init
pnpm dlx v0@latest add <component-id>
v0 init installs required dependencies (@radix-ui/react-icons, clsx, lucide-react) and creates a components.json config file.
From the v0.dev web interface, click the "Add to Codebase" button (terminal icon) to generate a command:
npx shadcn@latest add "https://v0.dev/chat/b/<project_id>?token=<token>"
Run this in your project root to pull the entire generated project into your codebase.
# 1. Scaffold a Next.js app
npx create-next-app@latest --typescript --tailwind --eslint
# 2. Initialize v0 integration
npx v0@latest init
# 3. Generate a component on v0.dev, get its ID
# 4. Add the component locally
npx v0@latest add a1B2c3d4
# 5. Import and use in your app
# Create a new project from v0 templates
npx create-v0-sdk-app@latest my-v0-app
# Use the v0-clone template (full v0.dev replica with auth, DB, streaming)
npx create-v0-sdk-app@latest --template v0-clone
npm install v0-sdk
import { v0 } from 'v0-sdk'
// Automatically reads from process.env.V0_API_KEY
// Or create a custom client:
import { createClient } from 'v0-sdk'
const v0 = createClient({ apiKey: process.env.CUSTOM_V0_KEY })
Get your API key at: https://v0.app/chat/settings/keys
import { v0 } from 'v0-sdk'
const chat = await v0.chats.create({
message: 'Create a responsive navbar with dark mode toggle using Tailwind',
system: 'You are an expert React developer',
})
console.log(`Open in browser: ${chat.webUrl}`)
import { v0 } from 'v0-sdk'
// Create a project
const project = await v0.projects.create({ name: 'My App' })
// Initialize a chat with existing code
const chat = await v0.chats.init({
type: 'files',
files: [{ name: 'App.tsx', content: existingCode }],
projectId: project.id,
})
// Send follow-up instructions
await v0.chats.sendMessage({
chatId: chat.id,
message: 'Add a sidebar with navigation links and a user avatar',
})
// Deploy when ready
const deployment = await v0.deployments.create({
projectId: project.id,
chatId: chat.id,
versionId: chat.latestVersion.id,
})
console.log(`Live at: ${deployment.url}`)
// Download files from a specific chat version
const files = await v0.chats.downloadVersion({
chatId: chat.id,
versionId: chat.latestVersion.id,
})
Chats:
v0.chats.create(params) — Create a new chatv0.chats.sendMessage(params) — Send a message to an existing chatv0.chats.getById(params) — Retrieve a specific chatv0.chats.update(params) — Update chat propertiesv0.chats.findVersions(params) — List all versions of a chatv0.chats.getVersion(params) — Retrieve a specific versionv0.chats.updateVersion(params) — Update files within a versionv0.chats.downloadVersion(params) — Download files for a versionv0.chats.resume(params) — Resume processing of a messageProjects:
v0.projects.create(params) — Create a new projectv0.projects.getById(params) — Retrieve a projectv0.projects.update(params) — Update a projectv0.projects.find() — List all projectsv0.projects.assign(params) — Assign a chat to a projectv0.projects.getByChatId(params) — Get project by chat IDv0.projects.createEnvVars(params) — Create env vars for a projectDeployments:
v0.deployments.create(params) — Create deployment from a chat versionv0.deployments.getById(params) — Get deployment detailsv0.deployments.delete(params) — Delete a deploymentv0.deployments.find(params) — List deploymentsv0.deployments.findLogs(params) — Get deployment logsBase URL: https://api.v0.dev/v1
Auth: Authorization: Bearer <V0_API_KEY>
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /v1/projects | List projects |
| POST | /v1/projects | Create project |
| GET | /v1/projects/:id | Get project |
| PUT | /v1/projects/:id | Update project |
| DELETE | /v1/projects/:id | Delete project |
| POST | /v1/chats | Create/initialize chat |
| GET | /v1/chats/:id/messages | Get messages |
| POST | /v1/chats/:id/messages | Send message |
| POST | /v1/deployments | Create deployment |
v0-1.5-md — Everyday tasks and UI generationv0-1.5-lg — Advanced reasoningv0-1.0-md — Legacy modelnpm i @ai-sdk/vercel
import { vercel } from '@ai-sdk/vercel'
import { generateText } from 'ai'
const { text } = await generateText({
model: vercel('v0-1.5-md'),
prompt: 'Create a login form with email and password fields',
})
Use v0's full capabilities as tools within an AI SDK agent:
npm install @v0-sdk/ai-tools ai
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'
import { v0Tools } from '@v0-sdk/ai-tools'
const result = await generateText({
model: openai('gpt-5.2'),
prompt: 'Create a new React dashboard project with charts and a data table',
tools: v0Tools({ apiKey: process.env.V0_API_KEY }),
})
For granular control, import specific tool sets:
import { createChatTools, createProjectTools, createDeploymentTools } from '@v0-sdk/ai-tools'
The v0Tools export includes 20+ tools: createChat, sendMessage, getChat, updateChat, deleteChat, favoriteChat, forkChat, listChats, createProject, getProject, updateProject, listProjects, assignChatToProject, createEnvironmentVariables, createDeployment, getDeployment, deleteDeployment, listDeployments, getDeploymentLogs.
Connect v0 to any MCP-compatible IDE (Cursor, Codex, etc.):
{
"mcpServers": {
"v0": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.v0.dev",
"--header",
"Authorization: Bearer ${V0_API_KEY}"
]
}
}
}
Exposes 4 tools: create chat, get chat info, find chats, send messages.
v0/main-e7bad8e4)mainv0/main-abc123 → main+ → "Import from GitHub"Weak: "Build a dashboard"
Strong: "Build a support ticket dashboard. Mobile-first, light theme, high
contrast. Color code: red for urgent, yellow for medium, green for low.
Show agent status badges. Maximum 2 columns on mobile."
"Build a real-time chat app using: Next.js 16 with App Router,
Socket.io for messaging, Vercel Postgres for storage,
NextAuth.js for authentication."
"Create a team collaboration tool with admin, manager, and member
roles, task assignment, progress tracking, and file sharing."
You can queue up to 10 prompts while v0 is still generating:
"Add comprehensive error handling for network failures, invalid
input, and empty states with helpful recovery suggestions."
Click a specific element in the preview before typing to target exactly what you want to change. Eliminates ambiguity for multi-instance components.
When no framework is specified, v0 generates:
v0 is strongest when you specify both structure and aesthetic direction. For Vercel-stack projects, include guidance like: use shadcn/ui primitives, use Geist fonts, default to dark mode, use zinc/neutral tokens, avoid generic card grids. After importing v0 code, normalize it: replace ad-hoc controls with shadcn components, collapse repeated card grids into stronger patterns, align typography to Geist, remove mixed radii and decorative effects.
Best for adding individual UI components to an existing app.
npx v0@latest init
npx v0@latest add <component-id>
Then import the component:
import { DataTable } from '@/components/data-table'
export default function DashboardPage() {
return <DataTable data={rows} columns={columns} />
}
Best for iterating on a full feature branch with non-engineers.
Best for CI/CD pipelines or programmatic component generation.
import { v0 } from 'v0-sdk'
// Generate a component from a design spec
const chat = await v0.chats.create({
message: `Create a pricing table component with these tiers:
- Free: 0/mo, 1 project, community support
- Pro: $20/mo, unlimited projects, priority support
- Enterprise: Custom, SLA, dedicated support`,
})
// Wait for generation, then download
const files = await v0.chats.downloadVersion({
chatId: chat.id,
versionId: chat.latestVersion.id,
})
Best for autonomous agents that need to generate and deploy UI.
import { Agent } from 'ai'
import { v0Tools } from '@v0-sdk/ai-tools'
const agent = new Agent({
model: openai('gpt-5.2'),
tools: {
...v0Tools({ apiKey: process.env.V0_API_KEY }),
// ... other tools
},
system: 'You are a full-stack developer. Use v0 to generate UI components.',
})
const { text } = await agent.generateText({
prompt: 'Create a dashboard for our analytics data and deploy it',
})
v0 has native support for these services in its sandbox:
tools
Top-level workflow skill for USD performance diagnosis and optimization. Use for slow loading, high memory, low FPS, or 'optimize my scene' requests; delegates auth/runtime setup to Phase 0 owners.
data-ai
Use when the user mentions MagicPath, designs, UI components, themes, canvas selections, or repo-to-canvas UI work; run magicpath-ai to search, inspect, install, or author components.
documentation
Use as the top-level router for Omniverse Realtime Viewer USD app requests and focused viewer reference documents.
tools
Turn Notion specs into implementation plans, tasks, and progress tracking; use when implementing PRDs/feature specs and creating Notion plans + tasks from them.