Introduction
Akaza UI is a headless component library for Vue. It gives you the interactive behavior, accessibility semantics, and keyboard handling for common UI patterns — without imposing any styles.
You own the markup. You own the styles. Akaza UI handles the hard parts.
Philosophy
Most UI libraries bundle behavior and design together. That's great for getting started, but it creates friction the moment your design deviates from their defaults — you're fighting overrides instead of building.
Akaza UI takes the opposite approach:
- Zero default styles. Components render semantic HTML with no classes, no inline styles. Apply whatever CSS or utility framework you want.
- Vue-native slots API. Every component exposes its state and actions through slots — the idiomatic Vue way. No Radix-style sub-component trees, no
.Root,.Trigger,.Contentchaining. - Behavior is the product. Focus management, keyboard navigation, ARIA attributes, open/close state — all handled correctly so you don't have to think about it.
- Composable, not opinionated. Components do one thing well. Combine them however your design requires.
What's included
Akaza UI ships a set of low-level primitives covering the most common interactive patterns:
Design decisions
Why slots instead of sub-components?
Sub-component APIs (e.g. <Accordion.Root>, <Accordion.Trigger>) work well in React but feel unnatural in Vue. Vue's slot system is already the idiomatic way to inject content and receive state from a parent — Akaza UI leans into that instead of fighting it.
Why no default styles at all?
Even "minimal" default styles create specificity battles. A truly unstyled baseline means you start from zero — no resets to undo, no !important needed.
Why not wrap an existing headless library?
Most headless libraries are React-first with Vue adapters bolted on. Akaza UI is written from the ground up for Vue, which means the API, reactivity model, and slot design all feel native — because they are.