Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

reka-ui — Claude Code skill: Vue components with accessibility

A skill for working with Reka UI, a library of unstyled Vue 3 components with full accessibility support. Use it when building interfaces from scratch or working with Nuxt UI and shadcn-vue.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add onmax/nuxt-skills --skill reka-ui -a claude-code
Open on GitHub

What reka-ui does

Reka UI provides ready-made primitives for forms, dialogs, menus, comboboxes and other elements—all WAI-ARIA compliant, no built-in styling. Components split into parts (Root, Trigger, Content, Portal) that you assemble like building blocks. Supports controlled and uncontrolled state via v-model and default* props, composition with asChild, virtualization for large lists, and context injection.

The skill includes a component index by category (Form, Date, Overlay, Menu, Data, etc.) and detailed docs for each one. Recent updates added Drawer with swipe gestures, Autocomplete, color components (ColorArea), DateField and TimeField with smart input, TreeItem, and Rating. All components work with SSR and support RTL.

The skill loads only what you need—searches by component name or category, doesn't dump the whole reference at once. If you already use Nuxt UI or shadcn-vue, this is the same foundation, just without pre-built styles.

What it helps with

  • build an accessible dialog, form, or modal window from scratch
  • integrate unstyled components into your own design system
  • implement virtualization for a combobox with thousands of options
  • set up controlled state for a select or date picker
  • use async data in dropdown lists

Example prompts for the agent

  • Help me build a Dialog from Reka UI with a form inside
  • How do I make a Select with search support using Reka UI?
  • Explain how `asChild` works in Reka UI and when to use it

How to install reka-ui

1Skills CLI (Vercel)

npx skills add onmax/nuxt-skills --skill reka-ui -a claude-code

2Manually: put the files in place

~/.claude/skills/reka-ui/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/reka-ui/

Similar

top-design wondelai Directs AI coding agents to build Awwwards-style web experiences with dramatic typography, orchestrated scroll motion, and a 10-point scoring rubric. Claude Code CX Codex Cursor +1 7,100installs develop jsmastery-pro Turns approved specs and AGENTS.md rules into working UI and backend code. Helpful when architectural choices are settled and code generation needs strict guardrails. Claude Code CX Codex Cursor +1 4,400installs router-core TanStack Entry skill for TanStack Router that points a task at the right sub-skill and pins the type-inference and client-first rules agents keep breaking. Claude Code CX Codex Cursor +1 587installs migrate-nativewind-to-uniwind uni-stack A skill that automates migrating React Native projects from NativeWind to Uniwind. It updates configs, removes old packages, rebuilds CSS, and handles all breaking changes. Claude Code CX Codex Cursor +1 2,000installs react-router TanStack A skill that teaches your coding agent the React bindings for TanStack Router: hook reference, components, and a file-based routing setup on Vite. Claude Code CX Codex Cursor +1 546installs wpds WordPress Feeds WordPress Design System docs to your agent through an MCP server, so UI work lands on real components and tokens instead of guesses. Claude Code CX Codex Cursor +1 4,000installs frontend-design official anthropics This skill guides intentional visual design for new interfaces and redesigns. Use it when a generic generated UI is not enough. Claude Code Claude.ai 1,025,790installs design-taste-frontend Leonxlnx This skill directs the design of public pages and work screens, then checks the result in a browser through screenshots. Use it when an interface feels generic or unfinished. Claude Code CX Codex Cursor +1 673,100installs

Questions about reka-ui

How do I install the reka-ui skill in Claude Code?

Run npx skills add onmax/nuxt-skills --skill reka-ui -a claude-code, then open ~/.claude/skills/reka-ui/SKILL.md. The skill will load docs when you ask about Reka UI components.

What is Reka UI and how is it different from Nuxt UI?

Reka UI is a library of unstyled component primitives with accessibility (formerly Radix Vue). Nuxt UI and shadcn-vue build on Reka UI but add pre-built styles and variants. Choose Reka UI if you're building your own design system; choose Nuxt UI if you want ready-made components.

Does Reka UI have date components?

Yes—DateField, DatePicker, DateRangeField, TimeField, TimeRangeField, MonthPicker, and YearPicker (added in v2.9.0). All support localization and input step control.

Source text

SKILL.md · MIT
---
name: reka-ui
description: Use when building with Reka UI (headless Vue components) - provides component API, accessibility patterns, composition (asChild), controlled/uncontrolled state, virtualization, and styling integration. Formerly Radix Vue.
license: MIT
---

# Reka UI

Unstyled, accessible Vue 3 component primitives. WAI-ARIA compliant. Previously Radix Vue.

**Current version:** v2.11.0 (October 2026)

## When to Use

- Building headless/unstyled components from scratch
- Need WAI-ARIA compliant components
- Using Nuxt UI, shadcn-vue, or other Reka-based libraries
- Implementing accessible forms, dialogs, menus, popovers

**For Vue patterns:** use `vue` skill

## Available Guidance

| File                                                     | Topics                                                              |
| -------------------------------------------------------- | ------------------------------------------------------------------- |
| **[references/components.md](references/components.md)** | Component index by category (Form, Date, Overlay, Menu, Data, etc.) |
| **components/\*.md**                                     | Per-component details (dialog.md, select.md, etc.)                  |

