V0 defaults to shadcn/ui (Radix primitives + Tailwind CSS) for all components, but you can instruct it to use other UI frameworks like Material UI, Chakra UI, Ant Design, or your own custom design system. Specify the library by name in your prompt, reference specific component names from that library, and provide your custom registry URL in V0's Design panel if you have a shadcn-compatible design system. V0 also supports the 'Open in v0' button on any shadcn registry for instant design system imports.
Why V0 defaults to shadcn/ui and how to override it
V0 is built by Vercel and uses shadcn/ui as its default component system because shadcn/ui provides direct source code ownership, Tailwind CSS integration, and Radix accessibility primitives. When you send a prompt without specifying a UI library, V0 automatically uses shadcn/ui components like Button, Card, Dialog, and Table. However, you may need to use a different library because your existing project uses Material UI, your company has a custom design system, or you prefer a different aesthetic. V0 can generate code with any React-compatible UI library, but you must explicitly name the library and its components in your prompt. For shadcn-compatible design systems, V0 supports custom registries that pass design tokens and components directly to the AI.
- V0 defaults to shadcn/ui when no specific library is mentioned in the prompt
- Prompts using generic terms like 'button' or 'modal' are interpreted as shadcn/ui components
- Custom design system tokens and components are not available to V0 without a registry configuration
- V0 may mix shadcn/ui components with the requested library if the prompt is not specific enough
- Some UI libraries have components that V0's training data has not fully indexed, causing incomplete implementations
Error messages you might see
Module not found: Can't resolve '@mui/material/Button'V0 generated Material UI code but the package is not installed in the project. Ask V0 to install the dependency or add it manually via the code editor's terminal.
The component at https://ui.shadcn.com/r/styles/new-york-v4/date-picker.json was not found.V0 referenced a shadcn/ui component that does not exist in the current registry. This is the most common V0 issue — the date-picker is not a standalone registry component but a composition of Popover and Calendar.
Before you start
- A V0 project where you want to use a specific UI framework
- Knowledge of the component names in your target UI library
- Optional: a custom shadcn registry URL for your design system
How to fix it
Explicitly name the UI library and components in your prompt
V0 defaults to shadcn/ui unless told otherwise. Naming the library and its specific component API tells the AI exactly which components to use and how to import them.
Explicitly name the UI library and components in your prompt
V0 defaults to shadcn/ui unless told otherwise. Naming the library and its specific component API tells the AI exactly which components to use and how to import them.
Include the library name and specific component names in every prompt. Reference the library's component API to avoid V0 falling back to shadcn/ui equivalents.
// Vague prompt — V0 uses shadcn/ui// "Create a modal with a form inside"// Specific prompt — V0 uses Material UI// "Create a dialog using Material UI's Dialog, DialogTitle,// DialogContent, and DialogActions components from @mui/material.// Inside the dialog, add a form with TextField components for// name and email, and a Button to submit."// Or for Chakra UI:// "Create a modal using Chakra UI's Modal, ModalOverlay,// ModalContent, ModalHeader, ModalBody, and ModalFooter// from @chakra-ui/react."Expected result: V0 generates code using the specified UI library instead of defaulting to shadcn/ui.
Configure a custom design system registry in V0's Design panel
The shadcn registry specification lets you pass custom design tokens (colors, fonts, spacing) and components to V0. When configured, V0 uses your design system's visual language for all generations.
Configure a custom design system registry in V0's Design panel
The shadcn registry specification lets you pass custom design tokens (colors, fonts, spacing) and components to V0. When configured, V0 uses your design system's visual language for all generations.
Open the Design panel in V0. If you have a shadcn-compatible registry deployed (using Vercel's Registry Starter Template), enter the registry URL. V0 will load your custom tokens and component definitions.
// V0 uses default shadcn/ui tokens// Colors: default slate palette// Font: Inter from next/font/google// After configuring custom registry in Design panel:// V0 uses YOUR design system tokens:// Colors: your brand palette from tokens.css// Font: your brand font from layout.tsx// Components: your custom components from registry.json// Registry URL format:// https://your-registry.vercel.app/r/registry.jsonExpected result: All V0 generations use your custom design tokens and component definitions.
Use the 'Open in v0' button for existing registry components
Any shadcn-compatible component library that deploys a registry can include an 'Open in v0' button. This sends the component's metadata, source code, and styles directly to V0 for immediate use.
Use the 'Open in v0' button for existing registry components
Any shadcn-compatible component library that deploys a registry can include an 'Open in v0' button. This sends the component's metadata, source code, and styles directly to V0 for immediate use.
Browse component libraries that support the shadcn registry format. Click the 'Open in v0' button on any component page. V0 opens with the component loaded and ready to customize through prompts.
// Manually copying component code from documentation// Click 'Open in v0' on the component's registry page// V0 imports the component with:// - Full source code// - CSS tokens and styles// - TypeScript types// - All dependenciesExpected result: The component appears in your V0 project with all styles and dependencies configured.
Prevent V0 from mixing libraries in the same project
When prompts mention a non-default library for some components but not others, V0 may generate a mix of shadcn/ui and the other library, creating visual inconsistency and duplicate dependencies.
Prevent V0 from mixing libraries in the same project
When prompts mention a non-default library for some components but not others, V0 may generate a mix of shadcn/ui and the other library, creating visual inconsistency and duplicate dependencies.
Add a project-level instruction at the beginning of each prompt or create a V0 system prompt that specifies the UI library for all components.
// Prompt 1: "Use MUI for the data table"// Prompt 2: "Add a sidebar" (V0 uses shadcn/ui — inconsistent)// Consistent prompts:// Prompt 1: "This project uses Material UI (@mui/material) for ALL// components. Do NOT use shadcn/ui. Create a data table using// MUI DataGrid."// Prompt 2: "Using Material UI — add a Drawer sidebar with// List and ListItem navigation."Expected result: All components use the same UI library consistently throughout the project.
Complete code example
1"use client";23import {4 Table,5 TableBody,6 TableCell,7 TableContainer,8 TableHead,9 TableRow,10 Paper,11 Chip,12 IconButton,13 Typography,14} from "@mui/material";15import EditIcon from "@mui/icons-material/Edit";16import DeleteIcon from "@mui/icons-material/Delete";1718interface Product {19 id: string;20 name: string;21 price: number;22 category: string;23 status: "active" | "draft" | "archived";24}2526const statusColor: Record<string, "success" | "warning" | "default"> = {27 active: "success",28 draft: "warning",29 archived: "default",30};3132export function ProductTable({ products }: { products: Product[] }) {33 return (34 <TableContainer component={Paper}>35 <Typography variant="h6" sx={{ p: 2 }}>36 Products37 </Typography>38 <Table>39 <TableHead>40 <TableRow>41 <TableCell>Name</TableCell>42 <TableCell>Price</TableCell>43 <TableCell>Category</TableCell>44 <TableCell>Status</TableCell>45 <TableCell align="right">Actions</TableCell>46 </TableRow>47 </TableHead>48 <TableBody>49 {products.map((product) => (50 <TableRow key={product.id}>51 <TableCell>{product.name}</TableCell>52 <TableCell>${product.price}</TableCell>53 <TableCell>{product.category}</TableCell>54 <TableCell>55 <Chip56 label={product.status}57 color={statusColor[product.status]}58 size="small"59 />60 </TableCell>61 <TableCell align="right">62 <IconButton size="small">63 <EditIcon fontSize="small" />64 </IconButton>65 <IconButton size="small" color="error">66 <DeleteIcon fontSize="small" />67 </IconButton>68 </TableCell>69 </TableRow>70 ))}71 </TableBody>72 </Table>73 </TableContainer>74 );75}Best practices to prevent this
- Always name the UI library explicitly in every prompt — never assume V0 will remember from a previous prompt
- Reference specific component names from the library's API documentation to avoid V0 using shadcn/ui fallbacks
- Use a custom shadcn registry for your design system to pass tokens and components directly to V0
- Add 'Do NOT use shadcn/ui' to prompts when you need V0 to strictly use another library
- Verify generated imports match the correct package name — V0 sometimes generates incorrect import paths for non-default libraries
- For projects requiring strict adherence to a corporate design system, RapidDev can implement components with exact spec compliance
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want my V0 project to use Material UI instead of shadcn/ui for all components. How do I instruct V0 to consistently use MUI, and how do I prevent it from falling back to shadcn/ui?
Frequently asked questions
Can V0 generate code with UI libraries other than shadcn/ui?
Yes. V0 can generate code using Material UI, Chakra UI, Ant Design, Mantine, or any other React-compatible component library. You must explicitly name the library and its component API in your prompt.
How do I connect a custom design system to V0?
Deploy a shadcn-compatible registry using Vercel's Registry Starter Template. Customize the colors, fonts, and components. Enter the registry URL in V0's Design panel. V0 will use your design tokens for all generations.
Why does V0 sometimes mix shadcn/ui with my specified library?
V0 defaults to shadcn/ui when the prompt does not explicitly mention the library for a specific component. Add 'Do NOT use shadcn/ui' and always name the target library in every prompt to prevent mixing.
What is the 'Open in v0' button on component libraries?
Libraries using the shadcn registry specification can include an 'Open in v0' button that sends component metadata, source code, and styles directly to V0. This lets you import and customize components instantly.
Can RapidDev implement a custom design system for V0 projects?
Yes. RapidDev can create a custom shadcn registry with your brand colors, typography, component variants, and custom blocks, then deploy it so V0 uses your design system for all future generations.
Does V0 support Tailwind alternatives like vanilla CSS or CSS-in-JS?
V0 works best with Tailwind CSS because it is the default styling system. You can request CSS modules or styled-components in your prompt, but V0 may be less reliable generating those styles. Tailwind CSS is recommended for the best V0 experience.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your issue.
Book a free consultation