shadcn/ui
Components you copy into your repository and then own outright
shadcn/ui is a set of accessible React components distributed as source rather than as a package. The CLI writes the component into your project, where it becomes ordinary code you can edit. It also defines the registry format that most of the newer libraries in this directory publish through.
Why the distribution model matters
Every component library eventually asks you to fight its API to get the markup you want. shadcn/ui removes the fight by removing the boundary: the component is a file in your repository, so changing it is an edit rather than a feature request.
The cost is real and worth stating. You do not get upgrades. If an accessibility fix lands upstream, you have to notice and port it. Teams that treat these files as generated code and never revisit them slowly drift away from the source.
The registry is the bigger story
The registry format shadcn defines is now how a large part of the React ecosystem ships UI. A registry item is a JSON file listing files, dependencies and where each file lands, which is why the same CLI can install from any project that publishes one.
That is what makes third party registries work. Point the CLI at a URL and the files arrive in your repository under your conventions.
Reach for it when
- you want full control of the markup and the classes
- the project already runs Tailwind
- you are building your own design system and need a credible starting point
Watch out for
- there are no upgrades, so upstream fixes only reach you if you go and get them
- it assumes Tailwind, and retrofitting it into a CSS-in-JS codebase is not worth the effort
- the defaults are widely recognised, so a project that ships them untouched looks like every other one
Compare with these
- UI componentsFree tier
21st.dev
A searchable marketplace of community components with a prompt for each one
- react
- tailwind
- directory
Varies by component, most are MITRead - UI componentsFree
Radix Primitives
Unstyled, accessible behaviour for the components that are hard to get right
- react
- accessibility
- primitives
MITRead - UI componentsFree
Base UI
Headless primitives from the people behind MUI and Radix
- react
- headless
- accessibility
MITRead