Open-source project
shadcn-ui/ui avatar
shadcn-ui/ui

shadcn/ui: React Components You Own Rather Than Import

A set of beautifully-designed, accessible components and a code distribution platform. Works with your favorite frameworks. Open Source. Open Code.

124,584 stars11,227 forksTypeScriptMIT

At a glance

What is it?
shadcn/ui is an MIT-licensed collection of React components built on an Open Code model: instead of publishing an npm package you depend on, it distributes components as source code you copy into your project. This makes every component directly modifiable, but means tracking upstream changes is a manual task.
Who is it for?
shadcn/ui is the right starting point when your team needs full control over component source and can afford to review upstream changes manually. It is a poor fit when you need centralized, versioned upgrades across many projects or when your team lacks the React expertise to maintain a custom component library.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Open Code Distribution Model

Most component libraries are distributed as npm packages: you add them to package.json, import from the package name, and receive updates by running a version bump. shadcn/ui works differently. The README describes it as Open Source and Open Code, with the explicit instruction to "use this to build your own component library."

The practical effect is that running the CLI copies a component's source directly into your project's directory. After that, the component is yours. There is no upstream package to update, no API contract to respect, and no import path from a node_modules folder. If you need to change a component's behavior, you edit the file in your own repository.

This model is the central design decision and the main source of both its appeal and its limitation. Teams that want full ownership of their component implementation, and are comfortable reading and modifying React source code, get exactly that. Teams that expect a major-version bump to propagate accessibility fixes and new variants across all their projects automatically will not get that here.

Repository Structure and the Monorepo Layout

The repository is a pnpm monorepo managed with Turborepo. The top-level workspace configuration in pnpm-workspace.yaml covers apps/ and packages/. The packages/ directory contains the `shadcn` CLI package, which is the tool engineers run to add components. The apps/ directory contains the documentation site.

The top-level entries also include a `skills/` directory and a `templates/` directory. A `scripts/sync-templates.sh` script in the package.json synchronizes those templates. The registry build pipeline, visible in scripts like `pnpm --filter=v4 registry:build`, builds the component registry that the CLI reads when adding components.

The release workflow is defined in the `.changeset/` directory, using the Changesets tool. Recent releases include [email protected] (dated 2026-09-04) and [email protected] (dated 2026-09-02), with a release cadence that suggests active development. The last push to the repository was on 2026-09-24.

Adding Components: What the CLI Does

The documentation for the CLI is at ui.shadcn.com/docs, which the README links to as the canonical reference. The README itself does not reproduce install commands.

Based on the repository's package structure, the `shadcn` package in `packages/shadcn/` is the published CLI. Engineers run it to initialize a project configuration and to add individual components. Each time a component is added, its source file is written to the project's components directory, along with any dependencies it needs.

The `registry:health` and `registry:capture` scripts in the monorepo's package.json suggest that the component registry is a maintained data source that the CLI reads to know which components are available and what files each one requires. This registry build step is what separates shadcn/ui from a simple repository of component files: the distribution mechanism is the CLI reading from a structured registry, not npm.

Customization and What You Can Change

Once a component is in your project, the scope of customization is unlimited because you own the source. The README describes the components as "beautifully designed" and invites engineers to "make it your own." This is not marketing language about theming; it is a literal statement about the distribution model.

In practice this means changing the component's props, restructuring its markup, adding new variants, or replacing the underlying primitive entirely. There is no contract with the upstream library that your changes would break. The design trade-off is that when shadcn/ui fixes a bug in a component or adds an important variant, you do not receive that change automatically. You either copy the new version manually, merge the diff yourself, or stay on the version you have.

For design systems that are meant to be stable and internally consistent across a large codebase, this model can work well. For teams that rely on a shared npm package to propagate fixes, the manual synchronization cost is a genuine maintenance burden.

Limitations and Cases Where shadcn/ui Is the Wrong Choice

The Open Code model means there is no version to pin for security fixes. When a library you import releases a patch for a vulnerability, you run npm update. When shadcn/ui changes a component, you have to notice, understand the change, and apply it. For teams managing many projects with shared components, this can become significant work.

The README does not document which frameworks are supported, though it states the project works with "your favorite frameworks" and that documentation is at ui.shadcn.com/docs. Engineering teams using frameworks not covered by the CLI will need to adapt the component source manually.

Framework lock-in is also a factor. The components are React-specific. Teams using Vue, Svelte, or Angular cannot use the components without rewriting them.

shadcn/ui Compared to Material UI

Material UI (MUI) is one of the most widely-used React component libraries. It ships as an npm package with Google's Material Design specifications implemented as React components. You install it, import from it, and receive updates by bumping the package version. The library maintains a versioned API across releases.

The fundamental difference from shadcn/ui is ownership of the source. Material UI is a dependency. shadcn/ui is copied source you own. The choice between them reflects whether your team's priority is having a stable, versioned library maintained by someone else, or having components that are entirely under your control and can be modified without a fork.

The README's phrasing, "use this to build your own component library," positions shadcn/ui as a foundation or starting kit rather than a finished library. Material UI, by contrast, is intended to be used as-is or minimally themed.

License and Maintenance

shadcn/ui is licensed under the MIT license. This is one of the most permissive open-source licenses: it allows use, copying, modification, and distribution with no requirement to open-source derivative work. For product teams incorporating the component source into a commercial application, the MIT license imposes no material constraints beyond attribution.

The repository is under active development. The last push was on 2026-09-24, and recent releases follow a frequent minor-version cadence: three releases shipped in early September 2026. The `.changeset/` directory manages the changelog, and the `.kodiak.toml` file suggests automated pull request merging is in place.

The README does not document a long-term support policy or a deprecation schedule. Teams that need assurance about API stability over a multi-year horizon should evaluate the project's own documentation and changelog for signals.

Editorial conclusion

shadcn/ui is the right starting point when your team needs full control over component source and can afford to review upstream changes manually. It is a poor fit when you need centralized, versioned upgrades across many projects or when your team lacks the React expertise to maintain a custom component library. Before starting, confirm that your framework appears on the supported list at ui.shadcn.com, because the CLI generates framework-specific integration code.

Frequently asked questions

shadcn/ui vs Headless UI: what is the difference?

shadcn/ui copies component source directly into your project under an Open Code model, so you own and modify it freely. The README does not describe Headless UI; the core distinction is that shadcn/ui components become part of your codebase rather than remaining in node_modules.

shadcn/ui vs Material UI: which should I choose?

shadcn/ui distributes components as copyable source under the MIT license, giving you full ownership and no versioned dependency. Material UI is an npm package with a versioned API. The choice depends on whether your team wants to own the component source or maintain it as an external dependency.

Is shadcn/ui free?

Yes. The repository is licensed under the MIT license, which allows use, modification, and distribution in commercial and non-commercial projects.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
For maintainers

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/shadcn-ui-ui.svg)](https://hysenlabs.com/projects/shadcn-ui-ui)
Community notes

Community notes