Skip to content

NEDB v2.2.27 — Full Release Notes

Choose a tag to compare

@ethgr0wth ethgr0wth released this 22 Jun 14:37
5e9d232

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-v2 binary is found, and where it searched
  • Whether cargo is 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-v2

Installs 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.py

The 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: pypi job now depends on [node-binaries, create-release, wheels], downloads all platform binaries and _native extensions from GitHub release artifacts, and assembles a fat universal wheel before publishing.
  • Codemagic: uploads nedbd-v2-darwin-arm64 and nedbd-v2-darwin-x64 binaries to the GitHub release (in addition to .node files) so the pypi job can include them.
  • crates.io publish: new publish-crate CI job runs cargo publish --package nedb-core-v2 on every v* tag. Requires CARGO_REGISTRY_TOKEN Actions secret.
  • Secret sync: the nedb-release skill now syncs CARGO_REGISTRY_TOKEN alongside PYPI_API_TOKEN and NPM_TOKEN.

Install

# Python
pip install nedb-engine

# Node
npm install nedb-engine

# Rust (DAG server binary only)
cargo install nedb-core-v2

Windows 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 missing

Test

# 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.py

INTERCHAINED, LLC × Vex (Claude Sonnet 4.6)