shadcn/ui logo

shadcn/ui

基于 Radix UI 和 Tailwind CSS 的可复制组件集合

精选工具ReactTailwind CSSCopy-PasteRadix UI

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 生态的组件使用方式,推动了"代码所有权"模式的普及。

基本信息

快速上手

安装

# 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 编码工具
  • 设计系统基础:作为自己设计系统的起点
  • 中小团队:快速启动、低学习曲线
  • 独立开发者 / 初创公司:零配置即可上手

开发与工程化

开发流程

  1. 使用 npx shadcn@latest init 初始化项目
  2. 通过 npx shadcn@latest add &lt;component&gt; 按需添加组件
  3. components/ui/ 目录下按需定制组件源码
  4. 使用 CSS 变量管理主题 Token

构建与部署

shadcn/ui 组件是普通 React 代码,构建和部署取决于你的框架选择:

# Next.js
npm run build
npm start
 
# Vite
npm run build

CI/CD 集成

无特殊要求,按标准 React/Next.js 流程集成即可。

性能与安全

性能特点

维度说明
Bundle Size极小,只包含使用的组件
Tree Shaking天然支持,每个组件是独立文件
运行时开销接近零,无 CSS-in-JS 运行时
CSS 方案Tailwind CSS,编译后极小

优化建议

  • 对非首屏组件使用 React.lazy() 懒加载
  • 确保只导入需要的组件
  • 使用 React.memo() 包裹昂贵渲染组件
  • 大数据表格使用虚拟滚动

安全注意事项

  • 组件源码在你的项目中,可审计
  • 无第三方运行时依赖风险

技术对比

维度shadcn/uiMUIChakra UIDaisyUIAnt Design
模型Copy-pastenpm 包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

最佳实践

架构实践

  1. 将 shadcn/ui 视为源代码,而非依赖:复制后就是你自己代码的一部分
  2. 尽早建立设计 Token 层:在 globals.css 中定义 CSS 变量
  3. 在基础组件之上构建产品专属抽象:创建符合业务语义的组件
  4. 组合优于配置:利用 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 CLI4.13.02026.7.3
@shadcn/react0.2.02026.6.30
Base UI(新默认)1.6.02026.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 生态
  • 社区驱动的风格和组件扩展