PluginBench
Skill
Pass
Audit score 90

radix-ui-design-system

sickn33/agentic-awesome-skills

Build accessible, unstyled design systems with Radix UI primitives and full customization control.

What is radix-ui-design-system?

Radix UI Design System provides headless React components for building production-grade, accessible UI libraries from scratch. Use it when you need complete control over styling and behavior, WCAG compliance, and complex interactive components like dialogs, dropdowns, and tabs.

  • Provides unstyled, accessible React primitives (Dialog, Dropdown, Select, Tabs, etc.)
  • Enables full CSS customization via CSS variables, Tailwind, or styled-components
  • Implements compound component patterns for complex interactive UIs
  • Handles keyboard navigation and ARIA attributes automatically
  • Supports theming strategies for design system consistency
  • Works with form libraries like React Hook Form for integrated form handling

How to install radix-ui-design-system

npx skills add https://github.com/sickn33/agentic-awesome-skills --skill radix-ui-design-system
Prerequisites
  • React 16.8 or higher (hooks required)
  • Node.js and npm/yarn for package installation
  • Basic knowledge of React component composition
  • CSS or Tailwind for styling primitives
Claude Code
Cursor
Windsurf
Cline

How to use radix-ui-design-system

  1. 1.Install the skill via npx skills add
  2. 2.Import Radix UI primitives from @radix-ui packages (e.g., @radix-ui/react-dialog)
  3. 3.Wrap components with Root, Trigger, and Portal elements following compound patterns
  4. 4.Apply custom CSS classes to style primitives
  5. 5.Integrate with form libraries or state management as needed
  6. 6.Test keyboard navigation and screen reader compatibility

Use cases

Good for
  • Creating a custom design system from scratch with brand-specific styling
  • Building accessible component libraries for enterprise applications
  • Implementing complex interactive features like command palettes or nested menus
  • Migrating from pre-styled component libraries to unstyled primitives
  • Setting up WCAG 2.1 AA/AAA compliant interfaces
Who it's for
  • Frontend engineers building design systems
  • React developers needing accessibility-first components
  • Teams requiring full styling control and customization
  • Projects with strict WCAG compliance requirements
  • Developers migrating from styled component libraries

radix-ui-design-system FAQ

When should I use Radix UI instead of shadcn/ui or Mantine?

Use Radix UI when you need complete styling control and are building a custom design system. shadcn/ui and Mantine provide pre-styled components; Radix gives you unstyled primitives with full customization.

Does Radix UI include styling?

No, Radix UI is headless—it provides behavior and accessibility only. You style components yourself using CSS, Tailwind, CSS-in-JS, or any styling approach.

Is Radix UI accessible by default?

Yes, Radix UI handles ARIA attributes, keyboard navigation, and focus management automatically, supporting WCAG 2.1 AA/AAA compliance out of the box.

Can I use Radix UI with TypeScript?

Yes, Radix UI has full TypeScript support with proper type definitions for all components and props.

What React versions does Radix UI support?

Radix UI requires React 16.8 or higher due to its use of hooks. It does not support class components or older React versions.

Full instructions (SKILL.md)

Source of truth, from sickn33/agentic-awesome-skills.


name: radix-ui-design-system description: "Build accessible design systems with Radix UI primitives. Headless component customization, theming strategies, and compound component patterns for production-grade UI libraries." risk: safe source: self date_added: "2026-02-27"

Radix UI Design System

Build production-ready, accessible design systems using Radix UI primitives with full customization control and zero style opinions.

Detailed Guide

Read the detailed guide before executing this skill. It retains the complete procedure and reference material. Treat its safety, prerequisites, and validation requirements as mandatory. For focused work, load the relevant sections; for end-to-end work, read the guide completely.

When to Use This Skill

  • Creating a custom design system from scratch
  • Building accessible UI component libraries
  • Implementing complex interactive components (Dialog, Dropdown, Tabs, etc.)
  • Migrating from styled component libraries to unstyled primitives
  • Setting up theming systems with CSS variables or Tailwind
  • Need full control over component behavior and styling
  • Building applications requiring WCAG 2.1 AA/AAA compliance

Do not use this skill when

  • You need pre-styled components out of the box (use shadcn/ui, Mantine, etc.)
  • Building simple static pages without interactivity
  • The project doesn't use React 16.8+ (Radix requires hooks)
  • You need components for frameworks other than React

Real-World Examples

Example 1: Command Palette (Combo Dialog)

import * as Dialog from '@radix-ui/react-dialog';
import { Command } from 'cmdk';

export function CommandPalette() {
  const [open, setOpen] = useState(false);

  useEffect(() => {
    const down = (e: KeyboardEvent) => {
      if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {
        e.preventDefault();
        setOpen((open) => !open);
      }
    };
    document.addEventListener('keydown', down);
    return () => document.removeEventListener('keydown', down);
  }, []);

  return (
    <Dialog.Root open={open} onOpenChange={setOpen}>
      <Dialog.Portal>
        <Dialog.Overlay className="fixed inset-0 bg-black/50" />
        <Dialog.Content className="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2">
          <Command>
            <Command.Input placeholder="Type a command..." />
            <Command.List>
              <Command.Empty>No results found.</Command.Empty>
              <Command.Group heading="Suggestions">
                <Command.Item>Calendar</Command.Item>
                <Command.Item>Search Emoji</Command.Item>
              </Command.Group>
            </Command.List>
          </Command>
        </Dialog.Content>
      </Dialog.Portal>
    </Dialog.Root>
  );
}

Example 2: Dropdown Menu with Icons

import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
import { DotsHorizontalIcon } from '@radix-ui/react-icons';

export function ActionsMenu() {
  return (
    <DropdownMenu.Root>
      <DropdownMenu.Trigger asChild>
        <button className="icon-button" aria-label="Actions">
          <DotsHorizontalIcon />
        </button>
      </DropdownMenu.Trigger>

      <DropdownMenu.Portal>
        <DropdownMenu.Content className="dropdown-content" align="end">
          <DropdownMenu.Item className="dropdown-item">
            Edit
          </DropdownMenu.Item>
          <DropdownMenu.Item className="dropdown-item">
            Duplicate
          </DropdownMenu.Item>
          <DropdownMenu.Separator className="dropdown-separator" />
          <DropdownMenu.Item className="dropdown-item text-red-500">
            Delete
          </DropdownMenu.Item>
        </DropdownMenu.Content>
      </DropdownMenu.Portal>
    </DropdownMenu.Root>
  );
}

Example 3: Form with Radix Select + React Hook Form

import * as Select from '@radix-ui/react-select';
import { useForm, Controller } from 'react-hook-form';

interface FormData {
  country: string;
}

export function CountryForm() {
  const { control, handleSubmit } = useForm<FormData>();

  return (
    <form onSubmit={handleSubmit((data) => console.log(data))}>
      <Controller
        name="country"
        control={control}
        render={({ field }) => (
          <Select.Root onValueChange={field.onChange} value={field.value}>
            <Select.Trigger className="select-trigger">
              <Select.Value placeholder="Select a country" />
              <Select.Icon />
            </Select.Trigger>
            
            <Select.Portal>
              <Select.Content className="select-content">
                <Select.Viewport>
                  <Select.Item value="us">United States</Select.Item>
                  <Select.Item value="ca">Canada</Select.Item>
                  <Select.Item value="uk">United Kingdom</Select.Item>
                </Select.Viewport>
              </Select.Content>
            </Select.Portal>
          </Select.Root>
        )}
      />
      <button type="submit">Submit</button>
    </form>
  );
}

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.