# Publish and install

> Publish your DS Manager system as a shadcn registry and install it with one shadcn CLI command. Covers versions, existing projects, blocks and unpublishing.

Canonical: https://www.shadcndesign.com/docs/ds-manager-publish

Publishing turns your design system into a shadcn registry hosted by DS Manager. One shadcn CLI command then installs your tokens and every component into a project, and the same command updates it after each publish.

<RichImage
  src="/docs/ds-manager/publish-install.webp"
  alt="The Get code dialog on the Install tab, showing the install command with pnpm selected"
  width="516"
  height="329"
  quality="90"
/>

## Publish

1. Sign in. Publishing needs an account.
2. Click **Get code** in the top bar.
3. On the **Publish** tab, click **Publish**.

The line under the button confirms it, for example "Published v1, just now." Every publish creates a new version: v1, v2 and so on.

The Free plan serves 1 published system at a time. Pro and Lifetime serve 10. If you publish past your limit, the dialog shows how many you hold and what Pro covers. Nothing you already published stops serving.

Custom components that have not passed their checks are left out of the publish, and the dialog says how many ("1 draft component is left out until it passes its checks.").

## Publish again

Your edits reach the registry only when you publish. After you change something, the line under the button says "This system has changed since: publish again to include your latest changes." Click **Publish again**. The install command stays the same and now serves the new version. Run it again in your project to pull the changes.

## Install in your project

Open the **Install** tab and copy the command. The package manager chips switch the runner:

<Tabs defaultValue="pnpm">
  <TabsList>
    <TabsTrigger value="pnpm">pnpm</TabsTrigger>
    <TabsTrigger value="npm">npm</TabsTrigger>
    <TabsTrigger value="yarn">yarn</TabsTrigger>
    <TabsTrigger value="bun">bun</TabsTrigger>
  </TabsList>
  <TabsContent value="pnpm">

```bash
pnpm dlx shadcn@latest init --preset <registry link> --force --no-reinstall
```

  </TabsContent>
  <TabsContent value="npm">

```bash
npx shadcn@latest init --preset <registry link> --force --no-reinstall
```

  </TabsContent>
  <TabsContent value="yarn">

```bash
yarn dlx shadcn@latest init --preset <registry link> --force --no-reinstall
```

  </TabsContent>
  <TabsContent value="bun">

```bash
bunx --bun shadcn@latest init --preset <registry link> --force --no-reinstall
```

  </TabsContent>
</Tabs>

The registry link is your system's own address, in the form `https://manager.shadcndesign.com/u/<account>/r/<slug>/<slug>.json`. Copy the full command from the dialog rather than typing it.

The command works in a new project and in one that already uses shadcn/ui:

- It sets up `components.json` with your system's style, base color and icon library.
- It writes your tokens into `globals.css`.
- It installs every component, replacing the shadcn/ui components already there.

`--force` lets it run over an existing `components.json`, and `--no-reinstall` stops the CLI from reinstalling stock components over yours. Your own files, such as your own components and CSS, stay as they are.

Before the first publish the tab shows "Publish to get your install command" instead, because the registry has nothing to serve yet.

## Tokens only

The **Get CSS** tab has a shorter command under **Install style** that writes every token into the project's `globals.css`. You can also copy the compiled `globals.css` and paste it in yourself, which works without an account. Component style edits ship inside the registry's components, so they are not in this file.

## Install blocks

ProBlocks install by name from your published registry. On the **Blocks** tab:

1. Add your registry to the project once, after the install command. This adds it to the registries in `components.json`:

   ```bash
   pnpm dlx shadcn@latest registry add "@acme=https://manager.shadcndesign.com/u/<account>/r/acme/{name}.json"
   ```

2. Install a block by name:

   ```bash
   pnpm dlx shadcn@latest add @acme/hero-section-1
   ```

Here `acme` stands for your system's slug; the dialog fills in the real one. Blocks use `next/link` and `next/image`. The Free plan includes 24 free blocks, the first of each category, and Pro unlocks all 205. See [ProBlocks](/docs/ds-manager-problocks).

## Unpublish or destroy

Once something is published, the Publish tab shows a **Current version** card with two ways to take it down.

**Unpublish** stops serving the registry. The install command stops working, and every version is kept. The button above changes to **Republish**, which serves it again under the same command and continues the version numbers.

**Destroy** deletes the registry and every version. A confirmation shows the exact install command that will stop working, for everyone who has it. It cannot be undone.

Deleting a system also deletes its published registry and its share link.
