NEDB v2.2.27 — Full Release Notes
Released: 2026-06-21
Packages:nedb-engine(PyPI) ·nedb-engine(npm) ·nedb-core-v2(crates.io)
What's in this release
v2.2.27 closes out a major shipping sprint. The headline: pip install nedb-engine now just works on every platform — Windows MSVC, Windows MSYS2/Git Bash, Linux, macOS — with the server binary and native extension bundled. If anything is missing, nedbd --doctor tells you exactly what to run to fix it.
Breaking changes
None. All existing databases, APIs, and client code are forward-compatible.
Highlights
Fat universal wheel — all platform binaries bundled
The py3-none-any wheel (the one pip installs when no platform wheel matches) now contains:
| File | Purpose |
|---|---|
nedb/nedbd-v2 |
Linux x86_64 DAG server binary |
nedb/nedbd-v2.exe |
Windows DAG server binary |
nedb/nedbd-v2-darwin-arm64 |
macOS Apple Silicon DAG server binary |
nedb/nedbd-v2-darwin-x64 |
macOS Intel DAG server binary |
nedb/_native.abi3.so |
Linux Rust extension (embedded NedbCore) |
nedb/_native.pyd |
Windows Rust extension (embedded NedbCore) |
nedb/_native.*darwin*arm64*.so |
macOS ARM Rust extension |
nedb/_native.*darwin*x86_64*.so |
macOS Intel Rust extension |
Previously only platform wheels contained these. Now even the fallback universal wheel is fully functional on all supported platforms.
nedbd --doctor — interactive environment diagnostics
New command that examines your exact environment and prints targeted, copy-paste-ready fix commands:
nedbd --doctor
Shows:
- Your Python executable path, version, pip path, site-packages location
- Whether
nedb._native(embedded Rust core) is available and why if not - Whether
nedbd-v2binary is found, and where it searched - Whether
cargois on PATH - A numbered fix plan with exact commands for your specific paths
On MSYS2/MinGW64, doctor explains the MSVC extension limitation and shows the HTTP mode workaround. On all other platforms it gives you the exact pip or cargo command to run.
nedbd-v2 on crates.io
cargo install nedb-core-v2Installs the DAG HTTP server binary (nedbd) from source on any platform with a Rust toolchain. Binary lands in ~/.cargo/bin/nedbd which nedbd --dag searches automatically.
test_the_will.py — HTTP mode via NEDB_URL
The durable DAG story test now runs on any platform — including MSYS2/MinGW where _native can't load:
# Terminal 1
nedbd --dag ./will-data
# Terminal 2
NEDB_URL=http://localhost:7070 python3 tests/test_the_will.pyThe HttpDb wrapper transparently maps all NedbCore methods to HTTP: put, link, neighbors, get (with time-travel AS OF), query (TRACE), verify, head, seq. 18/18 checks pass in both native and HTTP modes.
POST /v1/databases/{db}/neighbors endpoint
New endpoint on the Python HTTP server (AOF and DAG mode) for graph traversal:
POST /v1/databases/mydb/neighbors
{ "node": "person:robert", "rel": "parent_of" }
→ { "nodes": ["person:mark", "person:lisa"], "count": 2 }Returns the same format as NedbCore.neighbors() — no NQL workaround needed.
Bug fixes
caused_by inside doc was silently discarded (server PUT)
When clients sent caused_by as a field inside the doc object (natural placement), the server ignored it and never recorded the causal link. TRACE would return 0 ancestors.
Fixed: the server now checks for caused_by inside doc as a fallback if it's not at the body's top level.
nedbd --dag NameError on Python 3.10 (sys → _sys)
The --dag handler imported sys as _sys for aliasing but a leftover reference to sys.platform caused a NameError on Python 3.10. Fixed.
Windows: nedbd --dag subprocess/exec on Win32
Fixed the Windows path through the --dag handler: .exe binary search, subprocess.call instead of os.execv (which doesn't work on Windows), correct positional data dir argument.
Crypto dependency: pycryptodome replaces cryptography
cryptography >= 41 pulled in cffi >= 2.0 which fails to build on Windows MinGW. Switched primary backend to pycryptodome >= 3.19 which ships pre-built binary wheels for all platforms including Windows MinGW — no C compiler required. cryptography still accepted as optional fallback.
Rust banner version was frozen at 2.2.14
The N E D B · DAG ENGINE {version} banner printed by nedbd --dag read CARGO_PKG_VERSION at compile time. The Rust workspace Cargo.toml version field was not being bumped in release commits. Fixed — all Rust crates now version-sync with the Python package.
NedbCore cold-restart: seq and head returned 0/empty
When NedbCore.open(path) opened an existing database and the background scan hadn't completed, seq() returned 0 and head() returned empty. Fixed by calling flush() before closing (persists MANIFEST to disk) and waiting 1 second after reopen for the scan to complete.
YAML syntax errors in release.yml and codemagic.yaml
Inline python3 -c "..." blocks inside YAML run: | block scalars caused scanner errors at column 1. Fixed by replacing with a dedicated scripts/extract_native.py helper called as python3 scripts/extract_native.py.
MinGW wheel rejected by PyPI
A CI matrix entry for x86_64-pc-windows-gnu (MinGW target) produced wheels tagged mingw_x86_64_msvcrt_gnu which PyPI rejects as a non-standard platform tag. This caused the Publish native wheels to PyPI job to abort before uploading even the valid MSVC wheel. Fixed by removing the MinGW matrix entry — MSYS2 users get the binary from the fat universal wheel.
nedb._native import raises cryptic ImportError
On platforms where the compiled extension is absent, from nedb._native import NedbCore produced a bare ModuleNotFoundError with no guidance. Fixed with a stub module that intercepts the import and raises a detailed ImportError listing all three fix options (HTTP mode, pip reinstall, nedbd --doctor).
npm package — nedb-engine
The npm package now ships nedbd-v2 server binaries alongside the napi .node addon:
| File | Platform |
|---|---|
nedbd-v2-linux-x64 |
Linux x86_64 |
nedbd-v2-win-x64.exe |
Windows x86_64 |
nedbd-v2-darwin-arm64 |
macOS Apple Silicon |
nedbd-v2-darwin-x64 |
macOS Intel |
nedbd-v2.js |
Platform-detection shim |
The nedbd-v2 bin entry in package.json means npx nedbd-v2 ./data works after npm install nedb-engine.
CI changes
- Fat wheel assembly:
pypijob now depends on[node-binaries, create-release, wheels], downloads all platform binaries and_nativeextensions from GitHub release artifacts, and assembles a fat universal wheel before publishing. - Codemagic: uploads
nedbd-v2-darwin-arm64andnedbd-v2-darwin-x64binaries to the GitHub release (in addition to.nodefiles) so thepypijob can include them. - crates.io publish: new
publish-crateCI job runscargo publish --package nedb-core-v2on everyv*tag. RequiresCARGO_REGISTRY_TOKENActions secret. - Secret sync: the
nedb-releaseskill now syncsCARGO_REGISTRY_TOKENalongsidePYPI_API_TOKENandNPM_TOKEN.
Install
# Python
pip install nedb-engine
# Node
npm install nedb-engine
# Rust (DAG server binary only)
cargo install nedb-core-v2Windows MSYS2 / Git Bash
pip install nedb-engine # installs universal wheel with nedbd-v2.exe
nedbd --data ./data --dag # DAG server — works on MSYS2
NEDB_URL=http://localhost:7070 python3 your_script.py # embedded API via HTTP
nedbd --doctor # diagnose anything still missingTest
# Native (requires platform wheel)
python3 tests/test_the_will.py
# HTTP mode (any platform)
nedbd --data ./will-data --dag &
NEDB_URL=http://localhost:7070 python3 tests/test_the_will.pyINTERCHAINED, LLC × Vex (Claude Sonnet 4.6)