Astryx

facebook/astryx — Meta 由来の React + StyleX オープンソース Design System(Beta)。150+ コンポーネント、テーマ CSS、CLI を人と AI が同じ参照で使う。

1 — 概要

Astryx は Meta 内で 8 年かけて育った Design System をオープンソース化したもの。13,000+ アプリで使われてきた実績を持ち、ビルドプラグイン不要で pre-built CSS と型付き React コンポーネントを import するだけで導入できる。内部では StyleX でスタイルを書くが、利用者は Tailwind・CSS Modules・素の CSS など既存の className 上書きでスタイルロックインを避けられる。

150+コンポーネント
7公開テーマ
StyleX内部スタイル基盤
CLI人・AI 共通 IF

テーマは CSS カスタムプロパティの上書き集合として定義されるため、コンポーネントソースを fork せずにブランド差し替えができる。swizzle でコンポーネント全文をプロジェクトへ eject する深いカスタマイズも選べる。

人とエージェントの同一パス: API・ドキュメント・CLI は同じ設計で提供される。astryx search や --json エンベロープは、ターミナル操作とプログラム import の両方から同型の応答を返す。
2 — モノレポ構成

ルートは Node.js 22+ と pnpm 11(Corepack)で管理。公開 npm パッケージは packages/、検証用アプリは apps/、eslint プラグインや vibe-tests などは internal/ に分かれる。

astryx/
├── packages/
│   ├── core/      # @astryxdesign/core
│   ├── cli/       # @astryxdesign/cli
│   ├── build/     # StyleX ビルドプラグイン
│   ├── themes/    # @astryxdesign/theme-*
│   ├── lab/       # 実験コンポーネント(内部利用)
│   ├── vega/      # Vega / Vega-Lite(@canary)
│   └── charts/    # D3 ベースのチャート(@canary)
├── apps/
│   ├── docsite/   # 公式ドキュメント
│   ├── storybook/ # コンポーネントカタログ
│   ├── sandbox/   # テーマ・トークン検証
│   └── example-*  # Next.js / Vite 各種例
└── internal/
    ├── eslint-plugin-astryx/
    └── vibe-tests/  # ビジュアル/a11y 評価
3 — レイヤーアーキテクチャ

Foundations

タイポグラフィ、カラー、レイアウト、アクセシビリティの土台。テーマトークンと CSS レイヤー(reset → base → theme)で一貫性を保つ。

Components

150+ の再利用可能 UI 部品。命名・props・合成ルールが統一され、型とドキュメントがセットで公開される。

Patterns

テーブルページ、詳細レイアウト、フォームウィザードなど実戦的なページパターン。astryx template でソース注入できる。

