最近,Meta 在 GitHub 上开源了一个值得关注的项目:Astryx。
乍一看,它似乎只是一个普通的 React UI 组件库,但仔细研究之后会发现,它的设计思路和传统组件库有很大的不同。
Astryx 不仅希望解决开发者重复编写 UI 组件的问题,还在尝试解决 AI 编程时代的一个新问题:如何让 AI Agent 真正理解一套设计系统,并且稳定、准确地使用它?
这个项目在 Meta 内部已经发展了 8 年,曾经服务于公司内部 13,000 多个应用。现在 Meta 将它重新构建在 React 和 StyleX 等开源技术之上,并以 MIT 协议开放给社区。
目前项目处于 Beta 阶段,提供 150 多个无障碍组件、主题系统、暗色模式、页面模板以及配套 CLI 工具。
一、Astryx 到底是什么?
简单来说,Astryx 是一个面向 React 的开源设计系统(Design System)。
这里需要区分两个概念:组件库和设计系统。
传统组件库通常提供 Button、Input、Dialog、Table 等基础组件,开发者根据业务需求自行组合。
而设计系统的范围更大,它不仅包含组件,还包括颜色、字体、间距、布局规范、交互行为、设计令牌以及页面设计模式。
Astryx 做的就是把这些能力整合到一起。
它主要包含三个层次:
基础设计规范(Foundations): 负责颜色、字体、布局、间距以及无障碍设计等基础能力。
组件层(Components): 提供 150 多个可复用的 React 组件,覆盖常见的 UI 交互场景。
设计模式(Patterns): 提供经过实践验证的页面结构和交互方案,例如 Dashboard、表单、详情页、导航布局等。
这意味着开发者不仅可以使用一个 Button,还可以直接利用它提供的页面模板,快速搭建完整的业务界面。
二、为什么 Meta 要重新做一个组件库?
这部分其实是 Astryx 最值得研究的地方。
Meta 官方介绍过 Astryx 的诞生背景。
Meta 内部存在大量业务团队,每个团队都有自己的内部工具。随着业务发展,不同团队不断重复开发相同的 UI 能力,例如日期选择器、表格、表单等。
这带来了几个问题:开发资源重复投入、不同应用的交互体验不一致,以及相同组件需要在不同项目中重复维护。
于是,Meta 最初建立了一套内部设计系统,让各个团队共享组件和设计规范。
经过 8 年的发展,这套系统已经成为 Meta 内部规模最大的设计系统之一,服务超过 13,000 个应用。
但 AI 的出现改变了整个软件开发流程。
过去,组件库主要面向开发者设计,开发者可以通过文档、示例和源码理解组件的使用方式。
现在,越来越多的代码由 AI Agent 生成。如果组件库的 API 不够规范、文档不够清晰,AI 就很容易生成错误的代码。
Meta 发现,AI 在使用开源标准、TypeScript 和主流开发工具时表现得更好。
因此,他们决定将原有内部系统重新构建在开源技术栈上,并从设计之初就考虑 AI 的使用方式。
Astryx 并不是简单地给传统组件库增加 AI 功能,而是尝试让设计系统本身成为 AI 可以理解和操作的基础设施。
三、Astryx 有哪些值得关注的技术设计?
1. 基于 React 19 + StyleX
Astryx 使用 React 19 及以上版本,底层样式系统采用 Meta 开源的 StyleX。
这里可能有人会问:为什么不直接使用 Tailwind CSS?
StyleX 是 Meta 推出的 CSS-in-JS 方案,强调静态分析、类型安全以及样式的可预测性。
不过,Astryx 有一个比较有意思的设计:它内部使用 StyleX,并不意味着使用者也必须采用 StyleX。
开发者仍然可以通过 className 覆盖组件样式,使用 Tailwind CSS、CSS Modules 或普通 CSS。
这就降低了技术栈绑定的风险。
2. Theme:主题系统
传统组件库经常面临一个问题:组件功能很好,但视觉风格很难与自己的产品统一。
例如,企业内部系统可能需要蓝色主题,面向消费者的产品可能需要更加活泼的视觉风格。
Astryx 将主题能力独立出来,通过 CSS 自定义属性和主题配置控制组件外观。
它目前提供 7 套预设主题:
- Neutral:中性简约风格
- Butter:柔和的黄油色调
- Chocolate:巧克力风格
- Matcha:抹茶风格
- Stone:石材中性色调
- Gothic:哥特风格
- Y2K:千禧年复古风格
主题不仅可以修改颜色,还可以调整字体、间距、圆角、动画以及组件局部样式。
这意味着开发者可以保留组件的行为和交互逻辑,同时根据产品品牌调整整个应用的视觉效果。
3. Swizzle:直接拿到组件源码
这是我认为 Astryx 非常实用的一个设计。
传统组件库通常提供封装好的组件。如果某个组件无法满足业务需求,开发者往往需要通过外部样式覆盖,或者重新封装一层。
但有时候,这些方式依然无法满足需求。
Astryx 提供了一个叫做 Swizzle 的能力,可以将组件的完整源码导出到自己的项目中。
例如:
npx @astryxdesign/cli swizzle Button
执行后,可以将 Button 组件源码释放到项目中,开发者可以直接修改它。
这种设计提供了一条逐步增加控制权的路径:
使用默认组件 → 修改主题 → 覆盖样式 → 自定义 CSS → 导出源码并完全掌控。
它解决的是组件库一直存在的矛盾:既希望复用成熟组件,又不希望被组件库限制。
4. CLI:不只是命令行工具
Astryx 不仅提供组件,还提供了配套的 CLI。
它可以查询组件文档、生成页面模板、构建主题、执行代码迁移等。
例如:
# 查看组件列表
npx @astryxdesign/cli component --list
# 查看 Button 组件文档
npx @astryxdesign/cli component Button
# 查看可用页面模板
npx @astryxdesign/cli template --list
# 生成 Dashboard 页面
npx @astryxdesign/cli template dashboard
# 初始化项目
npx @astryxdesign/cli init
这里最值得关注的是 init 命令。
它会将 Astryx 的组件索引和使用指南写入项目中的 AGENTS.md 或 CLAUDE.md 文件。
这意味着 AI Agent 在开发项目时,可以直接读取组件使用规范、设计令牌和模板信息,而不是依靠模型自己猜测组件 API。
例如,当你让 AI 生成一个管理后台时,它可以先了解 Astryx 有哪些组件,再根据实际的组件文档生成代码。
这比简单地把一大段组件库文档复制到 Prompt 中更加系统化。
四、Astryx 如何解决 AI 编程中的 UI 问题?
我认为这是整个项目最值得关注的部分。
现在使用 Cursor、Claude Code、Codex 等 AI 编程工具,已经可以很轻松地生成一个页面。
但实际开发中经常会遇到一个问题:AI 能够生成页面,却不一定能够生成符合设计规范的页面。
例如,让 AI 生成一个后台管理系统,它可能会出现以下情况:
- 每个页面使用的按钮风格不一致。
- 表单间距和字体大小不统一。
- 相同功能重复生成不同的组件。
- 不清楚某个组件有哪些可用属性。
- 组件 API 使用错误,导致代码无法运行。
这些问题本质上不是模型不会写 React,而是缺少统一、可靠的设计约束。
Astryx 的思路是把设计规范、组件 API、文档、模板和 CLI 整合起来,让 AI 有明确的能力边界和使用参考。
它甚至还提供了 Vibe Tests,用来评估人类开发者和 AI 使用这套设计系统时的实际表现。
这就有意思了。
过去我们评价一个组件库,主要看组件数量、性能、设计效果和开发体验。
而在 AI 时代,还需要考虑一个新的指标:
AI 能不能正确理解组件?能不能稳定组合组件?能不能按照设计规范生成页面?
Astryx 已经开始把这些问题纳入设计系统的建设和评估之中。
五、如何在 Next.js 项目中使用 Astryx?
如果你正在使用 Next.js,可以按照官方提供的方式快速接入。
首先安装依赖:
npm install @astryxdesign/core \
@astryxdesign/theme-neutral \
@stylexjs/stylex
npm install -D @astryxdesign/cli
然后在 src/app/globals.css 中引入样式:
@import '@astryxdesign/core/reset.css';
@import '@astryxdesign/core/astryx.css';
@import '@astryxdesign/theme-neutral/theme.css';
接下来使用组件:
import { Button } from '@astryxdesign/core/Button';
import { Card } from '@astryxdesign/core/Card';
import { Stack } from '@astryxdesign/core/Stack';
export default function Page() {
return (
<Stack gap="md">
<Card>
<Button variant="primary">
Save
</Button>
</Card>
</Stack>
);
}
如果希望让 AI Agent 更好地使用 Astryx,可以继续执行:
npx @astryxdesign/cli init
这样项目就拥有了面向 AI 的组件使用指南。
需要注意的是,Astryx 要求 React 19 及以上版本,目前仍处于 Beta 阶段,正式用于生产项目之前,建议先检查组件覆盖范围、升级策略和实际兼容性。
六、Astryx 对前端开发意味着什么?
我觉得 Astryx 值得关注的地方,不只是它提供了多少组件,而是它体现了一种新的开发思路。
过去,前端组件库主要解决的是开发者的重复劳动问题。开发者学习组件 API,然后手动组合组件,最终完成页面。
现在,AI 正在逐渐接管页面生成工作,组件库的使用者也开始从单纯的人类开发者扩展到 AI Agent。
这就要求组件库具备更好的可发现性、可理解性和可组合性。
Astryx 把文档、组件、模板和 CLI 统一起来,本质上是在为 AI 提供一套结构化的开发接口。
这也让我想到一个趋势:
未来的组件库可能不再只是 UI 组件的集合,而是 AI Agent 构建应用时可以直接调用的一套设计能力。
当然,Astryx 并不能解决所有 AI 前端开发问题。业务逻辑、产品交互、复杂页面设计以及最终质量验证,依然需要开发者参与。
但它至少提供了一种值得借鉴的方向:不要只想着让 AI 写更多代码,还应该让 AI 能够正确使用现有的软件工程体系。
对于正在探索 Vibe Coding、AI Agent 和自动化开发的开发者来说,这个项目值得研究。
项目地址: github.com/meta/astryx
官方文档: astryx.atmeta.com/