Signal-first, headless UI primitives for Angular.
Build accessible, composable components β owned directly in your codebase.
CLI-generated UI system for Angular 19+ and Tailwind CSS v4.
luminacn/ui is a modern UI architecture for Angular that gives you full ownership of your components.
Instead of installing opaque dependencies, you generate components directly into your project β fully customizable, fully transparent, and fully yours.
- π§ Primitives over components β build from composable building blocks
- β‘ Signal-native β designed for Angular Signals (zoneless-ready)
- π§© Headless-first β logic separated from styling
- π¦ Locally owned β components live in your source, not
node_modules - π CLI-driven β install, update, diff, and rollback with precision
npx luminacn@latest initnpx luminacn add sheet navigation-menu input-otpCLI β Registry β Generator β Your Codebase
β
Angular Signals UI
Every component is:
- generated into your repo
- fully editable
- version-tracked via CLI
No runtime lock-in. No hidden abstraction.
| Command | Description |
|---|---|
init |
Initialize luminacn in your project |
add |
Add components to your codebase |
list |
View available components |
upgrade |
Update components to latest versions |
rollback |
Revert to a previous state |
diff |
Compare local vs registry |
doctor |
Validate environment setup |
remove |
Remove components safely |
Navigation Menu Β· Sheet Β· Accordion Β· Tabs Β· Tooltip Β· Dropdown Β· Context Menu Β· Pagination Β· Stepper
Data Table Β· Carousel Β· Infinite Scroll Β· Badge Β· Alert Β· Progress Β· Skeleton Β· Spinner
Input Β· Input OTP Β· Textarea Β· Checkbox Β· Radio Β· Switch Β· Toggle Β· Toggle Group Β· Slider Β· FormField
Dialog Β· Popover Β· Toast Β· Sheet Β· Tooltip
Headings Β· Text Β· Lead Β· Kbd Β· Utilities
<nav lmStepper [activeStep]="0" #stepper="lmStepper">
<button lmStepperTrigger [index]="0">Profile</button>
<button lmStepperTrigger [index]="1" [disabled]="profileInvalid()">
Security
</button>
<section class="mt-4">
@if (stepper.activeStep() === 0) {
<profile-form />
} @if (stepper.activeStep() === 1) {
<security-settings />
}
</section>
</nav>Every component is generated into your project. No black boxes.
Logic is isolated from styling. Use your own design system freely.
Built for Angular Signals and future zoneless Angular.
No runtime UI framework lock-in.
| Feature | luminacn/ui | Angular Material | CDK |
|---|---|---|---|
| Source ownership | β Yes | β No | |
| Headless architecture | β Yes | β No | |
| Signals-ready | β Yes | β No | β No |
| Tailwind-first | β Yes | β No | β No |
| CLI-driven updates | β Yes | β No | β No |
- Sheet (Drawer) β
- Navigation Menu β
- Input OTP β
- Combobox / Autocomplete β
- Command Palette (Cmd+K) β³
- Infinite Scroll β
- Data Table β³
- Carousel β³
- Toggle Group β
- Calendar / Date Picker β
- Resizable Panels β³
- Pagination β³
- Context Menu β
No lock-in. No runtime magic.
Everything is generated:
- You inspect it
- You modify it
- You ship it
MIT
luminacn/ui is built for developers who want:
βShadcn-style ownership β but for Angular.β