NEDB ships as three version-aligned distributions from a single git tag —
nedb-engine (flagship), crypto-database (verifiable v2/v3 DAG),
aof-db (fast append-only) — across PyPI, npm and crates.io, with native addons for
macOS (arm64 + x86_64), Linux (x86_64 + aarch64, glibc + musl) and Windows x86_64.
The tool
python3 scripts/release.py "vFROM" "vTO" # both args require the leading 'v'
One command: bumps every version-bearing manifest in the flagship and both
distribution forks, opens and merges a release PR per repo, repoints the
distributions/* submodules, and tags vTO — firing release.yml
(flagship), release-distros.yml (distros) and Codemagic (macOS wheels) to publish
all three distributions aligned on one version. It is idempotent: repos already at
TO are skipped, an existing tag is left in place, remaining steps always run — a
half-finished release re-runs safely. It never force-pushes and never commits to master
directly; every change lands through a branch + PR + merge.
The rules the hard way
- Never retag. A bug in vX.Y.Z is fixed by vX.Y.Z+1. Retagging breaks CI, Codemagic and immutable-release semantics — always bump, never retag.
- Only tag when the work is 100% complete. Commit to master freely; hold the tag and the publish until everything is done and tested. One sprint, one bump, one tag, one ship.
- Version files move together or not at all. Six files must always carry the identical string — root
pyproject.toml,python/nedb/__init__.py,package.json,rust/Cargo.toml(workspace),rust/crates/nedb-py/pyproject.toml,rust/nedb-v2/Cargo.toml. A straggler stuck at an old version is the classic failure mode: single-token regex bumps silently miss them. - A version string in a repo is not evidence of a publish. Verify against the registries — a fresh install — before calling a release shipped. CI green is necessary, never sufficient.
- Never claim shipped off an in-flight workflow. Real CI job conclusions first, then a live registry check.
CI layout
test.yml runs the suite matrix on every push and PR — dependency-free suites
across interpreters, the Rust engine and bindings, the Node addon with a smoke gate, maturin
wheels, and the daemon HTTP suites. It was not always so: for the first year the only workflows
fired on version tags, so the first automated opinion arrived after publishing to three
registries. The push-gate found four real defects in its first hour. Release workflows build
and publish on v*; macOS addons build on Codemagic M2 runners.
Registry names
| Distribution | PyPI | npm | crates.io |
|---|---|---|---|
| flagship | nedb-engine | nedb-engine | nedb-engine |
| verifiable DAG | cryptodb (name taken by a third party) | crypto-database | crypto-database |
| append-only | aof-db | aof-db | aof-db |
The neSQL packages (nesql on PyPI/crates, nesql-engine on npm) are
version-aligned with the engine; the crates.io crate is the working CLI. See
Eth-Interchained/neSQL.
tools/build_docs_site.py.