mcpField
R
react-shadcn

react-shadcn

github.com/fusengineDevelopment3465 installsUpdated 2w ago
Repository

About react-shadcn

A shadcn/ui implementation skill for React SPA (Vite) projects, guiding developers to build accessible UI with the project's existing component base. It covers forms, overlays, feedback, data display, and navigation, and incorporates MCP registry discovery into the implementation workflow.

Key features

  1. 01Supports Base UI, Radix UI, and React Aria
  2. 02Covers forms, overlays, and feedback components
  3. 03Includes data display and navigation patterns
  4. 04Requires detecting the component base first
  5. 05Installs registry components through the CLI

Use cases

  1. 01Adding forms to React SPA projects
  2. 02Implementing dialogs, drawers, and popovers
  3. 03Building data tables and navigation menus
  4. 04Composing UI components for the project's base

MCP support

Uses shadcn MCP registry tools to search components, inspect source and examples, and retrieve installation commands.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/fusengine/agents --skill react-shadcn

After installing, type/react-shadcnin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
accordion.md
alert-dialog.md
alert.md
aspect-ratio.md
avatar.md
badge.md
breadcrumb.md
button.md
calendar.md
card.md
carousel.md
chart.md
checkbox.md
collapsible.md
command.md
configuration.md
context-menu.md
dialog.md
drawer.md
dropdown.md
field-patterns.md
form-examples.md
hover-card.md
input-otp.md
input.md
installation.md
label.md
menubar.md
navigation-menu.md
pagination.md

Details

From the project README
Builds UI components for a React SPA (Vite) with shadcn/ui (CLI 4.21.0) and Tailwind CSS v4 on whichever component base the project uses — Base UI (default for new projects since July 2026), Radix UI (unified `radix-ui` package, fully supported) or React Aria (added July 2026): forms (Field/FieldLabel/FieldError pattern with TanStack Form, never React Hook Form), overlays (Dialog, Sheet, Drawer, Popover, Tooltip), feedback (Alert, Toast on Base UI / Sonner on Radix and Aria, Progress, Skeleton), data display (Table, Badge, Calendar, Chart), and navigation (Sidebar, Command, DropdownMenu).

Requires detecting the base from components.json before writing any component code, installing components via bunx --bun shadcn@latest add (never hand-written) to @/modules/cores/shadcn/components/ui/, and covers MCP registry tools (mcp__shadcn__*) for discovering components before implementing. This is the plain-React variant of shadcn/ui — for Next.js App Router see nextjs-shadcn instead.

shadcn/ui for React

Accessible, copy-in components on Base UI, Radix UI or React Aria primitives, styled with Tailwind CSS v4.

Agent Workflow (MANDATORY)

Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:

  1. fuse-ai-pilot:explore-codebase - Analyze existing components and patterns
  2. fuse-ai-pilot:research-expert - Verify latest shadcn/ui docs via Context7/Exa
  3. mcp__shadcn__* - Search registry for component availability

After implementation, run fuse-ai-pilot:sniper for validation.


Overview

When to Use
  • Building UI components for React applications (Vite)
  • Need accessible, customizable form components (inputs, selects, checkboxes)
  • Implementing dialogs, sheets, drawers, or overlay patterns
  • Creating data tables with sorting, filtering, and pagination
  • Building navigation menus, sidebars, or command palettes
  • Need toast notifications or alert feedback components
Why shadcn/ui
FeatureBenefit
Copy/paste modelComponents copied to your project, full ownership
Choice of baseBase UI (default), Radix UI or React Aria — same component names
Tailwind CSS v4 stylingCSS-first theme (@theme inline, OKLCH tokens)
TanStack Form readyField + FieldError accept Standard Schema issues
Lucide icons (default)iconLibrary in components.json, switchable via migrate icons

