Getting Updates
Atomic CRM is meant to be forked and customized: there is no npm package to install as a dependency and upgrade. Instead, Atomic CRM components, hooks, and lib files are published as a shadcn registry, which you can use to pull upstream changes into your fork.
This registry is not meant to bootstrap a new project. If you're starting a new CRM, follow the Installation instructions instead. The registry is only useful once you already have a running fork and want to catch up with upstream improvements (bug fixes, new features, dependency bumps in src/components/admin and src/components/ui).
Refreshing Your Fork
Section titled “Refreshing Your Fork”Commit or stash any pending work first, this command overwrites files, and you'll want a clean diff to review the changes:
npx shadcn add https://marmelab.com/atomic-crm/r/atomic-crm.json -o -y-o(--overwrite) replaces local files with the upstream version.-y(--yes) skips the interactive confirmation prompt. Prefer this flag over pipingyes |into the command: it's the option the CLI provides for non-interactive use, and it fails loudly if the CLI ever changes its prompts instead of silently answering "yes" to whatever comes up.
Once the command completes, review the diff:
git diffResolve any conflict with your own customizations, run the test suite (make test, make test-e2e), then commit.
What Gets Updated
Section titled “What Gets Updated”The registry mirrors the files tracked by scripts/generate-registry.mjs: everything under src/components/atomic-crm, src/components/supabase, most of src/hooks, and most of src/lib. It does not touch your Supabase schema, your docs/project-context.json configuration, or any file you added outside those directories.
Keeping Your Own Fork's Registry Up To Date
Section titled “Keeping Your Own Fork's Registry Up To Date”If you maintain your own fork long-term (for example to distribute your customized CRM to several deployments), regenerate and republish the registry the same way Atomic CRM's CI does:
make registry-gen # regenerates registry.json from the current source treemake registry-build # builds the distributable registry filemake registry-deploy # publishes it (wraps registry-build)See the main README for how these targets fit into the CI/CD pipeline.