shadcn-ui — Claude Code skill: what it does, how to install
Helps discover, add, and customize shadcn/ui components in React projects. Useful when building interfaces with Tailwind CSS.
npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a claude-codeWhat shadcn-ui does
This skill guides component discovery through shadcn MCP tools, including metadata and demo lookup, then adds the selected source to a project. Direct installation uses npx shadcn@latest add [component-name]: it places files in components/ui/, installs dependencies, and updates components.json. Blocks have separate actions for listing and retrieving their source.
For a new project, use npx shadcn@latest create; for an existing project, use npx shadcn@latest init. The guidance also covers the cn() helper, themes, CSS variables, class-variance-authority variants, and wrapper components under components/. The setup requires React 18+, Tailwind CSS 3.0+, clsx, tailwind-merge, class-variance-authority, and either Radix UI or Base UI primitives. A project outside those requirements needs a configuration check before components are added.
What it helps with
- find a suitable shadcn/ui component
- add a component under
components/ui/ - inspect component metadata and demos
- customize themes and CSS variables
- assemble a UI block from multiple files
Example prompts for the agent
- Use `list_components` to find a dialog component, then show its metadata and demo.
- Add the `button` component to this project and check its required dependencies.
- Run `npx shadcn@latest init`, then configure `cn()` and the theme in `app/globals.css`.
How to install shadcn-ui
1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a claude-code2Manually: put the files in place
~/.claude/skills/shadcn-ui/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/shadcn-ui/
1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a codex2Manually: put the files in place
.agents/skills/shadcn-ui/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a cursor2Manually: put the files in place
.cursor/skills/shadcn-ui/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install google-labs-code/stitch-skills shadcn-ui2Manually: put the files in place
.github/skills/shadcn-ui/SKILL.md1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a gemini-cli2Platform CLI
gemini skills install https://github.com/google-labs-code/stitch-skills --path plugins/stitch-build/skills/shadcn-uiManually: put the files in place
.devin/skills/shadcn-ui/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set15
The whole set →Similar
Questions about shadcn-ui
How do I install shadcn-ui in Claude Code?
Run these steps in order: npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a claude-code, then run npx skills add google-labs-code/stitch-skills --skill shadcn-ui -a claude-code again, and open ~/.claude/skills/shadcn-ui/SKILL.md.
What does the shadcn-ui skill do?
It helps discover shadcn/ui components and blocks, inspect their source, and add them to a project. It also covers themes, component variants, and accessibility considerations.
What does shadcn-ui require?
The components require React 18+ and Tailwind CSS 3.0+. The setup also uses clsx, tailwind-merge, class-variance-authority, and either Radix UI or Base UI primitives.
Source text
SKILL.md · Apache-2.0
---
name: shadcn-ui
description: Expert guidance for integrating and building applications with shadcn/ui components, including component discovery, installation, customization, and best practices.
allowed-tools:
- "shadcn*:*"
- "mcp_shadcn*"
- "Read"
- "Write"
- "Bash"
- "web_fetch"
---
# shadcn/ui Component Integration
You are a frontend engineer specialized in building applications with shadcn/ui—a collection of beautifully designed, accessible, and customizable components built with Radix UI or Base UI and Tailwind CSS. You help developers discover, integrate, and customize components following best practices.
## Core Principles
shadcn/ui is **not a component library**—it's a collection of reusable components that you copy into your project. This gives you:
- **Full ownership**: Components live in your codebase, not node_modules
- **Complete customization**: Modify styling, behavior, and structure freely, including choosing between Radix UI or Base UI primitives
- **No version lock-in**: Update components selectively at your own pace
- **Zero runtime overhead**: No library bundle, just the code you need
## Component Discovery and Installation
### 1. Browse Available Components
Use the shadcn MCP tools to explore the component catalog and Registry Directory:
- **List all components**: Use `list_components` to see the complete catalog
- **Get component metadata**: Use `get_component_metadata` to understand props, dependencies, and usage
- **View component demos**: Use `get_component_demo` to see implementation examples
### 2. Component Installation
There are two approaches to adding components:
**A. Direct Installation (Recommended)**
```bash
npx shadcn@latest add [component-name]
```
This command:
- Downloads the component source code (adapting to your config: Radix vs Base UI)
- Installs required dependencies
- Places files in `components/ui/`
- Updates your `components.json` config
**B. Manual Integration**
1. Use `get_component` to retrieve the source code
2. Create the file in `components/ui/[component-name].tsx`
3. Install peer dependencies manually
4. Adjust imports if needed
### 3. Registry and Custom Registries
If working with a custom registry (defined in `components.json`) or exploring the Registry Directory:
- Use `get_project_registries` to list available registries
- Use `list_items_in_registries` to see registry-specific components
- Use `view_items_in_registries` for detailed component information
- Use `search_items_in_registries` to find specific components
## Project Setup
### Initial Configuration
For **new projects**, use the `create` command to customize everything (style, fonts, component library):
```bash
npx shadcn@latest create
```
For **existing projects**, initialize configuration:
```bash
npx shadcn@latest init
```
This creates `components.json` with your configuration:
- **style**: default, new-york (classic) OR choose new visual styles like Vega, Nova, Maia, Lyra, Mira
- **baseColor**: slate, gray, zinc, neutral, stone
- **cssVariables**: true/false for CSS variable usage
- **tailwind config**: paths to Tailwind files
- **aliases**: import path shortcuts
- **rsc**: Use React Server Components (yes/no)
- **rtl**: Enable RTL support (optional)
### Required Dependencies
shadcn/ui components require:
- **React** (18+)
- **Tailwind CSS** (3.0+)
- **Primitives**: Radix UI OR Base UI (depending on your choice)
- **class-variance-authority** (for variant styling)
- **clsx** and **tailwind-merge** (for class composition)
## Component Architecture
### File Structure
```
src/
├── components/
│ ├── ui/ # shadcn components
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ └── dialog.tsx
│ └── [custom]/ # your composed components
│ └── user-card.tsx
├── lib/
│ └── utils.ts # cn() utility
└── app/
└── page.tsx
```
### The `cn()` Utility
All shadcn components use the `cn()` helper for class merging:
```typescript
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
```
This allows you to:
- Override default styles without conflicts
- Conditionally apply classes
- Merge Tailwind classes intelligently
## Customization Best Practices
### 1. Theme Customization
Edit your Tailwind config and CSS variables in `app/globals.css`:
```css
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
/* ... more variables */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* ... dark mode overrides */
}
}
```
### 2. Component Variants
Use `class-variance-authority` (cva) for variant logic:
```typescript
import { cva } from "class-variance-authority"
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md",
{
variants: {
variant: {
default: "bg-primary text-primary-foreground",
outline: "border border-input",
},
size: {
default: "h-10 px-4 py-2",
sm: "h-9 rounded-md px-3",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
```
### 3. Extending Components
Create wrapper components in `components/` (not `components/ui/`):
```typescript
// components/custom-button.tsx
import { Button } from "@/components/ui/button"
import { Loader2 } from "lucide-react"
export function LoadingButton({
loading,
children,
...props
}: ButtonProps & { loading?: boolean }) {
return (
<Button disabled={loading} {...props}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
{children}
</Button>
)
}
```
## Blocks and Complex Components
shadcn/ui provides complete UI blocks (authentication forms, dashboards, etc.):
1. **List available blocks**: Use `list_blocks` with optional category filter
2. **Get block source**: Use `get_block` with the block name
3. **Install blocks**: Many blocks include multiple component files
Blocks are organized by category:
- **calendar**: Calendar interfaces
- **dashboard**: Dashboard layouts
- **login**: Authentication flows
- **sidebar**: Navigation sidebars
- **products**: E-commerce components
## Accessibility
All shadcn/ui components are built on Radix UI primitives, ensuring:
- **Keyboard navigation**: Full keyboard support out of the box
- **Screen reader support**: Proper ARIA attributes
- **Focus management**: Logical focus flow
- **Disabled states**: Proper disabled and aria-disabled handling
When customizing, maintain accessibility:
- Keep ARIA attributes
- Preserve keyboard handlers
- Test with screen readers
- Maintain focus indicators
## Common Patterns
### Form Building
```typescript
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
// Use with react-hook-form for validation
import { useForm } from "react-hook-form"
```
### Dialog/Modal Patterns
```typescript
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
```
### Data Display
```typescript
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
```
## Troubleshooting
### Import Errors
- Check `components.json` for correct alias configuration
- Verify `tsconfig.json` includes the `@` path alias:
```json
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
```
### Style Conflicts
- Ensure Tailwind CSS is properly configured
- Check that `globals.css` is imported in your root layout
- Verify CSS variable names match between components and theme
### Missing Dependencies
- Run component installation via CLI to auto-install deps
- Manually check `package.json` for required Radix UI packages
- Use `get_component_metadata` to see dependency lists
### Version Compatibility
- shadcn/ui v4 requires React 18+ and Next.js 13+ (if using Next.js)
- Some components require specific Radix UI versions
- Check documentation for breaking changes between versions
## Validation and Quality
Before committing components:
1. **Type check**: Run `tsc --noEmit` to verify TypeScript
2. **Lint**: Run your linter to catch style issues
3. **Test accessibility**: Use tools like axe DevTools
4. **Visual QA**: Test in light and dark modes
5. **Responsive check**: Verify behavior at different breakpoints
## Resources
Refer to the following resource files for detailed guidance:
- `resources/setup-guide.md` - Step-by-step project initialization
- `resources/component-catalog.md` - Complete component reference
- `resources/customization-guide.md` - Theming and variant patterns
- `resources/migration-guide.md` - Upgrading from other UI libraries
## Examples
See the `examples/` directory for:
- Complete component implementations
- Form patterns with validation
- Dashboard layouts
- Authentication flows
- Data table implementations
© google-labs-code · Apache-2.0 · google-labs-code/stitch-skills