Critical Rules

  1. Detect the base first - Read components.json style: base-* = Base UI, radix-* / new-york = Radix, aria-* = React Aria. Never mix bases in one component
  2. New projects default to Base UI - init picks Base UI unless -b radix / -b aria is passed
  3. Composition follows the base - Base UI uses render={<Button />}; Radix uses asChild. Reference examples marked Radix must be translated on Base UI projects
  4. NEVER create components manually - Always install with bunx --bun shadcn@latest add (the registry serves the variant for the project's base)
  5. TanStack Form only - NOT React Hook Form; wire errors with data-invalid on Field + aria-invalid on the control
  6. SOLID paths - Components at @/modules/cores/shadcn/components/ui/

Base Differences That Change Code

ConcernBase UI (default)Radix UI
Package@base-ui/reactradix-ui (unified; migrate radix from @radix-ui/react-*)
Trigger as custom element<DialogTrigger render={<Button />}>Open</DialogTrigger><DialogTrigger asChild><Button>Open</Button></DialogTrigger>
Select<Select items={items}>, SelectContent alignItemWithTriggerSelectContent position="item-aligned" | "popper"
Accordionmultiple, defaultValue={["item-1"]}type="single" collapsible / type="multiple"
Toggle group valuearray (defaultValue={["bold"]}), multipletype="single" | "multiple"
Checkbox indeterminateindeterminate propchecked="indeterminate"
DrawerBase UI Drawer (swipeDirection)Vaul (direction)
Toastsadd toast → toast.add({ title })add sonner → toast("…") from sonner
Open-state stylingdata-open / data-closeddata-state="open" (both covered by data-open: variant from shadcn/tailwind.css)

Shared across bases: component names, showCloseButton on DialogContent/SheetContent, the Field family, theme tokens.


Architecture

Component Foundation
  • Primitives - Base UI / Radix UI / React Aria (per components.json)
  • Tailwind CSS v4 - CSS-first config: @import "tailwindcss", @import "shadcn/tailwind.css", @custom-variant dark, @theme inline
  • class-variance-authority - Variant management for component styles
  • cn package - Registry components import { cn } from "cn" (Sept 2026, drop-in for twMerge(clsx(...))); lib/utils.ts re-exports it; migrate old projects with shadcn migrate cn
Project Structure

Components installed to @/modules/cores/shadcn/components/ui/ following SOLID architecture. Utils at @/modules/cores/lib/utils.ts (export { cn } from "cn").


MCP Server Integration

Run bunx --bun shadcn@latest mcp init --client claude (or create .mcp.json) for Claude Code integration with the shadcn registry.

Available MCP Tools
  • mcp__shadcn__search_items_in_registries - Search available components
  • mcp__shadcn__view_items_in_registries - View component source code
  • mcp__shadcn__get_item_examples_from_registries - Get usage examples
  • mcp__shadcn__get_add_command_for_items - Get installation commands

CLI helpers for agents: shadcn info (framework, base, installed components) and shadcn docs <component> -b <base|radix|aria>.

See installation.md for complete setup.


Component Categories

CategoryComponentsPrimary Reference
SetupInit, configuration, theming, iconsinstallation.md
FormsButton, Input, Field, Select, Checkbox, Switch, Sliderfield-patterns.md
OverlayDialog, Sheet, Drawer, Popover, Tooltip, HoverCarddialog.md
FeedbackAlert, Toast (Base UI) / Sonner (Radix, Aria), Progress, Skeleton, Spinnertoast.md
Data DisplayTable, Badge, Avatar, Calendar, Chart, Carouseltable.md
NavigationBreadcrumb, DropdownMenu, Command, Sidebar, Tabssidebar.md
LayoutCard, Accordion, Separator, ScrollArea, Resizablecard.md

Component references show the Radix API unless marked otherwise; each one lists the Base UI differences at the top.


Best Practices

  1. Field components - Field + FieldLabel + FieldError errors={field.state.meta.errors}
  2. Client Components - React apps are client-side by default ("rsc": false)
  3. Toasts per base - Base UI Toast on Base UI; Sonner on Radix/Aria (the Radix Toast is deprecated)
  4. MCP tools first - Use mcp__shadcn__* to explore before implementing
  5. Theming via CSS variables - OKLCH tokens in src/index.css :root / .dark, exposed with @theme inline
  6. Accessibility - Rely on the primitives' keyboard navigation and ARIA; keep aria-invalid on invalid controls

Reference Guide

NeedReference
Initial setupinstallation.md, configuration.md
Form patternsfield-patterns.md, form-examples.md
Theme customizationtheming.md
Data tablestable.md
Modal dialogsdialog.md, alert-dialog.md
Navigationsidebar.md, navigation-menu.md

Comments

Markdown supported