agentsclimarketplace

Reka ui

Skill ulpi-io/plugin-marketplace/plugins/onmax/skills/reka-ui

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.From its SKILL.md

Install
npx -y skills add ulpi-io/plugin-marketplace --skill reka-ui

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.2 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

Reka UI

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

Current version: v2.8.0 (January 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

FileTopics
references/components.mdComponent index by category (Form, Date, Overlay, Menu, Data, etc.)
components/*.mdPer-component details (dialog.md, select.md, etc.)

Guides (see 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:

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

ConceptDescription
asChildRender as child element instead of wrapper, merging props/behavior
Controlled/UncontrolledUse v-model for controlled, default* props for uncontrolled
PartsComponents split into Root, Trigger, Content, Portal, etc.
forceMountKeep element in DOM for animation libraries
VirtualizationOptimize large lists (Combobox, Listbox, Tree) with virtual scrolling
Context InjectionAccess component context from child components

Installation

// nuxt.config.ts (auto-imports all components)
export default defineNuxtConfig({
  modules: ['reka-ui/nuxt']
})
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

<!-- 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>
<!-- 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>
<!-- asChild for custom trigger element -->
<DialogTrigger as-child>
  <button class="my-custom-button">Open</button>
</DialogTrigger>

Recent Updates (v2.6.0-v2.8.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


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

What ships with it: 53 files

196.4 KB alongside SKILL.md, 1 of them executable

13 more files not listed here. See all 53 in the repository.

Keep looking

Skills are one crate of 326,629. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.