An "Agent-Ready" unified design system open-sourced by Meta under the MIT license on June 18, 2026 Official site: astryx.atmeta.com | GitHub: facebook/astryx | Currently Beta (v0.1.x)
One-line summary: Meta open-sourced the design system it uses internally. It's not just a UI library — it extends into components + themes + templates + CLI + MCP server, letting small startups achieve consistent UX without a designer. In short, it's great.
1. What Is Astryx?
Astryx is Meta's largest internal design system — refined over 8 years and powering 13,000+ internal apps — rebuilt on React + StyleX and released publicly. It's not just a UI library but a combination of components + themes + templates + CLI + MCP server working as a single system, designed from the ground up so humans and AI coding agents build UI the same way, off the same reference.
| Item | Details |
|---|---|
| Release date | June 18, 2026 (Beta) |
| License | MIT |
| Underlying tech | React, StyleX (Meta's compile-time CSS engine), TypeScript |
| Component count | 150+ (accessibility and dark mode built in by default) |
| Public themes | 7 npm packages (neutral, butter, chocolate, matcha, stone, gothic, y2k) |
| Track record | 8 years inside Meta, 13,000+ apps, roughly half of updates contributed by the internal builder community |
| Build requirements | None — pre-built CSS provided, no PostCSS/Babel plugins needed |
2. Key Features
2.1 Agent-Ready / AI-Fluent Design
- All components follow the same naming, prop, and composition conventions, so learning a handful lets both humans and AI predict the behavior of the rest
- The CLI returns a self-describing JSON manifest — AI agents read a structured command system directly instead of scraping help text
- Built-in MCP (Model Context Protocol) server — lets agents like Claude, Cursor, and Copilot query the component API and scaffold programmatically
- The repository includes a
CLAUDE.md, and runningnpx astryx initautomatically sets up AI-agent documentation in your project
2.2 Full Customization Without Vendor Lock-In
| Customization layer | Method |
|---|---|
| Design Token | A theme is a set of CSS custom property overrides. Change color, typography, radius, and motion at the token level to restyle every component with zero component code changes |
| Styling Override | Internally StyleX, but invisible to consumers. Override via className using Tailwind, CSS Modules, or plain CSS |
| Swizzle (Eject) | npx astryx swizzle Button — extracts the full component source into your project for direct ownership and modification. You own only what you swizzled; everything else keeps receiving upstream updates |
| Open Internals | Every primitive is exported and composable at any level. Nothing is locked behind a closed top-level API |
2.3 Three-Layer Architecture
| Layer | Components | Role |
|---|---|---|
| Foundations | Typography, Color, Layout, Accessibility | The basis for visual consistency and accessibility |
| Components | 150+ TypeScript components | Reusable UI building blocks (Button, Modal, DataTable, Form Wizard, etc.) |
| Patterns / Templates | Table Page, Detail Page, Form Wizard, Navigation, Data Entry Flow | Proven page-level design solutions — scaffold full source via CLI |
2.4 Other Technical Features
- Context-aware spacing compensation: the system automatically corrects the double-padding problem caused by nested components — a key differentiator from other design systems
- Guidance over enforcement: design opinions live only in docs and examples. Pass any value and the component renders as-is (guardrails don't fight the developer)
- Two deployment approaches: (1) use pre-built stylesheet imports only, or (2) build StyleX from source (
@astryxdesign/build)
3. Installation and Initial Setup
3.1 Package Installation
# npm
npm install @astryxdesign/core @astryxdesign/theme-neutral
npm install -D @astryxdesign/cli
# pnpm
pnpm add @astryxdesign/core @astryxdesign/theme-neutral
pnpm add -D @astryxdesign/cli
For reliable CLI usage, it's recommended to register a script in package.json (this avoids path errors when AI agents or new developers invoke the CLI):
"scripts": {
"astryx": "node node_modules/@astryxdesign/cli/bin/astryx.mjs"
}
3.2 CSS Setup (Next.js + Tailwind — the Simplest Path)
Pre-built CSS coexists with Tailwind with no build plugins required.
/* src/app/globals.css */
@layer reset, theme, base, astryx-base, astryx-theme, components, utilities;
@import 'tailwindcss/theme.css' layer(theme);
@import 'tailwindcss/preflight.css' layer(base);
@import '@astryxdesign/core/reset.css';
@import '@astryxdesign/core/astryx.css';
@import '@astryxdesign/theme-neutral/theme.css';
@import '@astryxdesign/core/tailwind-theme.css';
@import 'tailwindcss/utilities.css' layer(utilities);
tailwind-theme.css bridges XDS tokens into Tailwind utilities:
| Tailwind class | XDS token |
|---|---|
text-primary / text-secondary |
--color-text-primary / --color-text-secondary |
bg-surface / bg-card / bg-body |
--color-background-* |
rounded-sm / md / lg |
--radius-inner / element / container |
shadow-sm / md / lg |
--shadow-low / med / high |
3.3 Theme Provider Setup
// src/app/providers.tsx
'use client';
import Link from 'next/link';
import {Theme} from '@astryxdesign/core/theme';
import {LinkProvider} from '@astryxdesign/core/Link';
import {neutralTheme} from '@astryxdesign/theme-neutral/built';
export function Providers({children}: {children: React.ReactNode}) {
return (
<Theme theme={neutralTheme}>
<LinkProvider component={Link}>{children}</LinkProvider>
</Theme>
);
}
// src/app/layout.tsx
import './globals.css';
import {Providers} from './providers';
export default function RootLayout({children}: {children: React.ReactNode}) {
return (
<html lang="en">
<body>
<Providers>{children}</Providers>
</body>
</html>
);
}
3.4 Using Your First Component
import {Button} from '@astryxdesign/core/Button';
export default function Page() {
return <Button label="Hello XDS" variant="primary" />;
}
Components use per-path imports (@astryxdesign/core/Button), and the whole system follows consistent prop conventions — for example, Button takes a label prop instead of children. With Vite, the same CSS import + Provider setup applies and no separate build plugin is needed.
4. Usage Examples
4.1 Using the CLI
npx astryx --help # full command list
npx astryx init # initialize project (auto-sets up AI agent docs)
npx astryx component Button # full component docs + related block templates
npx astryx template --list # full list of page/block templates
npx astryx template dashboard # generate full source for a dashboard page
npx astryx template settings --skeleton # layout skeleton (with spacing annotations)
npx astryx docs # reference docs (principles, tokens, themes, styling)
npx astryx docs tokens # spacing/color/radius/typography token reference
npx astryx docs theme # theming guide (Theme, defineTheme, light/dark)
npx astryx theme build # build production theme CSS
npx astryx swizzle Button # eject component source
npx astryx upgrade --apply # run migration codemods between versions
npx astryx gap-report # report missing features
Component docs can also be queried directly from the core package without the CLI:
node node_modules/@astryxdesign/core/docs.mjs Button # full docs for a specific component
node node_modules/@astryxdesign/core/docs.mjs --list --brief # brief summary of all components
4.2 Swizzle Workflow
# 1. Extract the real component source into your repo
npx astryx swizzle Button
// 2. Import the local copy instead of the package
import {Button} from './components/Button';
The ejected source can be freely modified, while the remaining un-customized components continue to receive package updates.
4.3 Quickly Getting Started with Page Templates
Templates use a content-only structure, providing dashboard, settings, form, and detail page patterns that combine header/content/panel slots within XDSLayout. Global navigation is added by wrapping with XDSAppShell, XDSTopNav, or XDSSideNav.
npx astryx template dashboard # -> generates the full dashboard page source in your project
4.4 AI Agent Integration (MCP)
Running npx astryx init sets up AI-agent documentation for the project, and the MCP server lets Claude Code, Cursor, and similar agents query the component API, tokens, and templates in structured form directly. Rather than agents inventing arbitrary CSS wrappers, they generate UI conforming to brand guidelines based on the system's machine-readable manifest — dramatically reducing style fragmentation in AI-generated code and UI debugging time.
5. How Startups Can Use It
5.1 Why It Fits Startups
| Startup problem | Astryx's solution |
|---|---|
| No designer / limited design resources | Meta's 8-year-validated components + 7 themes -> brand it by changing tokens alone. Accessibility and dark mode are built in, no separate investment needed |
| "Adopting a big-tech system makes us look like someone else's brand" | Themes are CSS variable overrides, so you can fully transform it into your own brand without forking or wrapping |
| Maintenance debt from copy/paste component collections | Upstream fix/upgrade path is preserved (astryx upgrade --apply codemods). You only own what you've swizzled |
| Small teams heavily reliant on AI coding tools | Agents read the system directly via MCP/CLI, structurally guaranteeing consistency in vibe-coded output |
| Licensing cost | MIT — unlimited free use in commercial products |
5.2 Phased Adoption Roadmap
Phase 1 — MVP (Day 1-7)
npm install+ CSS import +<Theme>Provider — up and running instantly with zero build config- Pick a template matching your product type from
npx astryx template --list(dashboard, settings, form, etc.) - Use the default theme (neutral) as-is and focus on product logic — UI starts from an "80% done" state
Phase 2 — Branding (Week 2-4)
- Understand the token structure via
npx astryx docs tokens - Define your own theme (
defineTheme) by overriding brand colors, typography, and radius as CSS custom properties - Generate production theme CSS via
npx astryx theme build— not a single line of component code changes
Phase 3 — Differentiation (Month 2+)
swizzle-eject only the components on screens that need a competitive edge, for deep customization- Keep the rest tracking upstream -> minimize maintenance debt
- Use
astryx gap-reportto request needed features upstream or contribute them directly
AI-Native Development Practice (in parallel across all phases)
- Set up agent docs + connect the MCP server via
npx astryx init - Delegate tasks like "build a payment settings page based on the Astryx template" to Claude Code / Cursor
- The agent reads the manifest and generates code that follows the system's rules -> reducing review costs
5.3 Usage Scenarios by Startup Type
| Type | Usage |
|---|---|
| B2B SaaS | Build admin/analytics screens in days using dashboard/table page/settings templates. Complex components like DataTable and Form Wizard are already battle-tested |
| Fintech / Web3 | Built-in accessibility and dark mode ease regulatory/audit burden. Token-based theming supports multi-brand (white-label) scenarios |
| Agencies / contract development | Swap only the client-specific theme package to ship multiple projects from the same codebase — shortens delivery time |
| AI-native products | Use the Astryx manifest as a grounding source for products where an LLM dynamically generates UI — ensures generated-UI consistency |
| Internal tools | Astryx originates from Meta's own internal tools — the most battle-tested use case for ops dashboards and back offices |
5.4 Pre-Adoption Checklist (Risks)
- Beta stage (v0.1.x): early for a public project; breaking changes are possible, so include the
astryx upgrade --applycodemod path in CI - React only: not suitable for a Vue/Svelte stack
- Component count discrepancy: the GitHub README says 150+, the docs site says 160+ — check the actual count needed via
npx astryx component --list - Unreleased packages:
@astryxdesign/lab(experimental components) and@astryxdesign/vega(chart wrapper) aren't published to npm yet — products where charts are core need a separate chart library alongside - Community maturity: at 3 weeks post-launch, GitHub has 6.3k stars and 140+ issues — the ecosystem (third-party extensions, tutorials) is still thinner than shadcn/ui or MUI
6. Summary
Astryx's core value comes down to three things:
- Battle-tested breadth — 150+ components and page patterns refined over 8 years and 13,000+ apps at Meta
- Lock-in-free customization — three degrees of freedom from token theming to className overrides to swizzle ejection, all under MIT
- Human-AI shared design — a CLI JSON manifest and MCP server let humans and agents build from the same reference
For startups, it can be summarized as a tool that lets you "hand 80% of your UI to a battle-tested system and focus the remaining 20% on differentiation and business logic." That said, since it's still in Beta, it's safer to secure the upgrade codemod path and pre-validate core dependent components before adopting.
References
- Official site: https://astryx.atmeta.com
- Intro blog: https://astryx.atmeta.com/blog/introducing-astryx
- Technical background: https://astryx.atmeta.com/blog/how-astryx-works
- GitHub: https://github.com/facebook/astryx
- Component Storybook: https://facebook.github.io/astryx/
- StyleX: https://stylexjs.com