flowchart TB
  subgraph consumer["利用者アプリ"]
    APP["React ページ"]
  end
  subgraph css["CSS レイヤー(import 順固定)"]
    R["reset.css
@layer reset"] B["astryx.css
@layer astryx-base"] T["theme.css
@layer astryx-theme"] R --> B --> T end subgraph runtime["ランタイム"] TH["Theme プロバイダ"] CMP["@astryxdesign/core コンポーネント"] TH --> CMP end subgraph tooling["CLI / JSON API"] CLI["astryx search / component / template"] JSON["--json エンベロープ"] CLI --- JSON end APP --> css APP --> runtime tooling -.->|"docs / scaffold"| APP

利用者は StyleX を意識しない。作者側だけ StyleX でコンポーネントを実装し、利用者には pre-built CSS と React API だけが見える。

4 — パッケージ一覧
パッケージ役割備考
@astryxdesign/core コンポーネント、テーマシステム、ユーティリティ reset.css / astryx.css / Theme プロバイダ
@astryxdesign/cli コンポーネント docs、テンプレート、scaffold、codemod devDependency。JSON API と programmatic import あり
@astryxdesign/build StyleX ソースビルド用プラグイン(Babel / PostCSS / Vite) コア利用だけなら不要
@astryxdesign/theme-* 7 種の完成テーマ CSS neutral, butter, chocolate, matcha, stone, gothic, y2k
@astryxdesign/lab 実験コンポーネント Storybook・sandbox の内部利用。npm 未公開
@astryxdesign/vega / charts Vega / Vega-Lite ラッパー、D3 ベースのチャート @canary dist-tag のみ。安定版は未公開
5 — CLI / JSON API

@astryxdesign/cli は Design System の一次インターフェース。初回や単発実行は、同名の別 npm パッケージを避けるため npx @astryxdesign/cli を使う。devDependency に追加した後は npx astryx または pnpm exec astryx へ短縮できる。コンポーネント名が分からないときは astryx search が component / hook / doc / template を横断検索し、続くコマンドを結果に付ける。

コマンド用途
astryx search <query>横断検索(関連度順、ドメインタグ付き)
astryx component Buttonprops・使用例・ソースを出力
astryx hook useMediaQueryhooks の一覧とリファレンスを出力
astryx docs tokensspacing / color / typography 等の参照
astryx template dashboardページ / ブロックテンプレート注入
astryx swizzle Buttonコンポーネントソースをプロジェクトへ eject
astryx theme build <file>defineTheme ファイルを CSS / JS へコンパイル
astryx discover <query>外部パッケージとコンポーネントを探索
astryx initパッケージ導入・テーマ・エージェント向け docs セットアップ
astryx upgrade --applyバージョン間 codemod
astryx doctorセットアップ診断(CI 向け exit code)

JSON エンベロープ

全コマンドに --json を付けると { type, data } 形式で返る。エラーは code フィールド(例: ERR_UNKNOWN_COMPONENT)で機械判定し、人間向け error 文字列には依存しない。

{"type": "component.detail", "data": {"name": "Button", ...}}

{"error": "No component named \"Buttn\"",
 "code": "ERR_UNKNOWN_COMPONENT",
 "suggestions": [{"name": "Button", "reason": "similar name"}]}

グローバルオプション: --detail brief|compact|full、--dense(トークン効率)、--lang en|zh|dense。

6 — クイックスタート
Step 1
パッケージ導入
core + テーマ + dev の cli を install。AI や新規参加者向けに package.json に astryx スクリプトを足すとパス問題を避けやすい。
Step 2
CSS 3 枚 import
順序固定: reset.css → astryx.css → theme.css。PostCSS / Babel 設定は不要。
Step 3
Theme プロバイダ
Theme に built テーマオブジェクトを渡し、必要なら LinkProvider でルーティング連携。
Step 4
CLI で参照
初回は npx @astryxdesign/cli component Button、導入後は npx astryx template --list で参照・ページ骨格から着手。
# install
npm install @astryxdesign/core @astryxdesign/theme-neutral
npm install -D @astryxdesign/cli

# globals.css(順序がカスケード契約)
@import '@astryxdesign/core/reset.css';
@import '@astryxdesign/core/astryx.css';
@import '@astryxdesign/theme-neutral/theme.css';
'use client';
import { Theme } from '@astryxdesign/core/theme';
import { neutralTheme } from '@astryxdesign/theme-neutral/built';

export function Providers({ children }: { children: React.ReactNode }) {
  return <Theme theme={neutralTheme}>{children}</Theme>;
}

Vite・Tailwind 併用・CDN 配布などフレームワーク別手順は @astryxdesign/core の README Quick Start を参照。

7 — 設計原則
  • Guidance over enforcement — コンポーネントは能力を提供し、渡した値はそのまま描画する。設計上の意見は docs と example に置く。
  • Strong, documented conventions — 命名・props・合成ルールが全コンポーネントで統一。少数を覚えれば未知の部品も予測しやすい。
  • One system for humans and AI — API・docs・CLI を同時に設計。AI 向け改善は人間向け UX 改善と同型。
  • Earned by measurement — 規約は断言ではなくテストで検証し、状況が変われば見直す。
スタイル上書き: 内部 StyleX は利用者に露出しない。className で Tailwind 等を併用でき、テーマは CSS 変数上書きだけでブランド化できる。

出典: README.md · packages/core/README.md · packages/cli/README.md · packages/{lab,vega,charts}/package.json(source snapshot: d762f825, 2026-07-22)