shadcn/ui
基于 Radix UI 和 Tailwind CSS 的可复制组件集合
shadcn/ui 不是传统 npm 组件库,而是通过 CLI 将组件源码直接复制到项目中的全新分发模式,底层基于 Radix UI 和 Tailwind CSS,已成为 GitHub 星标最多的 React 组件库(118K+ stars)。
shadcn/ui
基于 Radix UI 和 Tailwind CSS 的可复制组件集合,不通过 npm 分发,而是将组件源码直接复制到项目中。
技术简介说明
shadcn/ui 不是传统的 npm 组件库,而是一种全新的组件分发模式。它通过 CLI 工具将组件源码直接复制到你的项目中,让开发者拥有代码的完全所有权和控制权。这种 copy-paste 模式意味着你可以随意修改、定制和扩展组件,而不受上游版本变更的影响。
shadcn/ui 的底层基于 Radix UI(无头 UI 原语)和 Tailwind CSS(原子化样式),将无障碍访问、键盘导航、焦点管理等交互逻辑交给 Radix UI 处理,将样式表现交给 Tailwind CSS。shadcn/ui 本身是这两者之间的"胶水层",提供开箱即用的美观组件。
截至 2026 年 7 月,shadcn/ui 已成为 GitHub 上星标最多的 React 组件库(118K+ stars),超越了 Material UI。它深刻影响了 React 生态的组件使用方式,推动了"代码所有权"模式的普及。
基本信息
- 官网:https://ui.shadcn.com
- GitHub:https://github.com/shadcn-ui/ui
- License:MIT License
- 最新版本:shadcn CLI 4.13.0(2026 年 7 月 3 日)
- 主要维护者:shadcn(化名),Vercel 设计工程师
快速上手
安装
# Next.js 项目(推荐)
npx shadcn@latest init
# 交互式配置:
# - 选择原语库:Base UI(默认)或 Radix UI
# - 选择颜色主题
# - 配置 CSS 变量
# - 配置路径别名
# 添加组件
npx shadcn@latest add button
npx shadcn@latest add dialog card input基础配置
// components.json(项目根目录)
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "app/globals.css",
"baseColor": "neutral",
"cssVariables": true
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui"
}
}最小示例
import { Button } from "@/components/ui/button"
export default function Page() {
return <Button variant="outline">点击我</Button>
}核心概念与架构
Copy-Paste 模式
shadcn/ui 的核心理念是"代码所有权"。组件不是通过 npm 安装的依赖,而是直接复制到项目中的源码文件:
npx shadcn@latest add button
# 源码复制到 components/ui/button.tsx
# 你拥有这个文件的完全控制权三层技术栈
| 层级 | 技术 | 职责 |
|---|---|---|
| 行为层 | Radix UI / Base UI | 无样式的 headless 原语,处理 ARIA、键盘导航、焦点管理 |
| 样式层 | Tailwind CSS | 工具类 CSS,布局、颜色、间距、响应式 |
| 组合层 | shadcn/ui 组件 | 胶水代码,将 Radix/Base 原语与 Tailwind 类组合 |
设计 Token 架构
使用 CSS 自定义属性进行主题管理:
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 222.2 47.4% 11.2%;
--border: 214.3 31.8% 91.4%;
--ring: 215 20.2% 65.1%;
}核心特性
- 代码所有权:组件源码在你的项目中,完全可定制
- 无障碍(a11y):基于 Radix UI / Base UI 原语,内置 ARIA 和键盘支持
- Tailwind CSS 原生:深度集成 Tailwind,使用 CSS 变量 Token 系统
- 可组合性:基于 compound component 模式,灵活组合子组件
- 暗色模式:通过 CSS 变量原生支持,一行代码切换
- RTL 支持:2026 年 1 月新增
- 多风格:New York、Default、Luma、Sera、Rhea 等多种风格
- Registry 系统:开源注册表生态,支持分发组件、hooks、工具函数
- AI 友好:纯代码模型天然适配 AI 编码工具(v0、Claude、Cursor)
- MCP Server:支持 AI 编码工具集成
生态图
核心包
| 包 | 说明 |
|---|---|
shadcn (CLI) | 核心命令行工具 |
@shadcn/react | 无样式 headless React 组件包(2026.6) |
shadcn/tailwind.css | 共享 Tailwind 工具类 |
社区生态
| 资源 | 说明 |
|---|---|
| registry.directory | 社区注册表浏览器 |
| shadcn Studio | 组件和模板托管平台 |
| shadcnblocks.com | 社区 Blocks 集合 |
| Tremor | 数据可视化组件 |
| Recharts | 图表库集成 |
框架支持
- Next.js(最推荐,原生集成)
- Vite + React
- Remix
- Astro
- Laravel
- Svelte / Vue / Solid.js(社区移植)
适用场景
- SaaS 产品:高度可定制,适合打造独特品牌
- 管理后台 / Dashboard:丰富的表格、表单、侧边栏组件
- Next.js 项目:原生集成,Vercel 生态加持
- AI 辅助开发:纯代码模型天然适配 AI 编码工具
- 设计系统基础:作为自己设计系统的起点
- 中小团队:快速启动、低学习曲线
- 独立开发者 / 初创公司:零配置即可上手
开发与工程化
开发流程
- 使用
npx shadcn@latest init初始化项目 - 通过
npx shadcn@latest add <component>按需添加组件 - 在
components/ui/目录下按需定制组件源码 - 使用 CSS 变量管理主题 Token
构建与部署
shadcn/ui 组件是普通 React 代码,构建和部署取决于你的框架选择:
# Next.js
npm run build
npm start
# Vite
npm run buildCI/CD 集成
无特殊要求,按标准 React/Next.js 流程集成即可。
性能与安全
性能特点
| 维度 | 说明 |
|---|---|
| Bundle Size | 极小,只包含使用的组件 |
| Tree Shaking | 天然支持,每个组件是独立文件 |
| 运行时开销 | 接近零,无 CSS-in-JS 运行时 |
| CSS 方案 | Tailwind CSS,编译后极小 |
优化建议
- 对非首屏组件使用
React.lazy()懒加载 - 确保只导入需要的组件
- 使用
React.memo()包裹昂贵渲染组件 - 大数据表格使用虚拟滚动
安全注意事项
- 组件源码在你的项目中,可审计
- 无第三方运行时依赖风险
技术对比
| 维度 | shadcn/ui | MUI | Chakra UI | DaisyUI | Ant Design |
|---|---|---|---|---|---|
| 模型 | Copy-paste | npm 包 | npm 包 | CSS 插件 | npm 包 |
| 设计风格 | 极简/可定制 | Material Design | 现代/可定制 | 主题化 Tailwind | 企业级 |
| 底层 | Radix / Base UI | 自有 | Radix UI | 纯 CSS | 自有 |
| Bundle 大小 | 极小 | 大 | 中 | 小 | 大 |
| 定制自由度 | 极高 | 高 | 高 | 中 | 中 |
| 自动升级 | ❌ 手动 | ✅ npm update | ✅ npm update | ✅ npm update | ✅ npm update |
| a11y | 优秀 | 优秀 | 良好 | 一般 | 良好 |
| AI 友好 | 极高 | 中 | 中 | 低 | 中 |
| GitHub Stars | ~118K | ~95K | ~38K | ~35K | ~93K |
最佳实践
架构实践
- 将 shadcn/ui 视为源代码,而非依赖:复制后就是你自己代码的一部分
- 尽早建立设计 Token 层:在
globals.css中定义 CSS 变量 - 在基础组件之上构建产品专属抽象:创建符合业务语义的组件
- 组合优于配置:利用 compound component 模式灵活组装
代码组织
components/
├── ui/ # shadcn/ui 组件(尽量少改)
├── forms/ # 表单相关复合组件
├── layout/ # 布局组件
└── features/ # 业务功能组件
常见陷阱
- 过度修改
components/ui/中的组件,导致与上游脱节 - 硬编码颜色值而不是使用 CSS 变量 Token
- 忽略
prefers-reduced-motion可访问性需求
技术局限与边界
| 限制 | 说明 |
|---|---|
| 手动维护成本 | 没有自动升级机制,更新需手动对比合并 |
| 无设计 Figma 同步 | 与代码不同步 |
| React 中心化 | 官方仅支持 React |
| 企业规模治理 | 大型团队需自行建立版本管理和分发机制 |
| Tailwind 依赖 | 深度绑定 Tailwind CSS |
| 企业设计系统 | 缺少正式的设计系统治理工具 |
不太适合的场景
- 需要自动升级的大型企业团队
- 非 React 项目(社区移植非官方)
- 需要 Material Design 的项目
- 不使用 Tailwind CSS 的项目
学习资源
官方资源
社区资源
X/Twitter
2026 年现状
最新版本
| 项目 | 版本 | 发布日期 |
|---|---|---|
| shadcn CLI | 4.13.0 | 2026.7.3 |
| @shadcn/react | 0.2.0 | 2026.6.30 |
| Base UI(新默认) | 1.6.0 | 2026.7 |
发展趋势
- Base UI 成为默认原语库(2026.7):更深度的原语集成
- CLI v4 + AI Skills(2026.3):为 AI 编码时代量身打造
- GitHub Registries(2026.6):去中心化组件分发
- Chat UI 组件(2026.6):响应 AI 应用需求
- 多风格系统:Luma / Sera / Rhea 覆盖更多设计场景
社区活跃度
- 118K+ GitHub Stars(React 组件库第一)
- 9,300+ forks
- 活跃的社区生态和注册表
- Vercel 官方支持
未来路线图
- 持续完善 Base UI 集成
- 更多 AI 编码工具集成
- 扩展 Registry 生态
- 社区驱动的风格和组件扩展