Headless, signals-first UI primitives for Angular.
Radix NG is a low-level UI primitive library for Angular with a focus on accessibility, customization,
and developer experience. The primitives are headless β they ship no styles and expose state via
data-* attributes, so you can use them as the base layer of your design system or adopt them
incrementally.
The library grew out of an Angular port of Radix UI; its API and behavior now align primarily with Base UI.
- π― Headless β no styles, full control. State is exposed through
data-*attributes. - βΏ Accessible β built to the WAI-ARIA authoring practices, with keyboard navigation and focus management.
- β‘ Signals-first β modern Angular API (
input(),model(),computed(),signal()). - π§© Composable β primitives compose via
hostDirectivesand shared building blocks. - π Theme-ready β state-driven styling works with light/dark and any design tokens.
- π¦ Tree-shakeable β granular secondary entry points (
@radix-ng/primitives/<name>).
npm install @radix-ng/primitives
# or
pnpm add @radix-ng/primitives
# or
yarn add @radix-ng/primitivesimport { Component } from '@angular/core';
import {
RdxCollapsibleRootDirective,
RdxCollapsibleTriggerDirective,
RdxCollapsibleContentDirective
} from '@radix-ng/primitives/collapsible';
@Component({
selector: 'app-demo',
imports: [RdxCollapsibleRootDirective, RdxCollapsibleTriggerDirective, RdxCollapsibleContentDirective],
template: `
<div rdxCollapsibleRoot>
<button rdxCollapsibleTrigger>Toggle</button>
<div rdxCollapsibleContent>Content</div>
</div>
`
})
export class DemoComponent {}Primitives are headless: style them via the data-* attributes they expose (e.g.
[data-state="open"], [data-disabled]) with the tooling of your choice.
- π radix-ng.com β guides and API reference
- π§ͺ sb-primitives.radix-ng.com β Storybook
- π The Story of My Radix UI Port for Angular β talk, FrontendConf Moscow 2025
Status: β Completed Β· π In Progress Β· π In Review
Core primitives
| Primitive | Status |
|---|---|
| Accordion | β |
| Alert Dialog | beta |
| Avatar | β |
| Aspect Ratio | β |
| Button | β |
| Checkbox | β |
| Collapsible | β |
| Context Menu | β |
| Dialog | β |
| DropdownMenu | β |
| Form | ? |
| Hover Card | β |
| Label | β |
| Menubar | β |
| Navigation Menu | β |
| Popover | β |
| Progress | β |
| Radio | β |
| Select | beta |
| Separator | β |
| Slider | β |
| Switch | β |
| Tabs | β |
| Toast | |
| Toggle | β |
| Toggle Group | β |
| Toolbar | β |
| Tooltip | β |
Dates & inputs
| Primitive | Status |
|---|---|
| Calendar | β |
| Date Field | β |
| Date Picker | |
| Date Range Field | |
| Date Range Picker | |
| Editable | β |
| Number Field | β |
| Pagination | β |
| Range Calendar | |
| Stepper | β |
| Time Field | β |
Utilities
| Primitive | Status |
|---|---|
| FocusOutside | β |
| PointerDownOutside | β |
| FocusGuards | |
| FocusScope |
- OriginUI for Angular β styled components built on these primitives
- shadcn/ui for Angular β shadcn-style components
- DataGrid β built with TanStack Table
Contributions are welcome! The repository is an Nx monorepo:
.
βββ apps
β βββ radix-docs documentation (Astro)
β βββ radix-ssr-testing SSR tests for unstyled primitives
β βββ radix-storybook Storybook for primitives
βββ packages
βββ primitives headless primitives (no styling)
pnpm primitives:test # run tests
pnpm primitives:build # build the library
pnpm storybook:primitives # start StorybookWe're excited to see the community adopt Radix NG, raise issues, and provide feedback β whether it's a feature request, bug report, or a project to showcase.
This project is licensed under the terms of the MIT license.