Astryx:React 19+可定制的150+组件设计系统
给React 19+团队用的150+组件设计系统,能改主题和源码,不锁定样式方案。
GitHub meta/astryx 更新 2026-11-08 分支 main 星标 14.5K 分叉 1.2K
React 19+ TypeScript StyleX 设计系统 CLI CSS Custom Properties

🧭 决策指南

适合,如果你

  • 你在React 19+项目中需要150+个带TypeScript支持的可访问组件。
    README 的Overview和Architecture/Components章节写明支持React 19+并提供150+ reusable UI building blocks。
  • 你希望继续使用Tailwind、CSS Modules或原生CSS,而不是采用新的样式库。
    README 的What makes Astryx different说明可通过className使用Tailwind、CSS modules或plain CSS覆盖样式。
  • 你需要通过CSS custom properties实现品牌主题和dark mode,且不想fork组件源码。
    README 的Overview和Customize without wrapping说明提供brand-level theming、dark mode,并用CSS custom property overrides定制。
  • 你的团队希望开发者和AI助手使用同一套CLI、API和文档约定。
    README 的Built for people and agents及One system for humans and AI章节明确描述这一设计目标。

不适合,如果你

  • 你的应用仍运行在React 18或更早版本,无法满足React 19+前置条件。
    README 的Getting Started写明Astryx requires React 19 or later。
  • 你需要稳定版的Vega/Vega-Lite图表封装或charts组件。
    README 的Packages章节写明@astryxdesign/vega和@astryxdesign/charts仅在@canary dist-tag下发布,没有stable release。
  • 你计划直接安装@astryxdesign/lab中的实验组件。
    README 的Packages章节写明@astryxdesign/lab用于Storybook和sandbox,且not published to npm。
  • 你的生产选型必须避开Beta项目和较小维护团队。
    项目基础信息标注维护贡献者10人、版本发布5个;README同时标注Currently in Beta。

前置条件

  • React 19或更高版本,且react和react-dom是@astryxdesign/core的peer dependencies;React 19 or later is required, with react and react-dom as peer dependencies of @astryxdesign/core.
  • 安装@astryxdesign/core、@astryxdesign/theme-neutral和@stylexjs/stylex;Install @astryxdesign/core, @astryxdesign/theme-neutral, and @stylexjs/stylex.
  • 如需项目CLI,安装开发依赖@astryxdesign/cli;For project CLI usage, install @astryxdesign/cli as a development dependency.
  • 贡献仓库要求Node 22+ active LTS line和pnpm 11;Repository contribution requires Node 22+ on an active LTS line and pnpm 11.

第一步命令(README 原文)

npm install @astryxdesign/core @astryxdesign/theme-neutral @stylexjs/stylex

要注意

  • 直接调用全局astryx可能遇到路径问题,README建议加入package.json脚本。
    README 的Getting Started说明npm run astryx -- component --list可避免AI助手或新开发者直接调用CLI时的path errors。
  • 不要把@astryxdesign/lab当作可安装的npm稳定包。
    README 的Packages章节说明@astryxdesign/lab is not published to npm。
  • 图表相关包使用@canary而非稳定版本,版本稳定性边界不同。
    README 的Packages章节说明@astryxdesign/vega和@astryxdesign/charts仅在@canary dist-tag下发布。
  • 仓库贡献开发环境不是常规Node版本,要求Node 22+和pnpm 11。
    README 的Contributing章节明确写明Node 22+ on an active LTS line和pnpm 11。

材料未说明

  • README未说明浏览器支持范围;Browser support is not specified in the README.
  • README未给出150+组件的完整清单、单包体积或运行时性能数据;The README does not provide the complete 150+ component list, package size, or runtime performance data.
  • README未说明React 19之外的Next.js、Vite、Tailwind集成版本矩阵;The README does not specify version matrices for Next.js, Vite, or Tailwind integrations beyond mentioning them.
  • README未给出Beta阶段的破坏性变更策略和长期支持周期;The README does not state a breaking-change policy or long-term support window for the Beta phase.
  • README未说明150+组件的自动化可访问性测试覆盖范围;The README does not specify automated accessibility test coverage for the 150+ components.

