# 1. Bump version in all project files
python scripts/bump-version.py 1.2.0
# 2. Commit and tag
git commit -am "Release v1.2.0"
git tag v1.2.0
# 3. Push — this triggers the release workflow
git push origin main v1.2.0The release workflow builds macOS, Windows, and Linux artifacts, then creates a GitHub Release with all of them attached.
| Platform | Artifacts |
|---|---|
| macOS | Clarity.app, .dmg |
| Windows | .exe (NSIS) installer |
| Linux | .deb package, .AppImage |
Windows releases use NSIS in currentUser mode, so installs default to a per-user
location and do not require administrator elevation.
Earlier Windows builds shipped a machine-wide .msi. The new NSIS installer is
per-user and registers separately, so the two can coexist as two entries in
Apps & Features. Users coming from .msi should uninstall the old "Clarity"
machine-wide entry (requires admin) manually.
Release builds use --release (optimized, stripped). Debug builds are
roughly 50% larger.
The version lives in three files that must stay in sync:
pyproject.tomlsrc-tauri/tauri.conf.jsonsrc-tauri/Cargo.toml
Always use the bump script rather than editing manually:
python scripts/bump-version.py # show current version
python scripts/bump-version.py 1.2.0 # set new versionThe bump script also stamps CHANGELOG.md — it replaces the [Unreleased] section with a dated version heading built from commits since the last tag, then adds a fresh [Unreleased] above it. Review the generated entry before committing; edit categories or wording as needed.
To build the desktop app locally (for testing before a release):
# Debug build (faster, larger binary)
uv run python clarity.py install
# Release build (optimized, what users get)
uv run python clarity.py install --releaseOutputs land in dist/.
Build fails locally: Run uv run python clarity.py install and check which step fails. Prerequisites are Rust, Node.js, and Python with the bundle extra (pip install -e ".[bundle]").
CI release fails: Check the Actions tab for the failed run. Common issues:
- Missing system dependencies on Linux (the workflow installs them, but package names can change between Ubuntu versions)
- Stale Cargo cache (delete the cache in Actions → Caches if Rust compilation fails after a dependency update)
- DMG creation fails on macOS if a previous Clarity volume is still mounted
Version mismatch: If clarity --version shows a different version than expected, run python scripts/bump-version.py (no argument) to check which files have which version, then re-run with the correct version.