Communitygithub.com

nkurunziza-saddy/pick-library

Picks the right library for a frontend task from a curated, status-checked list, instead of hand-rolling it or installing an abandoned package. Use it when the user asks "what should I use for…", "is there a library for…", or names a package, and when you are about to build a toast, command menu, drawer, date picker, table, virtual list, drag and drop, chart, OTP input, animated number, theme switch, form validation…

What is pick-library?

pick-library is a Claude Code agent skill that picks the right library for a frontend task from a curated, status-checked list, instead of hand-rolling it or installing an abandoned package. Use it when the user asks "what should I use for…", "is there a library for…", or names a package, and when you are about to build a toast, command menu, drawer, date picker, table, virtual list, drag and drop, chart, OTP input, animated number, theme switch, form validation….

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nkurunziza-saddy/hmm-interfaces/tree/HEAD/pick-library

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Pick a library

Before any decision, apply product-ui §1 (the taste journal and precedence) and §5 (which skill owns what). A journal rule that names a library wins.

When invoked with no task, ask for one in a single line and stop.

Decision order

Walk these top to bottom. Stop at the first step that fully solves the task.

  1. What is already installed? Read package.json. If a listed library or a competitor already does the job, use it. Flag a better pick in one line, and never swap a dependency unasked. Why: a second library for the same job doubles the bundle and the conventions.
  2. Does the platform fully solve it? Check the table below. Why: the platform has no bundle cost, no upgrade path and no abandonment risk.
  3. Does the list have an entry? Open references/catalogue.md, find the category, and take the entry marked Default. Recommend one library, not a menu.
  4. Is that entry maintained? Check the status column. If it says Unmaintained, never recommend it; use the replacement named in the entry.
  5. Nothing fits? Say "this task isn't on the list", then pick from your own knowledge and run the verification below on it. Why: an unchecked package is the usual way abandoned code gets in.

"Fully solves" means every requirement in the task is met, including keyboard, focus and screen-reader behaviour. If one requirement fails, go to step 3.

Platform first

TaskPlatform answerMove to a library when
Modal<dialog> with showModal()You need stacked dialogs with animated exit across browsers you support, or non-modal focus management
Popover, dropdown panel, tooltip-like cardpopover attribute, plus CSS anchor positioning where supportedYou need collision flipping everywhere, or a roving-focus menu
Accordion, disclosure<details name>You need controlled state or animated height beyond interpolate-size
Dark mode with no toggleprefers-color-scheme, color-scheme, light-dark()The user picks the theme by hand and it must persist
Date, time, month entry<input type="date"> and its siblingsYou need ranges, a custom calendar, or a consistent look
Number formatting, relative time, plurals, listsIntl.NumberFormat, RelativeTimeFormat, PluralRules, ListFormatNever. Always use Intl
One-time code, single field<input autocomplete="one-time-code" inputmode="numeric">You need one box per digit
Enter, exit and layout motionCSS transitions, @starting-style, WAAPI, View TransitionsYou need springs, gestures or interruptible layout animation
Form validationConstraint validation (required, pattern, setCustomValidity)You need cross-field or async rules, or a typed schema
Select with few options<select>You need search, multi-select or rich rows
Sticky headers, scroll snap, lazy listsCSS position: sticky, scroll-snap, content-visibility: autoThe list holds 1,000+ rows

Pairs

BrokenFixedWhy
A <div> modal with a hand-written focus trap<dialog> and showModal()Focus trap, Esc and inert background come free
npm i react-beautiful-dnd@dnd-kit/reactThe first is deprecated and unmaintained
npm i vaul for a drawerBase UI Drawer, or <dialog> styled as a sheetvaul's own README says it is unmaintained
A toast built from a modal libraryBase UI ToastStacking, pause on hover and swipe are already solved
setInterval counting up a numberNumberFlowDigits roll with correct layout and reduced motion
5,000 <tr> rendered at onceTanStack Virtual under TanStack Table, or Virtuoso for listsRendering cost grows with rows, not with the viewport
new Intl.NumberFormat replaced by a currency packageIntl.NumberFormatLocale rules ship in the browser

Verify before you recommend

Run this on any package, listed or not. A catalogue status can be older than your session.

npm view <pkg> time.modified license version
  • Maintained: last publish within 12 months, or a repo push within 6 months with a published release.
  • Slow: feature-complete, no publish for 12–24 months, repo still answering issues. Usable. Say it is slow.
  • Unmaintained: archived, a README that says so, or no publish for 24+ months with open breakage. Never recommend it.
  • Read the licence. Report anything that is not MIT, ISC, BSD or Apache-2.0 (MPL-2.0 and AGPL need a note).
  • Check peer dependencies against the project's React version.

Answer format

One block, no menu:

Base UI Toast for toasts. It stacks, pauses on hover and swipes away. Not for anything needing action; that stays on screen. MIT, maintained. npm i @base-ui/react.

Always give: what it is for, when not to use it, licence, status with the date you saw.

Before you finish

  • package.json was read, and the pick does not duplicate an installed library.
  • The platform answer was checked and, if skipped, the reason is one clause.
  • npm view ran on the pick, and the status in the answer is today's, not the catalogue's.
  • Nothing marked Unmaintained is recommended.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

nkurunziza-saddy/break

Stress-tests a piece of UI with worst-case data and every reachable state, then reports what broke with a numbered fix for each. Use it when the user types /break, or asks to "break this", "stress-test", "try the worst case", "what happens with long names", "check the empty and error states" or "find the edge cases" on a component or screen.

nkurunziza-saddy/layout

Structure and space in product UI on the web. It sets the spacing scale, grouping, alignment, density (compact or comfortable), hit areas, app shells (sidebar, toolbar, content, inspector), max widths, container-query responsiveness, dropdown and popover sizing, room for long and translated text, layout stability (no shift on load) and sticky elements that must not cover focus.

nkurunziza-saddy/motion

Builds motion for product UI on the web. It decides whether something should move at all, then why, which tool (CSS transition, WAAPI, Motion, spring), which properties, curve, duration, interruption, exit and reduced-motion path, and it writes the code. Also covers stagger and choreography, gestures (drag, flick, sheets), motion tokens and animation performance.

nkurunziza-saddy/surfaces

What product UI is made of on the web. It sets elevation levels with exact shadow recipes for light and dark mode, when to use a shadow and when a border, the transparent border for forced-colours mode, a small radius scale with concentric nesting, image outlines, every interactive state as a surface change (hover, pressed, selected, disabled, focus-visible), icons (one set, currentColor, outline and fill, stroke tha…

Related Skills