react-brain
Browse decisions
React & language foundations 3App architecture 9UI 12Platform & native 9Build, test, observe, secure 6AI in React apps 3stack composerdecision recordscensusstaleness bencharchitecturechangelogmethodologyroadmap

entriesui · verified 2026-07-10 · react

Component & headless-UI libraries (web)

reviewedconfidence: mediumthis tier holds 50% on the public scorecard (3/19 graded · 0 overturned) →

related decisions: styling · crossplatform

cited by: styling

re-verified 2× — 2026-07-10 · 2026-07-06 · changelog

recommendation

Own-the-code: shadcn/ui (Base UI default since 2026-07; Radix still supported) + Tailwind — the default for product teams that want control.

  • max accessibility / headless primitives → React Aria Components or Base UI
  • want batteries-included + don't want to own styling → MUI / Mantine / Chakra
  • internal admin/enterprise → Ant Design or MUI
  • Meta/StyleX-native, agent-ready design system → Astryx (beta — vet component coverage before betting on it)
  • React Native UI → this entry is web-only; see RB-E-STYLING / RB-E-CROSSPLATFORM

Options & tradeoffs

the field considered — and why each one isn’t the default here

optiontradeoffevidence
Base UI (1.x)unstyled accessible primitives (Radix/MUI lineage); render-prop customization
React Aria Components (1.x, Adobe)accessibility-first headless primitives; `render` prop pattern (not asChild)2.7M/wk · ships in 1/20
Radix UIunstyled primitives; `asChild` composition; widely used under shadcnships in 7/20
shadcn/uicopy-paste components (own the code) + Tailwind; CLI + registries; Base UI is the DEFAULT headless layer since July 2026 (4.13) — Radix stays supported, every component ships for both; 2026-06 added chat components + the first headless @shadcn/react package
MUI (9) / Chakra (3) / Mantine (9) / Ant Design (6)batteries-included styled systems; MUI v9 is incrementally adopting Base UI primitives for new components (NumberField, MenuBar), not a full migration
HeroUI (3)React Aria + Tailwind; separate web + RN libraries sharing design tokens (not one cross-platform abstraction)
Astryx (Meta)Meta's open-source design system on React + StyleX: 150+ accessible, themeable components, compile-time atomic styling, agent-ready scaffolding (CLI + MCP); grown 8 yrs internally, 13,000+ Meta apps; batteries-included; beta (2026)

evidence: npm weekly downloads (signals snapshot) · “ships in n/D” = adoption across the production-app census, honest denominators

