Setting Up shadcn/ui & Tailwind CSS
Unlike traditional component libraries distributed as compiled npm packages (e.g., Material UI, Chakra), shadcn/ui provides un-styled, accessible component primitives that are copied directly into your source repository. You own the code, allowing complete customization of styles and DOM structure.
shadcn/ui combines Radix UI headless primitives (handling ARIA attributes and focus management) with Tailwind CSS for utility styling. Using the cn() helper utility (clsx + tailwind-merge), components gracefully merge default library styles with custom caller-provided className overrides.
Exercise
Initialize a custom Button component using cn() that merges base styles with variant and size props.
Check your understanding
How does shadcn/ui differ from traditional UI component libraries?Show answerHide answer
Answer
Components are copied directly into your project source code rather than installed as an opaque npm dependency.What role does tailwind-merge play in the cn() utility function?Show answerHide answer
Answer
It eliminates conflicting Tailwind utility classes passed in props (e.g., resolving px-4 and px-6 to px-6).