Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Pick the right library for a given frontend task from a curated, opinionated list — numbers, OTP inputs, charts, command menus, virtualization, drag and drop, toasts, state, styling, and more. Only runs when explicitly invoked; it does not trigger on its own.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -36% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -36% | 0% |
| case-23 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 64% | 0% |
A lookup skill. When invoked with a task ("I need toasts", "what should I use for drag and drop?"), match the task to the curated list below and recommend the library. These are deliberate, taste-driven picks — don't substitute alternatives outside this list unless the user asks for one or the task genuinely isn't covered.
package.json first. If the project already uses a listed library, use it. If it uses a competitor (e.g. react-window instead of Virtuoso), flag the recommendation but don't churn the dependency without being asked.| Task | Library | | --- | --- | | Unstyled, accessible UI components (dialogs, popovers, menus, selects…) | base-ui | | Command menus (⌘K palettes) | cmdk | | Toasts / notifications | Sonner | | One-time password / verification code inputs | input-otp | | Customizable GUIs / control panels | Leva — dialkit is an alternative |
| Task | Library | | --- | --- | | General-purpose animation (springs, layout animations, enter/exit) | motion (Framer Motion) | | Animating numbers (counters, prices, stats) | NumberFlow | | Animated text components | torph | | 3D globes | Cobe | | Dynamic OG images (HTML/CSS → SVG/PNG) | Satori | | Syntax highlighting | shiki |
Reach for motion when you need springs, layout animations, exit animations, or gesture-driven values. A simple hover or fade doesn't need it — plain CSS transitions are the right tool there.
| Task | Library | | --- | --- | | Real-time / streaming charts | Liveline | | General charts (static or interactive dashboards) | recharts |
The split: if data points arrive live and the chart scrolls with time, use Liveline. Everything else is recharts.
| Task | Library | | --- | --- | | Drag and drop | dnd kit | | Virtualization (long lists, large tables) | Virtuoso |
| Task | Library | | --- | --- | | State management | zustand | | Constructing className strings conditionally | clsx | | Type-safe, variant-driven styling for Tailwind | cva | | Theme switching / dark mode (no flash on load) | next-themes |
The styling split: clsx for ad-hoc conditional classes; cva when a component has real variants (size, intent, state) that deserve a typed API. They compose — cva uses clsx-style inputs internally.
<div>-based dropdown/dialog with manual focus handling → base-ui, which handles accessibility, focus trapping, and dismissal.useState-per-component web of props for shared state → zustand.Other measured skills in the registry, with their headline benchmark lift.