mrkeyoor.com_
Thu 17 Sept 18:40 UTC
Webevaluationupdated 26 Aug 2026

ui review

shadcn/ui distributes editable interface components instead of hiding them inside a conventional component package. Its CLI copies styled source into your application, so your team can change the markup, behavior, and theme while using a shared registry format.

+494stars / 7d
Verdict

Our run installed 1,668 packages and used 1,506 MB for shadcn/ui, then both the build and test steps stopped at a missing Bun executable. That makes the repository a poor Node-only contributor checkout, even though the documented app CLI remains a sensible choice for teams prepared to own copied UI source. Choose a packaged library when centralized upgrades are more important than direct control.

We ran it

Lab card: what happened when we ran uiScreenshot of ui (ui.shadcn.com)
Install✓ · 43s1668 packages · 1506 MB
Build✗ · 43s
Tests✗ · 25sran, no count parsed
Repo5763 files~557,602 lines of source · 46.5 MB · 9 CI workflows

Answers from our run

Does ui build from source?

Dependencies installed in 43 seconds (1668 packages), and the build failed. We cloned commit b9938d9 into a clean Debian container with 3 CPUs and no project-specific setup.

Do ui's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use ui?

Teams expecting every shadcn v4 UI fix to arrive through one package upgrade: the introduction says the top component layer stays in your application for modification.

What are the alternatives to ui?

Chakra UI, Mantine, Radix Primitives. Our run installed 1,668 packages and used 1,506 MB for shadcn/ui, then both the build and test steps stopped at a missing Bun executable.

Setup3/5The app CLI is direct; our monorepo build required missing Bun
Docs5/5Detailed CLI, registry, monorepo, theming, and MCP guides
Community5/5122,161 stars with same-day code and issue activity
Maturity4/5Active v4 releases, with copied components still needing local QA

Discussed on

  1. hnShadcn/UI: A set of beautifully designed components that you can customize17 points

Who it’s for

Frontend teams adopting shadcn v4 that want a strong visual starting point and intend to maintain the copied source.
Design-system owners who need local control over markup, styling, and component composition.
Organizations distributing internal UI code through public or private shadcn registries.
Claude Code and other MCP users who want an assistant to search registries and add components.

Who it’s NOT for

Teams expecting every shadcn v4 UI fix to arrive through one package upgrade: the introduction says the top component layer stays in your application for modification.
Contributors who only have Node and pnpm available: our build and test commands both stopped when the v4 registry task called a missing bun executable.
Projects unwilling to test copied widgets in their own interaction patterns: open issue 11635 reports a Calendar remount that loses clicks in a custom Safari week picker.
Preact users who need the Base UI wrappers to type-check unchanged: open issue 11303 documents incompatible prop types in Input and Input Group.

Setup reality

Our pnpm install succeeded in 43 seconds, adding 1,668 packages and occupying 1,506 MB. The build failed after 43 seconds, and tests failed after 25 seconds. Both log tails reached the v4 registry work and then reported that bun was missing.

Using the published CLI is a smaller task than building this 5,763-file monorepo. npx shadcn@latest init configures an app, while private GitHub registries can use GitHub CLI credentials, GH_TOKEN, or GITHUB_TOKEN. MCP use requires configuration in the chosen client.

The checkout contained about 557,602 source lines across a 46.5 MB repository, 9 CI workflow files, and workspaces, with no Dockerfile or tests directory found by our scan. For this commit, Node 22 and pnpm were insufficient for the exercised build path because Bun was not on the container path.

Copied source gives you control and leaves you holding the diff

The 5,763-file shadcn/ui repository distributes component source that its CLI writes into your application. The introduction explicitly describes it as a way to build your own component library. A button, dialog, or calendar can be inspected and changed like any other local file. That is a cleaner answer than layers of overrides when a product needs different markup or behavior. It also changes the maintenance contract: your team owns the copied layer closest to the design system.

That ownership matters in a repository of 5,763 files and roughly 557,602 source lines. Headless dependencies can still receive fixes through package upgrades, according to the project docs, while edits made to the copied top layer stay local. You need a repeatable way to compare registry changes with your version. Teams that rarely revisit UI source may prefer a packaged library where an upgrade applies changes through one dependency.

The CLI supports six templates and three primitive bases

The shadcn v4 init command lists 6 templates: Next.js, Vite, TanStack Start, React Router, Laravel, and Astro. It also offers Base UI, Radix, or React Aria as the primitive base. The command configures dependencies, CSS variables, and the cn utility. add can preview a change with --dry-run, show a diff, or overwrite files when you choose, which makes the write step easier to review.

