Astryx
facebook/astryx — Meta 由来の React + StyleX オープンソース Design System(Beta)。150+ コンポーネント、テーマ CSS、CLI を人と AI が同じ参照で使う。
Astryx は Meta 内で 8 年かけて育った Design System をオープンソース化したもの。13,000+ アプリで使われてきた実績を持ち、ビルドプラグイン不要で pre-built CSS と型付き React コンポーネントを import するだけで導入できる。内部では StyleX でスタイルを書くが、利用者は Tailwind・CSS Modules・素の CSS など既存の className 上書きでスタイルロックインを避けられる。
テーマは CSS カスタムプロパティの上書き集合として定義されるため、コンポーネントソースを fork せずにブランド差し替えができる。swizzle でコンポーネント全文をプロジェクトへ eject する深いカスタマイズも選べる。
astryx search や --json エンベロープは、ターミナル操作とプログラム import の両方から同型の応答を返す。
ルートは 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 評価
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 だけが見える。
| パッケージ | 役割 | 備考 |
|---|---|---|
@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 のみ。安定版は未公開 |
@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 Button | props・使用例・ソースを出力 |
astryx hook useMediaQuery | hooks の一覧とリファレンスを出力 |
astryx docs tokens | spacing / 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。
core + テーマ + dev の cli を install。AI や新規参加者向けに package.json に astryx スクリプトを足すとパス問題を避けやすい。reset.css → astryx.css → theme.css。PostCSS / Babel 設定は不要。Theme に built テーマオブジェクトを渡し、必要なら LinkProvider でルーティング連携。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 を参照。
- Guidance over enforcement — コンポーネントは能力を提供し、渡した値はそのまま描画する。設計上の意見は docs と example に置く。
- Strong, documented conventions — 命名・props・合成ルールが全コンポーネントで統一。少数を覚えれば未知の部品も予測しやすい。
- One system for humans and AI — API・docs・CLI を同時に設計。AI 向け改善は人間向け UX 改善と同型。
- Earned by measurement — 規約は断言ではなくテストで検証し、状況が変われば見直す。
className で Tailwind 等を併用でき、テーマは CSS 変数上書きだけでブランド化できる。
- GitHub — facebook/astryx
- 公式ドキュメント
- Component Storybook
- Sandbox
- README.md
- @astryxdesign/core README(Quick Start)
- @astryxdesign/cli README
- StyleX
出典: README.md · packages/core/README.md · packages/cli/README.md · packages/{lab,vega,charts}/package.json(source snapshot: d762f825, 2026-07-22)