Ein erster Blick auf Astryx, das Design-System von Meta
Astryx, Metas Open-Source-Designsystem, bietet über 150 React-Komponenten, Themes, CLI-Setup, Anpassungsstufen und den Vergleich mit shadcn/ui und Base UI.
Astryx ist Metas Open-Source-Neuaufbau des Design-Systems, das intern im Unternehmen gewachsen ist. Angekündigt wurde es am 18. Juni 2026 im Astryx-Blog und als Public Beta unter der MIT-Lizenz veröffentlicht – mit mehr als 150 barrierefreien React-Komponenten, sieben fertigen Themes, Templates und einer CLI, aufbauend auf React 19 oder höher und StyleX.
Wer schon einmal mit MUI ausgeliefert hat, kennt die eine Variante des Kompromisses: Die Komponenten funktionieren, und anschließend verbringt man einen Sprint damit, gegen ein Theme-Objekt anzukämpfen, damit ein Button nicht länger wie der Button von jemand anderem aussieht. Wer den Quellcode von shadcn/ui besitzt, kennt die andere: vierzig Komponentendateien im eigenen Repository, vollständig in eigener Hand, ohne Upstream, aus dem sich ein Fix für das Focus-Management ziehen ließe.
Metas Argument lautet, dass Astryx genau dazwischen liegt. Die Feature-Liste ist schnell gefunden; was die Kosten einer Einführung tatsächlich bestimmt, ist die fünfstufige Anpassungsleiter und die Frage, auf welcher Stufe Ihr Team am Ende dauerhaft landet. Dieser Artikel behandelt, was Astryx ist, wie Sie es installieren und nutzen, wie Theming funktioniert, was Sie jede Stufe dieser Leiter kostet und wie es sich neben shadcn/ui und Base UI einordnet.
Die wichtigsten Erkenntnisse
- Astryx benötigt React 19 oder neuer, und
@astryxdesign/coreführtreact,react-domsowie@stylexjs/stylexals Peer Dependencies auf. - Astryx bietet zwei Distributionswege: Import der vorkompilierten Stylesheets oder Build aus dem TypeScript- und StyleX-Quellcode, sodass Ihr Bundler CSS nur für tatsächlich importierte Komponenten ausgibt.
- Die Anpassung eskaliert über fünf Stufen, und nur die letzte – das Swizzling des Komponenten-Quellcodes in Ihr Repository – nimmt Sie vom gemeinsamen Upgrade-Pfad.
- Komponenten akzeptieren sowohl eine typisierte
xstyle-Prop als auch ein einfachesclassName, und der vorkompilierte Weg ergänzt Ihren Build um nichts: kein Bundler-Plugin, kein PostCSS, keine Babel-Konfiguration. - Astryx ist weiterhin eine Public Beta auf 0.x-Releases ohne stabile Linie, wodurch API-Änderungen ein realer Kostenfaktor bleiben.
Was ist Astryx?
Astryx ist eine Komponentenbibliothek mit einem kompletten System drumherum: typisierte React-Komponenten, ausgeliefert zusammen mit vorkompiliertem CSS, dazu Theming auf Markenebene, Dark Mode, Seiten-Templates und eine CLI – alles verteilt als ein Satz von Paketen. Metas technischer Artikel stellt es als Open-Source-Neuaufbau eines Systems dar, das acht Jahre lang intern gewachsen ist, mehr als 13.000 Produkte erreichte und rund die Hälfte seiner Updates aus der dortigen Entwickler-Community bezog. Die Styles werden mit StyleX geschrieben, Metas Compiler, der Style-Objekte zur Build-Zeit in atomares, kollisionsfreies CSS übersetzt – relevant, wenn Ihr Einwand gegen CSS-in-JS die Laufzeitkosten sind: Im Browser läuft keine Style-Engine.
Die CLI ist der Ort, an dem der Großteil der Arbeit mit dem Projekt stattfindet – für Menschen wie für Maschinen. Komponenten-Dokumentation, Design-Tokens, Seiten-Templates, Theming-Werkzeuge und Upgrade-Codemods kommen alle von dort, egal ob Sie sie aus dem Terminal aufrufen, ihre typisierte JSON-Ausgabe auslesen oder ihre Funktionen importieren; Agenten und Build-Tools nutzen dieselbe API. Dass das Projekt sich selbst als „AI-fluent” und agentenfähig positioniert, ist Positionierung, kein gemessenes Ergebnis; für die von Meta beschriebene Evaluierungsumgebung sind in keinem der beiden Ankündigungsbeiträge Ergebnisse veröffentlicht.
Wie nutzt man Astryx konkret?
React 19 ist die Untergrenze: @astryxdesign/core führt react und react-dom ab Version 19.0.0 als Peer Dependencies auf. Das ist die erste Hürde. Die zweite ist der Reifegrad: @astryxdesign/core erscheint auf einer 0.x-Linie auf npm, und @astryxdesign/vega sowie @astryxdesign/charts liefern echte Builds nur unter dem @canary-Dist-Tag aus, während ihr latest-Tag weiterhin auf ein Platzhalter-Release zeigt.
Installieren Sie das Core-Paket, ein Theme-Paket und den StyleX-Peer, die CLI als Dev Dependency:
npm install @astryxdesign/core @astryxdesign/theme-neutral @stylexjs/stylex
npm install -D @astryxdesign/cli
npx @astryxdesign/cli init
Der init-Schritt schreibt den Komponentenindex von Astryx in Ihre AGENTS.md oder CLAUDE.md, was Sie überspringen können, wenn kein Agent das Repository anfasst. Auf dem einfachen Weg importieren Sie anschließend drei Stylesheets in dieser Reihenfolge und umschließen die Anwendung mit einem Theme-Provider:
@import '@astryxdesign/core/reset.css';
@import '@astryxdesign/core/astryx.css';
@import '@astryxdesign/theme-neutral/theme.css';
Nach Angaben des Repositorys selbst ist das die gesamte Einrichtung: die drei Imports, der Provider und keinerlei Änderungen an Ihrer Build-Toolchain. Der fortgeschrittene Weg baut aus dem TypeScript- und StyleX-Quellcode mithilfe von @astryxdesign/build, das die Babel-, PostCSS- und Vite-Plugins mitbringt, sodass der Bundler nur Styles für tatsächlich importierte Komponenten ausgibt. Meta beziffert diesen Weg in der eigenen Referenz-App auf etwa ein Drittel des vollständigen Stylesheets – das ist eine Messung an eigenem Code, keine allgemeingültige Regel. Jede Komponente wird über einen eigenen Subpath importiert, nicht über das Paket-Root.
Theming: Verhalten im System, Erscheinungsbild in Tokens
Astryx teilt die Verantwortung sauber auf. Verhalten und Barrierefreiheit liegen in der Bibliothek, das Erscheinungsbild in einer Token-Schicht. Eine Theme-Konfiguration enthält also Farbe, Typografie, Radien, Abstände und Motion, und das Ändern eines einzigen Werts restylt jede Komponente, die ihn liest, ohne dass jemand Komponentencode öffnen muss. Helle und dunkle Werte stehen nebeneinander im selben Theme statt in zwei parallelen Dateien, und ein Theme lässt sich zur Laufzeit wechseln oder zu einem statischen Stylesheet kompilieren. Themes gehen zudem über CSS-Variablen hinaus: Sie können einzelne Komponenten und Komponententeile überschreiben und eigene Varianten hinzufügen.
Sieben fertige Themes werden mit dem Projekt ausgeliefert, und Sie starten von einem davon statt bei null: theme list zeigt, was verfügbar ist – einschließlich Themes aus installierten Integrationen – und theme add <slug> legt das gewählte Theme als editierbaren Quellcode in Ihr Projekt. Das ist die Design-Wette in einem Satz: Der Designer besitzt eine Konfigurationsdatei, und niemand muss eine Komponente forken oder umhüllen, um ihr Aussehen zu ändern.
Der abgestufte Anpassungspfad
Die Anpassung in Astryx eskaliert über fünf Stufen: Komponenten wie ausgeliefert verwenden, Theme-Tokens anpassen, Klassennamen anhängen, eigenes CSS überlagern und schließlich den Quellcode einer Komponente ins eigene Repository swizzlen. Jede Stufe bringt mehr Kontrolle und kostet mehr Eigenverantwortung. Die ersten vier halten Sie auf dem gemeinsamen Upgrade-Pfad; die fünfte nimmt diese Komponente dauerhaft davon herunter.
| Stufe | Was Sie ändern | Was es Sie kostet |
|---|---|---|
| Wie ausgeliefert verwenden | Nichts | Nichts; Upgrades sind kostenlos |
| Theme-Tokens | Farbe, Typografie, Radien, Abstände, Motion | Eine Konfigurationsdatei, die Ihr Team pflegt |
| Klassennamen | Erscheinungsbild pro Instanz | Disziplin bei den Cascade Layers |
| Eigenes CSS | Alles, was die Layer-Reihenfolge zulässt | Selektoren, die beim Upgrade brechen können |
| Swizzling | Die Komponente selbst | Volle Wartung, dauerhaft |
Swizzling ist die Einbahnstraße. Manche Interna werden von der öffentlichen API schlicht nicht offengelegt – etwa privater State, DOM-Struktur oder Event-Listener, an die Sie nicht herankommen – und das Ejecten des Quellcodes ist der einzige Weg dorthin; ab diesem Punkt pflegen Sie die Komponente, nicht die Bibliothek. Die CLI ejected Komponenten-Quellcode und führt Versions-Codemods aus mit astryx swizzle Button und astryx upgrade --apply:
npx @astryxdesign/cli swizzle Button
Verwenden Sie für einmalige Aufrufe die Scoped-Form: Solange @astryxdesign/cli keine Dependency ist, löst npm ein bloßes astryx auf ein völlig anderes Paket auf. Der praktische Schritt vor einer Einführung von Astryx besteht darin, Ihre zwei oder drei schwierigsten Komponenten gegen Stufe fünf zu prüfen: Wenn die benötigte Anpassung Interna erfordert, kalkulieren Sie den Besitz dieses Quellcodes vom ersten Tag an ein.
Styling-Interoperabilität: xstyle, className und Tailwind
Astryx-Komponenten akzeptieren sowohl eine typisierte xstyle-Prop für StyleX-Overrides als auch ein einfaches className, sodass sie mit Tailwind, CSS Modules oder klassischen Stylesheets koexistieren. Dieselbe Komponente in drei Varianten:
import * as stylex from '@stylexjs/stylex';
import {Button} from '@astryxdesign/core/Button';
const styles = stylex.create({
save: {alignSelf: 'flex-end', marginBlockStart: 24},
});
// 1. As shipped
<Button label="Save" variant="primary" />;
// 2. Typed StyleX override, compiled at build time
<Button label="Save" variant="primary" xstyle={styles.save} />;
// 3. Plain className, no compiler involved
<Button label="Save" variant="primary" className="ml-auto mt-6" />;
Auf dem vorkompilierten Weg benötigt Option drei keine zusätzliche Toolchain: StyleX ist die Art und Weise, wie Astryx seine Styles schreibt, nichts, was Sie konfigurieren müssten. Eine Bedingung gilt allerdings. Astryx lädt seine Stylesheets in Cascade Layers, @layer reset für den Reset und @layer astryx-base für Komponenten-Styles, und Layers richten sich nicht nach Spezifität: Alles, was ungelayert bleibt oder in einem später deklarierten Layer liegt, gewinnt ohnehin. Ein Projekt, das bereits globales CSS, einen alten Reset oder Tailwind mitbringt, muss deshalb die Layer-Reihenfolge selbst festlegen und jedes Stylesheet bewusst in einen Layer einordnen.
Astryx vs. shadcn/ui und Base UI: Worin unterscheiden sie sich?
Meta positioniert Astryx gegen zwei Ergebnisse, die es im Launch-Beitrag benennt: Entweder übernimmt man das Design-System eines Großkonzerns und erbt damit dessen Marke, oder man stellt sich kopierte Komponenten zusammen, gewinnt Freiheit und gibt dafür gemeinsame Kohärenz, Upstream-Fixes und einen Upgrade-Pfad auf – wobei Barrierefreiheit standardmäßig beim eigenen Team landet. Das ist Metas Argument für das eigene Produkt, und es lohnt sich, es daran zu messen, was die Alternativen über sich selbst sagen. shadcn/ui beschreibt sich genau andersherum: nicht als Bibliothek, die man installiert, sondern als Weg, eine eigene zu bauen, indem man den Komponentencode direkt zum Bearbeiten in die Hand bekommt. Den Code zu besitzen ist das Feature, nicht ein Nebeneffekt – wie unser Blick darauf, warum Teams zu shadcn/ui wechseln ausführlicher darlegt. Base UI liefert Headless-React-Komponenten und Hooks ohne eigenes CSS, das Aussehen des Ergebnisses liegt also vollständig bei Ihnen.
Zu lesen als Rahmenbedingungen, nicht als Urteile: Base UI gibt Ihnen barrierefreies Verhalten und keine Meinung, shadcn/ui gibt Ihnen den Quellcode und die damit verbundene Wartung, und Astryx gibt Ihnen ein getheemtes System, aus dem Sie pro Komponente weiterhin aussteigen können. Die fünfte Stufe von Astryx erreicht die Position von shadcn/ui auf einem anderen Weg: eine Komponente nach der anderen und nur dann, wenn Sie sich dafür entscheiden.
Die Vorbehalte sind klar. Es ist eine Public Beta auf 0.x ohne stabile Linie, es setzt React 19 voraus, und es ist ein Single-Vendor-Projekt; in der Launch-Diskussion kamen Fragen zu Governance und langfristiger Wartung auf, die nichts Öffentliches klärt. Beta-Instabilität ist keine Theorie: Das Release 0.6.0 bricht für alle, die useStepperContext direkt aufrufen, indem es die Felder für das Compact-Layout aus diesem Hook entfernt und StepperContextValue auf Transition History und Step-Registrierung verengt. Auf der anderen Seite beschreibt die Community-Seite einen offiziellen Discord und GitHub-Issues, die wöchentlich triagiert werden.
Wer sollte Astryx jetzt ausprobieren, und wer sollte warten?
Probieren Sie es jetzt aus, wenn Sie ein internes Tool oder Dashboard auf der grünen Wiese mit React 19 beginnen, barrierefreie Komponenten wollen, ohne sie selbst zu entwerfen, und einen Designer haben, der lieber Tokens verantwortet als CSS-Pull-Requests zu reviewen. Warten Sie, wenn Sie unterhalb von React 19 liegen, wenn Sie ein öffentlich zugängliches Produkt pflegen, bei dem ein 0.x-Minor, das eine Context-Struktur ändert, Sie ein Release kosten würde, oder wenn Single-Vendor-Governance eine Beschaffungsfrage ist, die Sie noch nicht beantworten können. Ein sinnvoller Mittelweg ist eine einzelne Route einer bestehenden Anwendung: vorkompilierte Stylesheets, explizite @layer-Reihenfolge und ein einzelner Screen, gebaut mit Komponenten, die Sie andernfalls selbst geschrieben hätten.
Was Sie bewerten sollten, ist nicht die Anzahl der Komponenten. Es ist die Frage, auf welche Stufe der Anpassungsleiter Ihre Design-Anforderungen Sie zwingen, denn genau dafür zahlen Sie in einem Jahr. Wählen Sie die zwei Komponenten, bei denen Ihr Produkt keine Kompromisse eingehen kann, führen Sie für jede npx @astryxdesign/cli component <Name> aus und prüfen Sie, ob Tokens und className Sie ans Ziel bringen, bevor es das Ejecten des Quellcodes tut.
FAQs
Was ist der Unterschied zwischen Astryx und StyleX?
StyleX ist Metas CSS-in-JS-Compiler, der zur Build-Zeit Style-Objekte in atomares, kollisionsfreies CSS übersetzt. Astryx ist das Design-System aus React-Komponenten, deren Styles damit geschrieben wurden. Astryx installiert @stylexjs/stylex als Peer Dependency, aber die Nutzung der vorkompilierten Stylesheets benötigt kein Build-Plugin, kein PostCSS und keine Babel-Konfiguration. Nur Source-Builds ziehen die StyleX-Plugins aus @astryxdesign/build heran.
Funktioniert Astryx mit Next.js, Vite oder einem einfachen CDN-Setup?
Ja. Die README von @astryxdesign/core dokumentiert Setups für Next.js, Tailwind, Vite und CDN. Auf dem vorkompilierten Weg importieren Sie den Reset, das Komponenten-Stylesheet und ein Theme-Stylesheet und umschließen die Anwendung dann mit einem Theme-Provider – ein Bundler-Plugin ist dabei nicht im Spiel. Ein Build aus dem TypeScript- und StyleX-Quellcode erfordert stattdessen die in @astryxdesign/build ausgelieferten Babel-, PostCSS- oder Vite-Plugins.
Brauche ich die Astryx-CLI, um die Bibliothek zu nutzen?
Nein. Die Komponenten und das vorkompilierte CSS funktionieren allein aus den installierten Paketen, und die CLI ist eine Dev Dependency. Sie benötigen sie für theme list und theme add, die vollständige Komponenten-Dokumentation, Templates, Upgrade-Codemods und Swizzling. Das Ausführen von astryx init schreibt den Astryx-Komponentenindex in AGENTS.md oder CLAUDE.md, was nur relevant ist, wenn KI-Agenten im Repository arbeiten.
Sind die Chart-Komponenten von Astryx produktionsreif?
Nein. @astryxdesign/vega, der Vega-Wrapper, und @astryxdesign/charts, die auf d3 basierende Charting-Bibliothek, veröffentlichen echte Builds auf npm nur unter dem canary-Dist-Tag; ihr latest-Tag zeigt auf ein Platzhalter-Release, von dessen Installation npm ausdrücklich abrät. Das experimentelle Paket @astryxdesign/lab, in dem neue Komponenten landen, bevor sie in core aufsteigen, wird genauso veröffentlicht. Charting liegt damit noch hinter den ohnehin schon als Beta geführten 0.x-Core-Paketen zurück und benötigt einen eigenen Fallback-Plan.
Truly understand users experience
See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data.
Star on GitHub12k