Configuration still deserves attention. A components.json file tells the CLI where to place components and how to rewrite imports. Several choices, including the style, base color, and whether theming uses CSS variables, cannot be changed in place after initialization according to the docs. In a monorepo, every workspace needs its own configuration, and shared aliases must agree. That is manageable, but it rewards deciding the directory and theme model before adding dozens of components.

What happened when we ran it

Our measurement setup was an unprivileged Debian sandbox with 3 CPUs, 8 GB of RAM, Node 22, no secrets, and commit b9938d9. We measured a 43-second install of 1,668 pnpm packages using 1,506 MB on disk. The checkout itself was 46.5 MB. Installation succeeded, so dependency resolution was not the step that stopped the run.

The build exited with code 1 after 43 seconds. Three of 4 reported tasks succeeded before the v4 app printed sh: 1: bun: not found. The tail also showed generated TypeScript declaration files, then an ELIFECYCLE failure. The log establishes that the executable was absent from the container path. It does not show a component compiler error as the final failure, and it does not establish why Bun was not installed.

Tests exited with code 1 after 25 seconds at the same boundary. Their registry:build chain built the React package, helpers, and CLI, then attempted bun run ./scripts/build-registry and failed with spawn ENOENT. Our scan found 9 CI workflow files, monorepo workspaces, no Dockerfile, and no tests directory. Those signals do not replace the command result: the supplied test step did not complete in our fresh Node 22 image.

MCP can install registry code from five documented clients

The shadcn v4 MCP guide names 5 clients: Claude Code, Cursor, VS Code, Codex, and OpenCode. Once configured, the server can browse, search, and install items from the standard registry or compatible third-party registries. Claude Code gets a dedicated initialization command and can inspect the server through /mcp. Codex needs a manual entry in its configuration file because the shadcn CLI cannot update that file automatically.

Private registries add a credential boundary. The August 2026 release accepts GitHub CLI credentials or GH_TOKEN and GITHUB_TOKEN, with read-only repository access recommended. The same registry may carry components, feature kits, or agent rules. Since an assistant can cause files and dependencies to be added, registry trust and diff review belong in the normal code-review process. MCP shortens the request, but the resulting source still needs the checks applied to any application change.

Open issues show why copied components need product tests

GitHub listed 2,330 issues and pull requests when we checked; issue 11635 reports that inline slot functions make Calendar rebuild its DOM during a parent render. The reporter reproduced lost clicks in Safari when a custom week picker updated hover state between pointer events. The stock single-date example did not reveal the behavior. This is a useful warning about adopting examples: accessibility and interaction testing must cover the way your product composes a component.

Issue 11303 describes a different edge. Some Base UI wrappers declare ordinary React element props instead of the primitive's props, and the reporter shows Input failing under Preact compatibility types. The issue was open when checked and had 2 comments. Neither report proves every component is unreliable. Both show why source ownership is work as well as freedom, especially after local composition, framework substitutions, or type changes.

August 2026 activity points to an active, fast-changing project

GitHub recorded a push on August 26, 2026, and listed 122,161 stars plus 2,330 combined open issues and pull requests. Release shadcn@4.19.0 was published on August 21. Its changes added private GitHub registry support and a command for migrating a project's base color. Same-day issue activity and a release 5 days earlier are better health signals than the release tag alone.

The project earns a trial when your team wants editable UI source, a shared registry format, and optional MCP access. Start with representative interactive components, settle the 3 primitive-base and theme choices, then test keyboard, focus, mobile, and browser behavior in your own compositions. If your maintenance process expects a single package upgrade to carry upstream UI changes, Chakra UI or Mantine offers a clearer fit.

Alternatives

ProjectWhat it isPick it when
Chakra UIA packaged React component system with theme tokens and composable styling.pick this instead when versioned package updates matter more than editing copied component source.
Mantine gh↗A broad React library covering components, hooks, forms, and utilities.pick this instead when you want a larger package-managed toolkit with fewer local component files.
Radix PrimitivesUnstyled React primitives for teams that want to supply the visual layer themselves.pick this instead when accessible behavior primitives are useful but shadcn's styling and registry workflow are not.

What people are saying

  1. [velocity-scout] czm15053/linuxdo-idea-ui
  2. [github-trending] slint-ui/slint
  3. [github-trending] ibelick/ui-skills
  4. [velocity-scout] shadcn-ui/chatbot-template
  5. [velocity-scout] zhu1090093659/dsh-web-ui
  6. [github-trending] 0xJacky/nginx-ui

Sources

  1. shadcn/ui repository and README
  2. shadcn/ui introduction
  3. shadcn CLI documentation
  4. shadcn MCP server documentation
  5. shadcn 4.19.0 release
  6. Calendar remount issue 11635
  7. Base UI prop type issue 11303

More web reviews

WebKit · js-cookie · ionic-framework · pixijs · django-rest-framework · gin · the whole board →