NEDB Docs / Reference / Releasing

NEDB ships as three version-aligned distributions from a single git tagnedb-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

DistributionPyPInpmcrates.io
flagshipnedb-enginenedb-enginenedb-engine
verifiable DAGcryptodb (name taken by a third party)crypto-databasecrypto-database
append-onlyaof-dbaof-dbaof-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.