# What changed in shadcn

> 129 changes in shadcn 3 to 4 from its official release notes, upgrade guides and advisories: 6 breaking, 7 deprecations, 3 security, 51 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/shadcn/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## shadcn 4

### Breaking changes

- Zod errors expose issues instead of errors. (4.22.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.22.0)
- shadcn/schema and @shadcn/registry/schema now export Zod 4 schemas. They no longer typecheck with Zod 3's z; on Zod 3, use the exported types and schema methods instead of z.infer and z.array. (4.22.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.22.0)
- Initialization installs cn and generates a lib/utils export; registry components import cn from the package. (4.21.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.0)
- Radius calculations use multiplication instead of addition. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)

### Security

- Custom registry headers are dropped on cross-origin redirects to prevent credential leakage. (4.13.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.13.1)
- File paths for registry items without an explicit target are validated to prevent path traversal. (4.13.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.13.1)
- Registry-supplied dependency strings can no longer inject flags during install. (4.13.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.13.1)

### Deprecations

- The --base-color flag is deprecated. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The create command is deprecated and becomes an alias of init. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The --no-base-style flag is deprecated. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The registry:build command is deprecated. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The registry:mcp command is deprecated. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The --css-variables flag is deprecated for shadcn add. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The --src-dir flag is deprecated. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)

### New APIs and options

- Adds the registry engine behind the CLI; shadcn/registry and shadcn/schema re-export it. (4.21.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.1)
- Adds a command to switch a project's base color. (4.19.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.19.0)
- Configure SOCKS4/SOCKS5 proxies for the registry HTTP stack with ALL_PROXY or all_proxy; non-SOCKS schemes are ignored. (4.17.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.17.0)
- Accepts explicit registry configuration instead of loading components.json. (4.16.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.16.0)
- Adds getRegistriesConfig for retrieving registries configuration. (4.16.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.16.0)
- Adds support for registries in package.json. (4.16.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.16.0)
- Adds a public API for installing registry items programmatically without invoking the CLI. (4.15.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.15.0)
- Adds support for Base UI Toast. (4.14.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.14.1)
- React Aria support is added. (4.13.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.13.1)
- Adds the scroll-fade utility. (4.12.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.12.0)
- Adds the shimmer utility. (4.12.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.12.0)
- Adds support for GitHub registries. (4.10.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.10.0)
- Adds the `npx shadcn eject` command. (4.9.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.9.0)
- Adds the rhea style for developers to use. (4.8.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.8.1)
- Adds include to registry.json. (4.8.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.8.0)
- Adds the shadcn registry validate command for validating registries. (4.8.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.8.0)
- Registry item targets can now contain alias placeholders. (4.7.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.7.0)
- Package imports are now supported. (4.7.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.7.0)
- Adds commands for working with shadcn presets. (4.6.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.6.0)
- Adds the --pointer option to enable cursor: pointer on buttons. (4.5.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.5.0)
- Adds the --only option to shadcn apply. (4.4.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.4.0)
- Adds the sera style for developers to use. (4.3.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.3.0)
- Adds the shadcn apply command. (4.2.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.2.0)
- Adds luma as a style developers can use. (4.1.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.1.2)
- Adds chartColor. (4.1.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.1.0)
- Presets now include fontHeading. (4.1.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.1.0)
- Adds a dependency field to registry:font entries. (4.0.7) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.7)
- Adds support for translucent menus. (4.0.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.3)
- Adds Astro template support. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds mauve as a base color option. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds mist as a base color option. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds monorepo support for Vite, Start, and React Router. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds olive as a base color option. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds support for preset code. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds the --diff option to the add command. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds the --dry-run option to the add command. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds the --view option to the add command. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds the shadcn docs command. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds the --base option to shadcn init. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds a --preset flag to the init command. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds a --reinstall flag for init. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds shadcn/skills. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds taupe as a base color option. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)

### Behavior and default changes

- Validation messages now use Zod 4's wording. (4.22.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.22.0)
- Skips npm audit and the funding check when installing or removing dependencies, or creating a project. (4.21.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.2)
- GitHub registries support private repositories using GitHub CLI credentials or GH_TOKEN. (4.19.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.19.0)
- Registries from package.json and components.json are merged, and registries can be added to package.json when components.json is absent. (4.18.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.18.0)
- shadcn add, search, view, and init resolve registries from package.json in memory without persisting them to components.json. (4.18.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.18.0)
- Results now include registry item titles, and fuzzy matching uses those titles. (4.16.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.16.2)
- Search params are forwarded to registries to support server-side dynamic search. (4.16.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.16.1)
- base-ui is now the default. (4.13.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.13.0)
- The search command is improved. (4.11.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.11.0)
- Registry fetches send `User-Agent: shadcn` so servers using HTTP content negotiation can reliably serve JSON to the CLI. (4.3.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.3.1)
- getTailwindCssFile falls back to config.tailwind.css. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- The info command outputs LLM-friendly output. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)

