Rams MCP · The full engine, now in your coding agent
radix-ui on GitHub

radix-ui/primitives

Reviewed against Rams quality heuristics: accessibility, color, typography, spacing, components, motion, UX, and craft.

30 files reviewed·July 29, 2026

View on GitHub

Top fix

Keep enforcing consistent controlled/uncontrolled state patterns as new primitives land

More findings

  • No accessibility regressions found across the reviewed composition patterns
  • API surface stays predictable across primitives, easing consumer styling

Verdict

Consistency is the whole product here: every primitive follows the same compositional and accessibility conventions with nothing sloppy poking through. The biggest risk isn't in this batch, it's staying this disciplined as more primitives and edge cases get added.

Files Rams reviewed

apps/ssr-testing/app/accordion/page.tsx

apps/ssr-testing/app/layout.tsx

apps/ssr-testing/app/one-time-password-field/page.tsx

apps/ssr-testing/app/password-toggle-field/page.tsx

apps/ssr-testing/app/portal/page.tsx

apps/ssr-testing/app/roving-focus-group/page.tsx

apps/ssr-testing/app/rsc/page.tsx

apps/ssr-testing/app/scroll-area/page.tsx

apps/ssr-testing/app/select/page.tsx

apps/ssr-testing/app/slider/page.tsx

apps/ssr-testing/app/slot/page.tsx

apps/ssr-testing/app/accessible-icon/page.tsx

apps/ssr-testing/app/alert-dialog/page.tsx

apps/ssr-testing/app/avatar/page.tsx

apps/ssr-testing/app/checkbox/page.tsx

apps/ssr-testing/app/collapsible/page.tsx

apps/ssr-testing/app/context-menu/page.tsx

apps/ssr-testing/app/dialog/page.tsx

apps/ssr-testing/app/dropdown-menu/page.tsx

apps/ssr-testing/app/form/page.tsx

apps/ssr-testing/app/hover-card/page.tsx

apps/ssr-testing/app/label/page.tsx

apps/ssr-testing/app/menubar/page.tsx

apps/ssr-testing/app/navigation-menu/page.tsx

apps/ssr-testing/app/page.tsx

apps/ssr-testing/app/popover/page.tsx

apps/ssr-testing/app/primitive-merge/page.tsx

apps/ssr-testing/app/progress/page.tsx

apps/ssr-testing/app/radio-group/page.tsx

apps/ssr-testing/app/separator/page.tsx

Working well

  • Systematically covering every orientation/loop combination (horizontal, vertical, both, looping on/off) plus a nested ButtonGroup case is exactly how you validate keyboard focus logic before shipping a primitive.
  • Using Accordion.Header wrapping Accordion.Trigger follows the Radix accessible pattern correctly, keeping the heading semantics and button behavior properly composed.
  • Using the indexed Input variant in the second example correctly demonstrates the primitive's explicit-ordering API alongside the implicit-order default.
  • Uses Radix's PasswordToggleField primitive, which handles accessible naming and state for the show/hide toggle rather than a hand-rolled button.

Scored July 29, 2026 with Rams Engine v0.0.3 · Engine changelog

This page is an automated design review of radix-ui/primitives’s UI code: 30 files read against 258 versioned rules covering accessibility, color, typography, spacing, components, UX, motion, and craft. The score is out of 100; any confirmed critical issue caps it at 59.

More design scores

Score your own repo.

Free on public repos, no account. The same engine that scored this page reads your UI code and mints a score page like this one.

Public repos only. The full engine reviews the UI code and mints a public score page — we email you the link too. Already-scored repos open instantly.

Or get a design review on every pull requestInstall Rams