Releasing
Use scripts/prepare_release.sh as the supported release entry point. It wraps
the repository-wide version bumper, optional lockfile refresh, consistency
checks, tests, and optional tag creation.
Patch Release Flow
scripts/prepare_release.sh 0.9.6
git diff
git status --short --branch
git add build.zig src/main.zig src/api/c_api.zig include/lattice.h bindings/ examples/ conformance/ book/src/api/c.md
git commit -m "Release v0.9.6"
git tag v0.9.6
git push origin main
git push origin v0.9.6
Use --tag or --push-tag when you want the script to create or push the tag
for you:
scripts/prepare_release.sh 0.9.6 --tag
scripts/prepare_release.sh 0.9.6 --tag --push-tag
Version Sources
scripts/bump_version.py is the canonical version updater/checker. It updates
and validates:
- native source and C header versions:
build.zig,src/main.zig,src/api/c_api.zig,include/lattice.h - Python metadata:
bindings/python/pyproject.toml,bindings/python/src/latticedb/__init__.py,bindings/python/uv.lock - TypeScript metadata and fallback version:
bindings/typescript/package.json,bindings/typescript/package-lock.json,bindings/typescript/src/index.ts - example and conformance dependency pins for Go and TypeScript
- the C API version example in
book/src/api/c.md
Before pushing a release tag, run:
python3 scripts/bump_version.py --check 0.9.6 --strict-lockfile
The GitHub release workflow runs the same strict check before building or publishing artifacts.
Validation
For a normal release, keep the default scripts/prepare_release.sh test run
enabled. For manual validation, use:
zig build test
zig build integration-test
zig build shared
cd bindings/python && uv run --extra dev pytest tests -q
cd bindings/typescript && npm test -- --runInBand
Storage changes that affect durability, page layout, large values, recovery, or bindings should also run the relevant crash, container, or regression repro tests before tagging.