### Tooling

- Adds a command to replace clsx, tailwind-merge, and cnfast in Tailwind CSS v4 projects. (4.20.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.20.0)
- Adds support for icon migration. (4.14.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.14.0)
- The info command now includes preset information. (4.6.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.6.0)
- Templates can now be scaffolded from GitHub remotes. (4.0.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.2)
- Warns when running in a monorepo without cwd set. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Adds support for installing hooks, lib, and ui for workspaces. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)

### Fixes and other changes

- Search and list results now show the add command instead of [object Promise]. (4.21.5) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.5)
- Font items skip editing the layout with a warning when the edit cannot be made safely, instead of writing a broken layout. (4.21.4) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.4)
- The config edit is skipped with a warning when it cannot be made safely, instead of writing a broken config. (4.21.4) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.4)
- Fixes ERR_REQUIRE_CYCLE_MODULE when running the CLI with pnpm dlx on Windows. (4.21.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.3)
- Accepts components.json files that start with a UTF-8 byte order mark. (4.21.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.2)
- Accepts package.json files that start with a UTF-8 byte order mark. (4.21.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.2)
- Only rewrites links on the ui.shadcn.com host. (4.21.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.1)
- Fixes reduced motion handling when shimmer is used with a variant. (4.21.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.1)
- Preserves leading comments when running the command. (4.20.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.20.1)
- The official shadcn/ui website was added to the package metadata. (4.19.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.19.1)
- File scans skip unreadable directories instead of failing with EACCES. (4.18.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.18.0)
- Monorepo target resolution skips unreadable directories. (4.18.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.18.0)
- Fixes shadcn behavior for projects with unreadable permission files. (4.18.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.18.0)
- Creates nested output directories before writing when registry item names contain path segments, preventing ENOENT failures. (4.16.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.16.1)
- Preserves existing dependency specifiers in package.json when running the command. (4.11.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.11.1)
- RTL transforms preserve quotes in className literals. (4.8.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.8.3)
- Template handling was updated. (4.8.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.8.3)
- An error now suggests using the previous version. (4.7.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.7.0)
- Fixes apply in monorepos. (4.6.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.6.0)
- Fixes chartColor in presets. (4.4.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.4.0)
- Registry fetches send an Accept header so servers using HTTP content negotiation can reliably serve JSON to the CLI. (4.3.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.3.1)
- Runs template post-init hooks only for newly created projects. (4.3.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.3.1)
- Bundles @antfu/ni and tinyexec to fix a missing module error when using npx. (4.0.8) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.8)
- Handling of init URLs was updated. (4.0.5) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.5)
- Fixed Apple metadata files in the template. (4.0.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.1)
- Fixed an issue resolving fallback styles. (4.0.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.1)
- Changes handling of the apply directive inside a utility. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)
- Fixes keyboard key display in the tooltip. (4.0.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.0.0)

## shadcn 3

### Breaking changes

- Restricted blocks were removed. (3.8.4) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.4)
- Renames middleware to proxy for Next.js 16. (3.5.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.0)

### New APIs and options

- Adds RTL support. (3.8.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.0)
- Remix icons are now available for developers to use. (3.7.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.7.0)
- Adds a command for adding registries. (3.7.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.7.0)
- MCP support was added for opencode. (3.6.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.6.3)
- Phosphor icons were added. (3.6.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.6.2)
- Adds the npx shadcn create command. (3.6.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.6.0)
- Adds registry:base as an item type for registry entries. (3.6.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.6.0)
- Added support for color as var. (3.4.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.4.1)

### Behavior and default changes

- App names are now validated when creating an app. (3.6.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.6.3)
- Adding themes no longer installs the base style. (3.5.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.1)

### Tooling

- The migrate radix command was updated. (3.8.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.2)
- Adds Next.js 16 support to the init command. (3.5.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.0)

### Fixes and other changes

- Fixes handling of nested aschild transforms. (3.8.5) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.5)
- Uses tw-merge for transform-style classes, improving how conflicting styles are merged. (3.8.3) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.3)
- Already installed fonts are now properly detected. (3.8.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.1)
- Skips all transforms for universal registry items. (3.8.0) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.8.0)
- Fixed the resolver for URLs. (3.6.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.6.1)
- Prevents duplicate keyframes when adding components. (3.5.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.2)
- Fixes handling of base styles when using the add command. (3.5.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.2)
- Updates color value detection for cssVars. (3.5.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.1)
- Fixes the utils import transform when a workspace alias does not start with @. (3.5.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.5.1)
- Fixes a regression with universal item detection. (3.4.2) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.4.2)
- Fixed adding a registry item that uses CSS at-property. (3.4.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.4.1)
- Fixed support for universal registry items that have dependencies but no files. (3.4.1) — [release notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%403.4.1)
