shadcn▌
pproenca/dot-skills · updated Apr 8, 2026
58 community-maintained best practices for shadcn/ui component development, organized by priority and impact.
- ›Covers 10 rule categories spanning CLI setup, component architecture, accessibility, styling, forms, data display, layout, composition, performance, and state management
- ›Each rule includes specific guidance on Radix primitives, Tailwind styling, React Hook Form integration, and accessibility compliance
- ›Prioritized by impact: CRITICAL rules for setup and architecture, HIGH for
shadcn/ui Community Best Practices
Comprehensive best practices guide for shadcn/ui applications, maintained by the shadcn/ui community. Contains 58 rules across 10 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
- Installing and configuring shadcn/ui in a project
- Writing new shadcn/ui components or composing primitives
- Implementing forms with React Hook Form and Zod validation
- Building data tables or handling large dataset displays
- Customizing themes or adding dark mode support
- Reviewing code for accessibility compliance
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | CLI & Project Setup | CRITICAL | setup- |
| 2 | Component Architecture | CRITICAL | arch- |
| 3 | Accessibility Preservation | CRITICAL | ally- |
| 4 | Styling & Theming | HIGH | style- |
| 5 | Form Patterns | HIGH | form- |
| 6 | Data Display | MEDIUM-HIGH | data- |
| 7 | Layout & Navigation | MEDIUM | layout- |
| 8 | Component Composition | MEDIUM | comp- |
| 9 | Performance Optimization | MEDIUM | perf- |
| 10 | State Management | LOW-MEDIUM | state- |
Quick Reference
1. CLI & Project Setup (CRITICAL)
setup-components-json- Configure components.json before adding componentssetup-path-aliases- Configure TypeScript path aliases to match components.jsonsetup-cn-utility- Create the cn utility before using componentssetup-use-cli-not-copy- Use CLI to add components instead of copy-pastesetup-css-variables-theme- Enable CSS variables for consistent themingsetup-rsc-configuration- Set RSC flag based on framework support
2. Component Architecture (CRITICAL)
arch-use-asChild-for-custom-triggers- Use asChild prop for custom trigger elementsarch-preserve-radix-primitive-structure- Maintain Radix compound component hierarchyarch-extend-variants-with-cva- Use Class Variance Authority for type-safe variantsarch-use-cn-for-class-merging- Use cn() utility for safe Tailwind class mergingarch-forward-refs-for-composable-components- Forward refs for form and focus integrationarch-isolate-component-variants- Separate base styles from variant-specific styles
3. Accessibility Preservation (CRITICAL)
ally-preserve-aria-attributes- Keep Radix ARIA attributes intactally-provide-sr-only-labels- Add screen reader labels for icon buttonsally-maintain-focus-management- Preserve focus trapping in modalsally-preserve-keyboard-navigation- Keep WAI-ARIA keyboard patternsally-ensure-color-contrast- Maintain WCAG color contrast ratiosally-dialog-title-required- Always include DialogTitle for screen readersally-form-field-labels- Associate labels with form controlsally-aria-invalid-errors- Use aria-invalid for form error statesally-checkbox-label-association- Wrap Checkbox with Label for click targetally-focus-visible-styles- Preserve focus visible styles for keyboard navigation
4. Styling & Theming (HIGH)
style-use-css-variables-for-theming- Use CSS variables for theme colorsstyle-avoid-important-overrides- Never use !important for style overridesstyle-use-tailwind-theme-extend- Extend Tailwind theme for design tokensstyle-consistent-spacing-scale- Use consistent Tailwind spacing scalestyle-responsive-design-patterns- Apply mobile-first responsive designstyle-dark-mode-support- Support dark mode with CSS variables
5. Form Patterns (HIGH)
form-use-react-hook-form-integration- Integrate with React Hook Formform-use-zod-for-schema-validation- Use Zod for type-safe validationform-show-validation-errors-correctly- Show errors at appropriate timesform-handle-async-validation- Debounce async validation callsform-reset-form-state-correctly- Reset form state after submission
6. Data Display (MEDIUM-HIGH)
data-use-tanstack-table-for-complex-tables- Use TanStack Table for sorting/filteringdata-virtualize-large-lists- Virtualize lists with 100+ itemsdata-use-skeleton-loading-states- Use Skeleton for loading statesdata-paginate-server-side- Paginate large datasets server-sidedata-empty-states-with-guidance- Provide actionable empty states
7. Layout & Navigation (MEDIUM)
layout-sidebar-provider- Wrap layout with SidebarProviderlayout-sidebar-collapsible- Configure sidebar collapsible behaviorlayout-sidebar-groups- Organize sidebar navigation with groupslayout-sheet-mobile-nav- Use Sheet for mobile navigation overlaylayout-breadcrumb-navigation- Implement breadcrumbs for deep navigation
8. Component Composition (MEDIUM)
comp-compose-with-compound-components- Use compound component patternscomp-use-drawer-for-mobile-modals- Use Drawer on mobile devicescomp-combine-command-with-popover- Create searchable selects with Commandcomp-nest-dialogs-correctly- Manage nested dialog focus correctlycomp-create-reusable-form-fields- Extract reusable form field componentscomp-use-slot-pattern-for-flexibility- Use slot pattern for flexible content
9. Performance Optimization (MEDIUM)
perf-lazy-load-heavy-components- Lazy load components over 50KBperf-memoize-expensive-renders- Memoize list items and expensive componentsperf-optimize-icon-imports- Use direct imports for Lucide iconsperf-avoid-unnecessary-rerenders-in-forms- Isolate form field watchingperf-debounce-search-inputs- Debounce search and filter inputs
10. State Management (LOW-MEDIUM)
state-prefer-uncontrolled-for-simple-inputs- Use uncontrolled for simple formsstate-lift-state-to-appropriate-level- Lift state to lowest common ancestorstate-use-controlled-dialog-state- Control dialogs for programmatic accessstate-colocate-state-with-components- Keep state close to where it's used
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Full Compiled Document
For a single-file reference containing all rules, see AGENTS.md.
Reference Files
| File | Description |
|---|---|
| AGENTS.md | Complete compiled guide with all rules |
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.5★★★★★41 reviews- ★★★★★Ganesh Mohane· Dec 20, 2024
shadcn fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- ★★★★★Lucas Taylor· Dec 20, 2024
Registry listing for shadcn matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Omar Jackson· Dec 12, 2024
shadcn has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Rahul Santra· Nov 11, 2024
shadcn is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Min Zhang· Nov 3, 2024
Useful defaults in shadcn — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Jin Gonzalez· Oct 22, 2024
I recommend shadcn for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Pratham Ware· Oct 2, 2024
Keeps context tight: shadcn is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Xiao Patel· Sep 13, 2024
Keeps context tight: shadcn is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Olivia Garcia· Sep 5, 2024
I recommend shadcn for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Diego Khanna· Sep 1, 2024
shadcn fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
showing 1-10 of 41