ui
基于 Radix UI 的无障碍 React 组件库,通过 CLI 将源代码复制到本地,支持 Tailwind CSS 深度定制,12.1 万星。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Radix UI 的无障碍 React 组件库,通过 CLI 将源代码复制到本地,支持 Tailwind CSS 深度定制,12.1 万星。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2022年,一个化名为 shadcn 的独立开发者,在 Twitter 上发布了一条令人费解的帖子:他不打算做一个「组件库」,而是提供一套「复制粘贴」式的代码片段。他把这些代码片段放在 GitHub 上,起名 shadcn/ui。没有人预料到,这个看似反常识的开局,会在三年内席卷整个 React 生态,成为 2024-2025 年最受欢迎的前端项目之一。截至 2025 年,shadcn/ui 仓库累计斩获 12.1 万颗星,稳居全球 TypeScript 项目前列,GitHub 趋势榜常客。
shadcn/ui 的官方网站 ui.shadcn.com 本身就是一个「活的文档」——打开页面,一整面仪表盘式布局跃入眼帘:Button、Card、Avatar、Select、Calendar、Charts、Chat 气泡等 50 余个组件,以真实可交互的 UI 形式呈现。访客可以直接在浏览器中操作这些组件:点击按钮、切换主题、填写表单、打开对话框。视觉上采用深色/浅色双模式,色调以 slate 灰为基底,搭配 indigo 主色调,字体选用 Inter,整体呈现一种「精装修」的企业级质感,完美诠释了「设计系统」这一理念。
要理解 shadcn/ui 的革命性,需要先看看它解决了什么问题。
传统 UI 组件库(如 Material UI、Ant Design)走的都是「封装发布」路线:开发者 npm install @mui/material,组件代码被封装在 node_modules 里。你获得了开箱即用的按钮和表单,但代价是——样式被锁定在主题系统内,一旦需要深度定制,要么 override 大量 CSS-in-JS 规则,要么直接 fork 源码,改动变得极其困难。更致命的是:组件 Bug 只能等维护者修复,版本升级可能随时破坏你的定制代码。
另一个流派是 Headless UI(代表:Radix UI)。这类库提供完整的行为逻辑和 WAI-ARIA 无障碍支持,但完全不包含样式——你需要从零开始写 CSS,门槛极高。
shadcn/ui 的答案是:取两家之长,去两家之短。它基于 Radix UI 的无样式原语,提供精心设计的默认样式(Tailwind CSS),然后把组件代码本身交给开发者——不是 npm 包,而是 GitHub 上的源代码文件。你通过 CLI npx shadcn add button 把组件「下载」到本地项目的 components/ui/ 目录下,组件代码完全属于你,可以随意修改、定制、打包。
shadcn/ui 仓库采用 pnpm workspaces 构建 monorepo 结构,架构清晰分层:
cn() 函数是样式合并的核心枢纽packages/react 是整个生态的「原子层」,封装了基于 Radix UI 的无样式 React 组件,提供完整的事件处理和可访问性保障,开发者通过 npm install @shadcn/react 引入,样式完全由自己控制。
packages/helpers 中的 cn() 工具函数(classnames + clsx + tailwind-merge)是 shadcn/ui 样式系统的关键枢纽:合并 Tailwind 类名、自动处理冲突,让组件样式覆盖变得优雅而可靠。
packages/shadcn 是整个项目最聪明的部分——一个功能完善的 CLI,核心命令包括:npx shadcn create(启动 Web 界面,可视化生成项目)、npx shadcn init(初始化依赖和 Tailwind 配置)、npx shadcn add [component](下载组件源代码)、npx shadcn apply --preset xxx(一键切换设计系统预设)。
CLI 的设计哲学是「代码即文档」——每个组件的源代码就是使用文档,开发者可以直接在项目中阅读、调试。
apps/v4 则是整个 shadcn 2.0 时代的实验场:基于 Next.js 15 App Router、React 19 以及即将正式发布的 Tailwind CSS v4 构建。它代表了 shadcn/ui 的未来方向——更高的性能、更灵活的样式系统、更强的跨框架支持。
shadcn/ui 的技术选型精准而务实:Tailwind CSS 负责样式层,提供原子化的 utility classes 和 CSS 变量驱动的主题系统;Radix UI 负责行为层,确保每个组件都遵循 WAI-ARIA 标准,支持完整的键盘导航、屏幕阅读器兼容。
TypeScript 贯穿全栈,所有组件都提供完整的类型定义。构建工具链使用 Turbo(Vercel 出品的 monorepo 构建系统)+ tsup(轻量级 TypeScript 打包工具)+ Vitest(单元测试)。CI/CD 集成 GitHub Actions,代码风格通过 ESLint + Prettier 强制统一。
在 2025 年的更新路线图中,shadcn/ui 已支持跨框架目标——不仅限于 React,还包括 Vue、Svelte 等框架的组件包,真正成为「设计系统」而非「React 专属组件库」。与此同时,Registry Schema 的更新允许组件的元数据以结构化方式存储,为可视化编辑器铺平了道路。
对于 AI 爱好者和独立开发者而言,shadcn/ui 的上手体验堪称友好。
零配置起步:运行 npx shadcn create,浏览器自动打开 Web 配置界面,选择预设后项目自动生成,Tailwind 主题、CSS 变量、组件依赖一应俱全。5 分钟内,一个包含 shadcn 组件的 Next.js 项目即可在本地跑起来。
所见即所得的文档:ui.shadcn.com 的每个组件页面都提供:交互式 Demo(在页内直接操作组件)、复制代码按钮、安装命令、Props 说明。无需离开浏览器即可完成组件选型和学习。
Blocks 生态:除基础组件外,shadcn 还提供「Blocks」——即完整的页面级模板(登录页、仪表盘、电商卡片等),直接复制即可用于生产。Blocks 生态的丰富程度,使得中小型项目的 UI 开发效率提升数倍。
shadcn/ui 并非完美,存在几点值得关注的局限:
版本同步负担:CLI 管理的组件代码在本地,不随 npm 包版本自动更新。当上游组件有 Bug 修复或新功能时,需要手动重新拉取,存在合并冲突的风险。
自定义门槛仍存:对于设计系统的深度定制(尤其是动画和复杂交互),需要扎实的 Tailwind CSS 知识,不适合完全不懂 CSS 的初学者。
过度依赖 Radix:组件行为层强依赖 Radix UI,若 Radix 停止维护或出现破坏性变更,shadcn/ui 需大量重构。不过 Radix 背后有 GitHub 支持,社区活跃度较高,风险相对可控。
shadcn/ui 的出现,本质上是将前端开发的「消费模式」从「安装依赖」转变为「理解代码」。它让 React 开发者不再只是组件的消费者,而成为组件的共同作者。
在 AI 应用爆发的当下,这一理念尤为重要:大模型驱动的应用需要高度定制化的前端界面,而 shadcn/ui 的代码分发模式,配合 AI 代码生成工具(如 Cursor、Copilot),可以构建出「AI 生成 → shadcn 组件承接 → 开发者微调」的现代化工作流。
长期趋势判断:shadcn/ui 代表的「代码分发 + 设计系统」模式,正在取代传统的「npm 包分发 + 主题覆盖」模式,成为 React 生态的事实标准。它的成功也将推动其他框架(Vue、Svelte)出现类似的代码分发工具,最终形成跨框架的设计系统基础设施。
技术画像:TypeScript · Radix UI · Tailwind CSS · React 19 · Next.js 15 · pnpm monorepo · Turbo · Vitest · MIT License