npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

create-shadcn-registry

v1.2.2

Published

Create shadcn registry

Readme

create-shadcn-registry

A CLI tool that scaffolds a custom shadcn/ui component registry. Run your own registry to distribute custom components, hooks, and blocks to any React project via the shadcn CLI.

How It Works

  1. Scaffolding — Clones the registry-template and customizes it with your settings.

  2. Registry Definition — The template uses registry.json to define components and their files. Each entry maps a component name to its source path and dependencies.

  3. Build & Serve — The built registry serves static JSON files (e.g. public/r/button.json) that the shadcn CLI fetches when installing components.

  4. Distribution — Once deployed, consumers add your registry URL to components.json and run shadcn add @your-registry/button to install components.

Prerequisites

  • Node.js 18+
  • Git (used to clone the registry template)

Installation

# Using npm
npx create-shadcn-registry

# Using bun (recommended)
bunx create-shadcn-registry

Usage

Run the CLI and follow the prompts:

npx create-shadcn-registry

You'll be asked for:

| Prompt | Description | Example | |--------|-------------|---------| | Registry name | Identifier for your registry (used as @name/component) | my-ui | | Project location | Folder to create the registry in | . or ./my-registry | | Style | Shadcn/UI style variant (Only ShadCN/ui defaults supported) | New York or Default | | Homepage | URL where the registry will be hosted | https://example.com |

The tool clones the template, applies your choices, and writes a ready-to-use registry.

Flags (skip prompts)

Pass any flag to skip that prompt. Mix flags and prompts as needed:

# Fully automated
npx create-shadcn-registry --registry-name my-ui --project-location ./registry --style default --homepage https://my-registry.com

# Only specify some and prompt for the rest
npx create-shadcn-registry --registry-name my-ui --style default

| Flag | Description | |------|-------------| | --registry-name | Registry identifier (e.g. @name/component) | | --project-location | Folder to create the registry in | | --style | new-york or default | | --homepage | URL where the registry will be hosted |

Project Structure

After creation, you'll have:

your-registry/
├── app/
│   └── page.tsx          # Demo page using registry components
├── registry/
│   ├── new-york/         # Or "default" — component source files
│   │   └── ui/
│   │       └── button.tsx
│   └── ...
├── registry.json         # Registry manifest (components, deps, files)
├── package.json
└── ...

Next Steps

  1. Add components, hooks, and blocks — Use add-component, add-hook, or add-block, or edit registry.json and add files under registry/<style>/.
  2. Build — Run npm run registry:build (or equivalent) to compile the registry.
  3. Local testing — Use the create-test-app command (see below).
  4. Deploy — Host the built public/r/ output where your homepage URL points.

Full details: shadcn Registry Docs

Scripts

| Command | Description | |---------|-------------| | bun start | Run the create-shadcn-registry CLI | | bun run add-component | Add a new component to an existing registry | | bun run add-hook | Add a new hook to an existing registry | | bun run add-block | Add a new block to an existing registry | | bun run remove-component | Remove a component from the registry | | bun run remove-hook | Remove a hook from the registry | | bun run remove-block | Remove a block from the registry | | bun run create-test-app | Create a test Next.js app and add registry components |

add-component

From a registry project (or with the registry folder path), run:

npx create-shadcn-registry add-component
# or
bun run add-component

You'll be prompted for:

  • Registry folder — Path to the folder containing registry.json
  • Component name — kebab-case (e.g. my-component)
  • Style — New York or Default

The command creates an example component file and updates registry.json.

Pass flags to skip prompts:

npx create-shadcn-registry add-component --component-name my-component --registry-folder . --style new-york

| Flag | Description | |------|-------------| | --component-name | kebab-case component name | | --registry-folder | Path to registry (default: .) | | --style | new-york or default | | --dependencies | Comma-separated npm packages (merged with defaults: class-variance-authority) |

add-hook

Add a standalone React hook to your registry:

npx create-shadcn-registry add-hook
# or
bun run add-hook

You'll be prompted for:

  • Registry folder — Path to the folder containing registry.json
  • Hook name — Use use-<name> format (e.g. use-my-hook)
  • Style — New York or Default

The command creates a hook file at registry/<style>/hooks/<hook-name>.ts and updates registry.json.

Pass flags to skip prompts:

npx create-shadcn-registry add-hook --hook-name use-my-hook --registry-folder . --style new-york

| Flag | Description | |------|-------------| | --hook-name | Hook name in use- format | | --registry-folder | Path to registry (default: .) | | --style | new-york or default | | --dependencies | Comma-separated npm packages |

add-block

Add a block (complex component with multiple files) to your registry:

npx create-shadcn-registry add-block
# or
bun run add-block

You'll be prompted for:

  • Registry folder — Path to the folder containing registry.json
  • Block name — kebab-case (e.g. my-block)
  • Style — New York or Default

The command creates a block folder at registry/<style>/blocks/<block-name>/ with a component and hook file, and updates registry.json.

Pass flags to skip prompts:

npx create-shadcn-registry add-block --block-name my-block --registry-folder . --style new-york

| Flag | Description | |------|-------------| | --block-name | kebab-case block name | | --registry-folder | Path to registry (default: .) | | --style | new-york or default | | --dependencies | Comma-separated npm packages |

remove-component

Remove a UI component from your registry:

npx create-shadcn-registry remove-component
# or
bun run remove-component

You'll be prompted for:

  • Registry folder — Path to the folder containing registry.json
  • Component to remove — Select from existing components

The command deletes the component file(s) and updates registry.json.

Pass flags to skip prompts:

npx create-shadcn-registry remove-component --component button --registry-folder .

| Flag | Description | |------|-------------| | --component | Component name to remove | | --registry-folder | Path to registry (default: .) |

remove-hook

Remove a hook from your registry:

npx create-shadcn-registry remove-hook
# or
bun run remove-hook

You'll be prompted for:

  • Registry folder — Path to the folder containing registry.json
  • Hook to remove — Select from existing hooks

Pass flags to skip prompts:

npx create-shadcn-registry remove-hook --hook use-my-hook --registry-folder .

| Flag | Description | |------|-------------| | --hook | Hook name to remove | | --registry-folder | Path to registry (default: .) |

remove-block

Remove a block from your registry:

npx create-shadcn-registry remove-block
# or
bun run remove-block

You'll be prompted for:

  • Registry folder — Path to the folder containing registry.json
  • Block to remove — Select from existing blocks

Pass flags to skip prompts:

npx create-shadcn-registry remove-block --block my-block --registry-folder .

| Flag | Description | |------|-------------| | --block | Block name to remove | | --registry-folder | Path to registry (default: .) |

create-test-app

The create-test-app command validates the full flow:

  1. Build your registry
  2. Start a local registry server (tries port 3000, then 3001, 3002, etc. if taken)
  3. Create a new Next.js app
  4. Initialize shadcn and point it at your registry
  5. Add registry components to the app
  6. Stop the registry server
npx create-shadcn-registry create-test-app
# or
bun run create-test-app

You'll be prompted for the registry folder (with registry.json) and the target app folder (must be empty).

Pass flags to skip prompts:

npx create-shadcn-registry create-test-app --registry-folder ./test --app-folder ./test-app --package-manager bun

| Flag | Description | |------|-------------| | --registry-folder | Path to registry | | --app-folder | Folder to create the Next app in | | --package-manager | npm, pnpm, or bun |

License

MIT