Versioning
Canonical Chroma version, bump policy, and the rule that every Chroma change must increment it.
Chroma uses semver. Every modification to the engine, CLI, or the standalone Chroma-CLI/ package must increment the version in the same change.
The current version is the single line in Chroma/VERSION. After this change it is 0.3.1.
Where the version lives
| Location | Role |
|---|---|
Chroma/VERSION | Canonical source of truth (one line, x.y.z) |
Chroma/Cargo.toml [package].version | Must match VERSION (wasm-pack copies it into generated pkg/package.json) |
$CHROMA_HOME/VERSION (~/.chroma/VERSION) | Copy written by chroma install |
Chroma-CLI/VERSION | Copy in the standalone package (assembled by scripts/build-chroma-cli.sh) |
chroma --version/-vreads the VERSION file next to the script first (repo or standalone package), then$CHROMA_HOME/VERSION.- Output format:
Chroma vX.Y.Z(also printed briefly at the start of every command excepthelp/--version).
There is no second hardcoded version string in the CLI.
When to bump
| Bump | Semver | Use when |
|---|---|---|
| patch | x.y.Z | Bugfix, docs inside Chroma/, small tweak to existing behavior |
| minor | x.Y.0 | New Chroma feature or capability |
| major | X.0.0 | Breaking change to the engine API or CLI contract |
Agents and humans follow the same table. Cursor rules:
.cursor/rules/chroma-versioning.mdc— Chroma engine + CLI.cursor/rules/chroma-desktop-versioning.mdc— Chroma Desktop only.cursor/rules/chroma-desktop-cli-versioning.mdc— combined overview (both products)
How to bump
Chroma CLI (engine + chroma command)
From the TargApps workspace root:
./scripts/bump-chroma-cli-version.sh # patch (alias of bump-chroma-version.sh)
./scripts/bump-chroma-cli-version.sh minor
./scripts/bump-chroma-cli-version.sh majorEquivalent:
./scripts/bump-chroma-version.sh # patch
./scripts/bump-chroma-version.sh minor
./scripts/bump-chroma-version.sh majorThe script updates Chroma/VERSION, Chroma/Cargo.toml, Chroma/pkg/package.json, and (if present) Chroma-CLI/VERSION plus Chroma-CLI/pkg/package.json. Recompiling the WASM engine (Chroma/build.sh) regenerates pkg/package.json from Cargo.toml.
Chroma Desktop
./scripts/bump-chroma-desktop-version.sh # patch
./scripts/bump-chroma-desktop-version.sh minor
./scripts/bump-chroma-desktop-version.sh majorUpdates Chroma-Desktop/VERSION, Cargo.toml, and tauri.conf.json. Desktop versioning is independent from the CLI/engine semver.
This versioning system itself is a Chroma change, so the version moved 0.1.0 → 0.1.1 (patch). The NestJS-style CLI logger is a new capability, so the version moved 0.1.1 → 0.2.0 (minor).
Reinstall on the system
chroma install wipes $CHROMA_HOME by default and rebuilds it from the checkout (clean reinstall). From a monorepo checkout:
./Chroma/cli/chroma.sh installFrom the standalone package (Chroma-CLI/ or a downloaded chroma-cli.zip):
./chroma.sh installPass --no-rebase-root to update in place without deleting $CHROMA_HOME. After install, chroma --version must print Chroma v<VERSION>.
See CLI for toolchain provisioning, PATH, and templates.
Full local stack update
After engine or CLI changes, rebuild and sync everything with one command:
./scripts/update-chroma-stack.shThis runs WASM build, plugin sync, Chroma-Fs (if present), Chroma-Server, CLI install to ~/.chroma, consumer pkg/ copies, Chroma-Desktop, and Targ-Apps-Finance. Partial flags (--cli-only, etc.) exist for advanced use; see ./scripts/update-chroma-stack.sh --help.
Sync vendored pkg/ in consumer apps
Apps that vendor the compiled WASM engine (engine.vendorDir: "pkg" in chroma.json) must keep pkg/package.json aligned with Chroma/VERSION. The workspace script automates discovery, copy, and verification:
./scripts/update-chroma-consumers.sh # copy fresh pkg/ + verify
./scripts/update-chroma-consumers.sh --check-only # verify without copying
./scripts/update-chroma-consumers.sh --rebuild # force Chroma/build.sh first
./scripts/update-chroma-consumers.sh check # NestJS log format smoke testSource order (documented in the script): Chroma/pkg/ after Chroma/build.sh, then Chroma-CLI/pkg/ (synced by build.sh). If neither matches Chroma/VERSION, the script runs Chroma/build.sh unless --check-only is set.
Consumers discovered today: projects with chroma.json + vendored pkg/ (e.g. Targ-Apps-Finance), plus Chroma-Desktop/pkg and Chroma-Desktop/src/view/pkg. Template trees under Chroma/cli/examples, Chroma-CLI/examples, and Chroma/example are excluded.
Each step logs with the same NestJS-style format as chroma ([Chroma] {pid} - {timestamp} LOG [UpdateConsumers] …). After copy, the script prints PASS or FAIL per project and exits non-zero on any mismatch.
Typical workflow after bumping Chroma:
./scripts/bump-chroma-cli-version.sh
./scripts/update-chroma-stack.sh # one command: WASM, CLI, consumers, Desktop, FinanceFor release packaging (zip, installers, docs downloads), use ./scripts/build-chroma-cli.sh instead. To sync only vendored pkg/ copies:
./scripts/update-chroma-consumers.shchroma build copies chroma.json into the output directory (dist/ by default) for both static and dynamic apps.