💡 深度解析

6
不适合 我维护的是 React 18 管理后台,当前无法升级到 React 19;即使只想使用 Astryx 的表格、表单和导航组件,我能否按 README 的方式直接接入?
适合读者: 维护 React 18 管理后台、暂时无法升级 React 版本、但希望直接采用 150 多个 TypeScript UI 组件的前端团队成员

不适合直接接入,因为 README 把 React 19 设为明确的运行前提,而不是可选的推荐版本。

  • Astryx 要求 React 19 或更高版本。
  • @astryxdesign/core 将 react 和 react-dom 声明为 peer dependencies,React 18 不满足 README 的安装契约。
  • 管理后台所需的表格页、表单流程和导航模式虽然属于 Astryx 的 Patterns 范围,但组件数量或使用范围不会绕过 React 版本边界。
  • 项目当前仍处于 Beta,README 也没有提供 React 18 兼容包、降级适配层或官方迁移方案。

因此,当前约束下不能把“只使用少量组件”当成兼容路径。是否能够升级,还需要结合现有 Next.js、构建工具、第三方组件和应用级依赖单独评估;这些迁移影响 README 没有展开。

  • README 开头:"Currently in Beta · Built on React 19+"
  • Getting Started:"Astryx requires React 19 or later"
  • Getting Started:"react and react-dom are peer dependencies of @astryxdesign/core"
  • Architecture:Patterns 覆盖 "table pages, detail page layouts, form wizards, navigation patterns, data entry flows"
材料未说明:README 未说明 React 18 下是否存在非官方可行方案。;README 未提供从 React 18 升级到 React 19 时对现有依赖和应用代码的迁移清单。
不适合 我正在用 React 19 做生产级数据产品,关键页面依赖 Vega、Vega-Lite 或 Astryx charts;由于团队要求生产依赖必须有稳定版本,我现在能否把这些包作为正式基础设施采用?
适合读者: 正在用 React 19 构建生产级数据产品、需要 Vega/Vega-Lite 或 Astryx charts 完成关键可视化、并要求依赖拥有稳定发布版本的数据工程师

不适合把这些图表包直接当作稳定生产基础设施,因为 README 明确说明它们目前只有 canary 发布渠道,没有 stable release。

  • @astryxdesign/vega 是 Vega/Vega-Lite chart wrapper,@astryxdesign/charts 是图表组件包。
  • 两者只发布在 @canary dist-tag 下,README 明确写着“there is no stable release yet”。
  • 项目整体也处于 Beta,意味着即使 core 和 theme 较成熟,不能把实验性图表能力等同于稳定核心包。
  • README 将实验性 @astryxdesign/lab 与稳定发布包区分开,说明项目有意保留这条稳定性边界。

如果只是需要 Astryx 的基础 UI、表格页面和数据录入流程,可以采用 core 与稳定主题,再单独选择图表方案;但当前资料没有给出 canary 包的 API 稳定承诺、升级策略、性能指标或生产支持范围。

  • README 开头:"Currently in Beta"
  • Packages:"@astryxdesign/vega ... and @astryxdesign/charts ... only under the @canary dist-tag"
  • Packages:"there is no stable release yet"
  • Packages:"@astryxdesign/lab (experimental components)"
材料未说明:README 未说明 canary 图表包的 API 稳定性承诺、性能指标和生产支持范围。;README 未提供从 canary 包升级到 stable 版本时的迁移策略。
适合 我正在用 React 19 和 Next.js 构建中大型应用,现有项目已经使用 Tailwind;我能否接入 Astryx,同时避免迁移到 StyleX 或新增 PostCSS、Babel 构建配置?
适合读者: 正在用 React 19、Next.js 和 Tailwind 构建中大型 Web 应用、希望复用现有样式体系而不引入新的样式库的前端工程师

