Sora UI

sora-cli

Full command reference for the sora-cli tool — add, list, diff, and doctor.

sora-cli is a standalone CLI for installing components from any shadcn-compatible registry into your project. It defaults to the Sora UI registry, so it skips the extra step of registering the @soralabs scope that the shadcn CLI needs — but it also works against any other registry via --registry <url>.

You still need shadcn@latest init first — see Installation — since that sets up Tailwind, CSS variables, and the @/ import alias every component depends on.

Commands

# multiple components in one call
npx @soralabsoss/sora-cli add text-effect draw-underline-link

# interactive picker — no component names, browse and multi-select
npx @soralabsoss/sora-cli add

# list every component available in the registry
npx @soralabsoss/sora-cli list

# compare installed files against the current registry version
npx @soralabsoss/sora-cli diff text-effect

# diagnose common project setup issues
npx @soralabsoss/sora-cli doctor

add

Resolves the dependency tree for the requested component(s), writes files into your project, and installs npm dependencies with your detected package manager (bun/pnpm/yarn/npm).

npx @soralabsoss/sora-cli add text-effect --path src/components/ui
npx @soralabsoss/sora-cli add card --cwd packages/ui       # run as if started in packages/ui (monorepos)
npx @soralabsoss/sora-cli add text-effect --force           # overwrite existing files without asking
npx @soralabsoss/sora-cli add text-effect --yes              # skip the install confirmation, for scripts/CI
npx @soralabsoss/sora-cli add text-effect --dry-run          # preview what would change, write nothing
npx @soralabsoss/sora-cli add text-effect --silent            # only print summary lines, not per-file output
npx @soralabsoss/sora-cli add text-effect --view              # print file contents instead of writing them

--yes matters most when an agent or script runs the CLI non-interactively: without it, add prints a confirmation prompt and — since there's no TTY — silently exits successfully without installing anything. Pair with --force to also skip per-file overwrite prompts.

list

Lists every component the target registry exposes. Add --json for machine-readable output (safe to pipe — errors and status messages go to stderr, never mixed into the JSON on stdout).

npx @soralabsoss/sora-cli list
npx @soralabsoss/sora-cli list --json

diff

Read-only comparison of installed component files against the current registry content — reports drift without writing anything.

npx @soralabsoss/sora-cli diff text-effect

If files differ, re-run add <component> --force --yes to apply the update.

doctor

Diagnoses common project setup issues before you install anything: Node version, package manager/lockfile conflicts, components.json validity, path alias configuration, Tailwind/React versions, cn() util dependencies, registry reachability, and whether a newer sora-cli version is available.

npx @soralabsoss/sora-cli doctor
npx @soralabsoss/sora-cli doctor --json

Options reference

FlagDescription
--cwd, -c <path>Run as if started in <path> — for monorepos, e.g. packages/ui. Picks up that workspace's own tsconfig.json/components.json aliases.
--path <path>Custom component install path. Only changes where files are written, without affecting which config gets detected (unlike --cwd).
--registry <name|url>Product registry key (default: ui) or a full registry URL. Must be HTTPS unless targeting localhost/127.0.0.1.
--forceOverwrite existing files without asking.
--yes, -ySkip the install confirmation prompt — for scripts/CI.
--dry-runPreview changes without writing files or installing packages.
--silent, -sSuppress per-file output, keep summary lines.
--viewPrint resolved file contents instead of writing them.
--jsonOutput as JSON (list, doctor).
--version, -vShow the CLI version.
--help, -hShow the help message.

Environment

SORA_NO_UPDATE_CHECK — set to disable the npm update check that runs on every invocation (printed to stderr, never mixed into --json output). Useful in CI.

How it works

The CLI fetches a shadcn-compatible registry (<product-url>/r/registry.json, <product-url>/r/<name>.json), resolves the dependency tree, writes files into your project, and installs npm dependencies with your detected package manager.

Since components are copied into your project rather than installed as a package, diff is the way to check whether the registry has changed a component since you installed it, and add <component> --force --yes is how you apply that update.

Registry content isn't cryptographically signed, so only point --registry at a source you trust — it's written into your project and its dependency list is fed straight into your package manager.

Monorepos

Use --cwd <path> (or -c) to run add/diff/doctor as if the CLI had been started inside <path> — it picks up that workspace's own tsconfig.json/components.json aliases.

npx @soralabsoss/sora-cli add card --cwd packages/ui

If you only need to change where files land without changing which config is read, use --path instead of --cwd.

See also

Built by Axyl. A motion-first component registry for React.

Last updated: 7/23/2026