npm weekly downloads (from the corpus's last signals run): react-aria-components 2.7M · antd 3.6M

Verified notes

Split three ways: headless/unstyled (Base UI, React Aria, Radix) vs batteries-included (MUI/Chakra/Mantine/Ant, plus Meta's StyleX-based Astryx) vs own-the-code (shadcn). Web only. HEADLESS-LAYER SHIFT (verified vs the shadcn changelog, 2026-07-10): 'Base UI is the default component library in shadcn/ui' — Radix explicitly NOT deprecated (both supported), but the center of gravity for new shadcn work is now Base UI; MUI v9 is incrementally adopting the same primitives. Astryx (beta, 2026) pairs compile-time StyleX styling with agent-ready scaffolding (CLI + MCP) — Meta open-sourced its 8-yr internal system (13,000+ apps); see RB-E-STYLING for StyleX.

Canonical reading

Editorial annotations on why each piece matters — the articles themselves are the originals; read them there.

Building an LLM-safe design systemPolar

Argues a design system should become the only expressible decisions for LLM-authored code — token-only props, a polymorphic Box, StyleX compile-time enforcement. A durable take on component libraries in the AI-coding era.

Building design components with action props using async ReactAurora Scharff

A pattern for design-system components that accept action props and run them in internal transitions (useTransition/useOptimistic) for built-in pending/optimistic UI. A durable component-API pattern for the async-React era.

Sources

Depth (in-domain rules) is owned by the design-systems-governance skill — this entry is selection breadth.

The full explanation

The reviewed long-form essay behind this entry — the why, not a how-to. Also on GitHub.

About component & headless-UI libraries — who owns the code

Diataxis: Explanation. This page builds understanding of the web component-library landscape — the reasoning behind the picks. It is not a component catalog. Token/theming/a11y governance is owned by design-systems-governance; styling engines by RB-E-STYLING. This entry is web-only — React Native UI routes to RB-E-STYLING/RB-E-CROSSPLATFORM.

The one question that organises everything: who owns the code you'll be debugging in a year?

Every component library answers three needs — behavior (focus traps, keyboard interaction, ARIA), styling, and maintenance — and the durable axis is who owns each:

  • Headless primitives (Base UI, Radix, React Aria): the library owns behavior, you own styling. Maximum control, maximum styling work.
  • Batteries-included systems (MUI, Mantine, Chakra, Ant, Astryx): the library owns behavior and styling. Fastest start, hardest to make yours.
  • Own-the-code (shadcn/ui): the styled component is copied into your repo over a headless layer. You own everything visible; upstream owns only the invisible behavior underneath.

This is why "which component library" arguments talk past each other — they're usually arguments about which ownership split a team can live with.

The default, and why

Own-the-code: shadcn/ui (Base UI default since 2026-07; Radix still supported) + Tailwind — the default for product teams that want control.

shadcn's model wins for product teams because it puts the hard part (accessible behavior) in a maintained dependency and the opinionated part (markup, styling) in your repo where you can change it without forking anything. The 2026 shift underneath it matters: Base UI became shadcn's default headless layer (Radix explicitly not deprecated — every component ships for both), and MUI v9 is incrementally adopting the same primitives. The Radix/MUI lineages are converging on one behavior layer, which de-risks the whole own-the-code bet: the primitives under your copied components are becoming the ecosystem's shared foundation rather than one vendor's.

The landscape, by ownership split

Base UI / Radix / React Aria Components — the headless tier. Base UI is the convergence point (Radix/MUI lineage); React Aria is Adobe's accessibility-first take with the strongest interaction rigor and its own render-prop composition style. Pick one directly when you're building a design system, not assembling an app.

shadcn/ui — the own-the-code layer over that tier: CLI + registries, chat components (2026-06), and a first headless @shadcn/react package (tested behavior as a dependency while styling stays copy-paste).

MUI / Mantine / Chakra / Ant Design — batteries-included. The right call when shipping speed beats visual identity: internal tools, admin surfaces, enterprise CRUD. Ant for that enterprise idiom specifically.

Astryx (Meta, beta) — batteries-included with a twist: StyleX compile-time styling (RB-E-STYLING) and agent-ready scaffolding (CLI + MCP), open-sourced from 8 years of internal use. Vet component coverage before betting; it's the most credible new batteries-included entrant in years.

HeroUI — React Aria + Tailwind, with separate web and RN libraries sharing tokens — a reminder that "cross-platform component library" today means shared tokens, not shared code.

Tradeoffs and failure modes to name out loud

  • Copy-paste is a fork you maintain. shadcn components don't auto-upgrade; behavior fixes arrive via the headless dep, but markup/styling drift is yours. Budget for it.
  • Fighting a batteries-included theme. If you're overriding MUI styles everywhere, you wanted the headless tier — the override layer becomes its own design system, minus the coherence.
  • Mixing headless layers. Radix here, React Aria there, Base UI in the new code — three composition models and three focus-management philosophies in one app. Converge deliberately.
  • The AI-era failure mode: agent-written UI that reaches past the design system's props into raw divs. The LLM-safe-design-system reading argues the fix — make the system's tokens/props the only expressible decisions — and it's why agent-scaffolding (Astryx MCP, shadcn registries) is becoming a selection criterion at all (RB-E-AI-DEVTOOLS).
  • Accessibility assumed, not verified. Headless ≠ accessible-by-default once you restyle; interaction contracts survive, contrast and affordance don't (RB-E-A11Y).

How it interacts with the rest of the stack

  • Styling (RB-E-STYLING). shadcn assumes Tailwind; Astryx assumes StyleX — the component layer and the styling engine are one decision wearing two names.
  • A11y (RB-E-A11Y). The headless tier exists because accessible behavior is the hardest part to hand-roll; that's the part you should never own.
  • AI dev tooling (RB-E-AI-DEVTOOLS). Registries/MCP scaffolding determine how well agents generate on-system UI — a new axis this decade added to an old decision.
  • Cross-platform (RB-E-CROSSPLATFORM). None of this transfers to RN; shared design happens at the token level (HeroUI's split is the honest model).

In one paragraph

Choose a component library by who owns which layer: headless primitives (behavior theirs, styling yours), batteries-included (both theirs), or own-the-code (behavior theirs, everything visible copied into your repo). The product-team default is shadcn/ui + Tailwind, now riding Base UI as its default headless layer — the Radix/MUI lineages converging on one shared behavior foundation makes the copied-code bet safer, not riskier. Go batteries-included (MUI/ Mantine/Ant, or Meta's agent-ready Astryx) when shipping speed beats visual identity, and drop to the headless tier directly when you're building a design system. Whatever you pick, never hand-roll the behavior layer — that's the part with the accessibility landmines.


See also: RB-E-STYLING (the engine under the components), RB-E-A11Y (what headless does and doesn't guarantee), RB-E-AI-DEVTOOLS (agent scaffolding as a selection axis). Token/theming/ lifecycle governance: the design-systems-governance skill.

Related in ui: styling · animation · lists · a11y · i18n · charts · editors · svg · maps · calendars · polish