适合,因为 Astryx 的内部样式实现与消费者解耦,React 19、Next.js 和 Tailwind 都在 README 的接入范围内。

  • 项目要求 React 19 或更高版本,core 将 react 和 react-dom 作为 peer dependencies。
  • 作者使用 StyleX,但消费者可以通过 className 使用 Tailwind、CSS Modules 或普通 CSS。
  • 基础接入使用预构建 CSS、主题包和 React 组件,不需要配置 build plugin、PostCSS 或 Babel。
  • README 明确把 Next.js、Tailwind、Vite 和 CDN 列为完整 Quick Start 的覆盖场景。

需要注意的是,项目仍处于 Beta;README 没有给出你的具体 Next.js 版本、Tailwind 版本及现有 CSS 优先级冲突的兼容矩阵,因此不能仅凭文档保证所有覆盖规则都无冲突。

  • Getting Started:"Astryx requires React 19 or later"
  • Overview:"Override with className using Tailwind, CSS modules, or plain CSS"
  • Getting Started:"no build plugin, no PostCSS or Babel config"
  • Getting Started:"full guide (Next.js, Tailwind, Vite, and CDN)"
npm install @astryxdesign/core @astryxdesign/theme-neutral @stylexjs/stylex
材料未说明:README 未说明具体 Next.js、Tailwind 版本的兼容矩阵。;README 未说明现有 CSS 的选择器优先级和加载顺序与 Astryx 主题变量同时使用时的全部冲突规则。
适合 我正在用 React 19 开发企业产品,需要品牌级主题、深色模式和统一的颜色与间距变量;我能否在不复制或包装组件源码的情况下完成定制?
适合读者: 需要为企业产品统一品牌色、深色模式和组件视觉令牌、同时希望保留七套现成主题作为起点的 React 19 产品工程师

适合,Astryx 的主题模型正是为品牌级覆盖和深色模式设计的,并不要求先复制组件源码。

  • README 明确提供 brand-level theming 和 dark mode。
  • 主题本质上是一组 CSS custom property overrides,适合集中替换颜色、间距等设计令牌。
  • 项目提供 neutral、butter、chocolate、matcha、stone、gothic、y2k 七套现成主题,可作为品牌定制的起点。
  • README 的“Customize without wrapping”说明,设计师可以在不 fork 或 wrapper 组件源码的情况下改变视觉表现。

不过,主题变量的具体命名、覆盖范围、深色模式切换 API 以及业务 CSS 的优先级处理没有在主 README 中完整列出。若品牌需求超出令牌覆盖范围,仍可能需要 className 覆盖或 swizzle,这会改变维护责任。

  • Overview:"brand-level theming, dark mode"
  • What makes Astryx different:"A theme is a set of CSS custom property overrides"
  • Packages:"Seven ready-made, fully customizable themes (neutral, butter, chocolate, matcha, stone, gothic, y2k)"
  • What makes Astryx different:"Customize without wrapping"
npm install @astryxdesign/core @astryxdesign/theme-neutral @stylexjs/stylex
材料未说明:主 README 未完整列出主题变量名称、覆盖范围和深色模式切换 API。;README 未说明业务 CSS 与主题变量同时存在时所有选择器优先级和加载顺序规则。
适合 我带领一个使用 React 19 的团队,代码经常由 AI 编程助手和新成员共同修改;我能否让他们使用同一套 Astryx CLI、组件命名约定和文档入口,而不是依赖各自机器上的全局版本?
适合读者: 让 AI 编程助手和新加入成员共同开发 React 19 产品、希望固定项目内 CLI 版本并查询组件文档和列表的前端负责人

适合,Astryx 将 API、文档和 CLI 作为同一套面向人和 AI 的开发入口,并且 README 给出了项目级 CLI 的固定调用方式。

  • 项目强调 people and agents 使用相同 tooling、API、命名、属性和组合约定。
  • CLI 覆盖组件文档、组件列表、模板、脚手架、主题和 codemod,适合作为统一发现与迁移入口。
  • README 建议把本地 CLI 写入 package.json,以避免 AI 助手或新开发者直接调用时出现路径错误。
  • 项目安装时使用 node_modules 中的 CLI 版本,因此比仅安装全局 CLI 更容易保持仓库内版本一致。