**Guides** (see [reka-ui.com](https://reka-ui.com)): Styling, Animation, Composition, SSR, Namespaced, Dates, i18n, Controlled State, Inject Context, Virtualization, Migration

## Loading Files

**Consider loading these reference files based on your task:**

- [ ] [references/components.md](references/components.md) - if browsing component index by category or searching for specific components

**DO NOT load all files at once.** Load only what's relevant to your current task.

**For styled Nuxt components built on Reka UI:** use **nuxt-ui** skill

## Key Concepts

| Concept                 | Description                                                           |
| ----------------------- | --------------------------------------------------------------------- |
| `asChild`               | Render as child element instead of wrapper, merging props/behavior    |
| Controlled/Uncontrolled | Use `v-model` for controlled, `default*` props for uncontrolled       |
| Parts                   | Components split into Root, Trigger, Content, Portal, etc.            |
| `forceMount`            | Keep element in DOM for animation libraries                           |
| Virtualization          | Optimize large lists (Combobox, Listbox, Tree) with virtual scrolling |
| Context Injection       | Access component context from child components                        |

## Installation

```ts
// nuxt.config.ts (auto-imports all components)
export default defineNuxtConfig({
  modules: ['reka-ui/nuxt']
})
```

```ts
import { RekaResolver } from 'reka-ui/resolver'
// vite.config.ts (with auto-import resolver)
import Components from 'unplugin-vue-components/vite'

export default defineConfig({
  plugins: [
    vue(),
    Components({ resolvers: [RekaResolver()] })
  ]
})
```

## Basic Patterns

```vue
<!-- Dialog with controlled state -->
<script setup>
import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose } from 'reka-ui'
const open = ref(false)
</script>

<template>
  <DialogRoot v-model:open="open">
    <DialogTrigger>Open</DialogTrigger>
    <DialogPortal>
      <DialogOverlay class="fixed inset-0 bg-black/50" />
      <DialogContent class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-white p-6 rounded">
        <DialogTitle>Title</DialogTitle>
        <DialogDescription>Description</DialogDescription>
        <DialogClose>Close</DialogClose>
      </DialogContent>
    </DialogPortal>
  </DialogRoot>
</template>
```

```vue
<!-- Select with uncontrolled default -->
<SelectRoot default-value="apple">
  <SelectTrigger>
    <SelectValue placeholder="Pick fruit" />
  </SelectTrigger>
  <SelectPortal>
    <SelectContent>
      <SelectViewport>
        <SelectItem value="apple"><SelectItemText>Apple</SelectItemText></SelectItem>
        <SelectItem value="banana"><SelectItemText>Banana</SelectItemText></SelectItem>
      </SelectViewport>
    </SelectContent>
  </SelectPortal>
</SelectRoot>
```

```vue
<!-- asChild for custom trigger element -->
<DialogTrigger as-child>
  <button class="my-custom-button">Open</button>
</DialogTrigger>
```

## Recent Updates (v2.6.0-v2.10.5)

- **New components**: Drawer with swipe gestures (v2.10.0), Autocomplete, TimeRangeField, Color components (ColorArea etc.), MonthPicker/YearPicker (v2.9.0)
- **DropdownMenu**: filter component (v2.9.0)
- **Checkbox/Switch**: custom true/false values (v2.9.0)
- **Splitter**: pixel sizing and constraints (v2.9.0)
- **Tooltip**: global content configuration (v2.9.0)
- **ConfigProvider**: `teleportTo` global teleport target (v2.10.0)
- **Dialog**: `unmountOnHide` prop (v2.10.0)
- **HoverCard**: `enableTouch` prop (v2.10.0)
- **Select**: `nullableValue` prop (v2.10.0)
- **Popper**: `dir` prop for RTL/LTR (v2.10.0)
- **DateField**: `stepSnapping` (v2.10.0)
- **TreeItem**: `disabled` prop; **Tabs**: `--reka-tabs-indicator-thickness` CSS var (v2.10.0)
- **Rating**: exposed and documented (v2.10.0)
- **New component**: Rating (v2.8.0)
- **ScrollArea**: Added "glimpse" scrollbar mode (v2.8.0)
- **PopperContent**: Added `hideShiftedArrow` prop (v2.8.0)
- **TimeField**: Added `stepSnapping` support (v2.8.0)
- **Breaking**: `weekStartsOn` now locale-independent for date components (v2.8.0)
- **Virtualization**: `estimateSize` accepts function for Listbox/Tree (v2.7.0)
- **Composables**: `useLocale`, `useDirection` exposed (v2.6.0)
- **Select**: `disableOutsidePointerEvents` prop on Content (v2.7.0)
- **Toast**: `disableSwipe` prop (v2.6.0)

## Resources

- [Reka UI Docs](https://reka-ui.com)
- [GitHub](https://github.com/unovue/reka-ui)
- [Nuxt UI](https://ui.nuxt.com) (styled Reka components)
- [shadcn-vue](https://www.shadcn-vue.com) (styled Reka components)

---

_Token efficiency: ~350 tokens base, components.md index ~100 tokens, per-component ~50-150 tokens_

© onmax · MIT · onmax/nuxt-skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor