Unstyled Vue components for accessible user interfaces.

Headless UI primitives with a Vue-native slots API. Bring your own styles — keyboard navigation and ARIA are handled for you.

TabsDemo.vue
<script setup lang="ts">
import { ref } from "vue";
import { Tabs } from "akaza-ui";

const tabs = [
  { value: "overview", label: "Overview" },
  { value: "usage", label: "Usage" },
  { value: "api", label: "API" },
];
const active = ref("overview");
</script>

<template>
  <Tabs
    :items="tabs"
    v-model="active"
    :ui="{ tab: 'px-4 py-2 text-sm' }"
  >
    <template #panel-overview>Welcome to Akaza UI.</template>
    <template #panel-usage>Import and use any component.</template>
    <template #panel-api>Full TypeScript API docs.</template>
  </Tabs>
</template>

Everything you need, nothing you don't

    Fully Accessible

    Built on WAI-ARIA patterns. Keyboard navigation, focus management, and screen reader support are handled for you out of the box.

    Completely Unstyled

    Zero default styles. Bring your own CSS, Tailwind, or any design system — full control over every pixel, no overrides needed.

    Vue-Native Slots API

    Composing UI feels natural in Vue. Use slots instead of sub-components — no Radix-style boilerplate, just idiomatic Vue templates.

    Headless & Flexible

    Components expose all state and behavior through slots and props. You control the markup — Akaza UI handles the logic.

    Lightweight

    No runtime bloat. Each component is self-contained with minimal dependencies, so you only ship what you actually use.

    TypeScript First

    Full type safety throughout. Slot props, component props, and emits are all typed — autocomplete works everywhere.

Start building with Akaza UI.

Accessible, unstyled Vue components ready to drop into your project. Style them your way — ship faster.