但 README 没有说明 CI 中的 CLI 版本锁定策略、不同 CLI 版本之间的兼容保证,也没有量化 AI 生成代码的正确率;“agent ready”是设计目标,不是效果承诺。

  • Overview:"both people and AI assistants build with the same tooling"
  • Packages:CLI 提供 "component docs, templates, scaffolding, themes, and codemods"
  • Getting Started:"For reliable CLI access, add a script to your package.json"
  • Getting Started:"This avoids path errors when AI assistants or new developers invoke the CLI directly"
npm run astryx -- component --list
材料未说明:README 未说明 CI 中如何锁定 CLI 版本及不同版本的兼容保证。;README 未提供 AI 生成代码正确率、返工率或团队效率的量化数据。
视情况 我使用 React 19 和 TypeScript,业务里有现有设计系统无法覆盖的特殊交互;如果我需要直接修改组件内部实现,Astryx 的 swizzle 是否比长期包装和覆盖 className 更合适?
适合读者: 需要深度改造 React 19 业务组件、现有设计系统无法覆盖特殊交互、但仍希望从 Astryx 的可访问组件和 TypeScript API 起步的前端架构师

视情况:当需求确实需要改变组件内部行为时,swizzle 提供了直接接管源码的路径;但它会把上游升级、无障碍修复和后续维护转移给你的团队。

  • Astryx 的组件支持开放式组合,基础 building blocks 可直接使用,不只暴露封闭的高层 API。
  • README 明确说明 swizzle 会把组件完整源码导出到项目中,让团队自行拥有和维护。
  • 组件具备完整 TypeScript 支持,并强调可访问性设计,接管源码后这些能力的后续同步不能自动假定完成。
  • 项目原则是 guidance over enforcement;如果只是视觉覆盖或组合变化,className、主题变量和深层组合可能比源码分叉更轻。

因此,内部行为必须改变时可以考虑 swizzle;仅为品牌样式或局部布局改动则不必立即接管源码。README 没有说明 swizzle 的命令、生成目录、升级 diff 工具或上游合并流程。

  • What makes Astryx different:"Open internals"
  • What makes Astryx different:"swizzle ejects a component's full source into your project to own"
  • Architecture:"150+ reusable UI building blocks with full TypeScript support"
  • Principles:"Guidance over enforcement"
材料未说明:README 未提供 swizzle 的具体命令、生成目录和源码接管后的升级流程。;README 未说明 swizzle 后如何自动同步上游无障碍修复或安全修复。

✨ 核心亮点

  • 提供150+个支持TypeScript的可访问组件
  • 支持Tailwind、CSS Modules和原生CSS覆盖
  • 用CSS自定义属性实现品牌级主题和暗色模式
  • CLI、文档和API同时面向开发者与AI助手
  • 当前仍处于Beta,最新版本为Astryx v0.7.11

🔧 工程化

  • 提供core、cli、build和七套theme-*发布包
  • CLI覆盖组件文档、模板、脚手架、主题和codemods
  • 通过swizzle导出组件完整源码到项目中维护
  • 无需构建插件即可导入预构建CSS和typed React组件

⚠️ 风险

  • 项目明确标注Beta,版本发布仅5个且贡献者为10人
  • @astryxdesign/lab仅内部使用,未发布到npm
  • Vega和charts仅有@canary版本,没有稳定发布
  • 运行要求React 19+,旧版React项目不能直接满足前置条件

👥 适合谁?

  • 使用React 19+并需要TypeScript组件库的产品团队
  • 希望用Tailwind或CSS Modules继续管理样式的前端团队
  • 需要品牌主题、暗色模式和150+组件的应用团队
  • 希望让AI助手复用CLI、API和文档约定的团队