Skip to main content
Features

Radix UI Components

Full Radix UI accessibility without managing Radix peer deps. We wrap Radix internally — the API never leaks.

import { Modal } from "@ninna-ui/overlays";
import { Select } from "@ninna-ui/forms";
import { Tabs } from "@ninna-ui/navigation";

// Radix accessibility is built in — no @radix-ui/* imports needed
// No peer dep management, no version conflicts

Key features

Built on Radix UI primitives for complex widgets

Zero API leakage — Radix types never appear in your code

No @radix-ui/* peer dependencies to manage

Full WAI-ARIA compliance: keyboard nav, focus trapping, ARIA

Consistent API across all components — no Radix-specific patterns

Radix updates handled internally — you just npm update

Radix without the complexity

Radix UI is the gold standard for accessible React primitives, but using it directly means managing 15+ peer dependencies, learning Radix-specific APIs, and handling version conflicts. Ninna UI wraps Radix internally through @ninna-ui/react-internal, so you get all the accessibility benefits without the dependency management overhead.

The Radix API never leaks into your code. You import from @ninna-ui/* packages, not from @radix-ui/*. When Radix releases a fix, we update our wrapper and ship it via npm — you just run npm update.

Component Docs

FAQ