Releases: visorcraft/MongrelDB
Release list
v0.47.1
v0.47.0 — CDC, backup, PITR, prepared statements, cross-request HTTP sessions, FK final-write-set, metrics and audit log
What's new in v0.47.0
Server (mongreldb-server)
- Cross-request HTTP sessions for interactive transactions — keep a transaction open across multiple HTTP calls via session-bound
TxnState. - Prepared-statement REST API over HTTP sessions —
prepare,execute,deallocateendpoints; bind values across requests. - Metrics, audit log, and Arrow streaming —
/metrics,/audit, Arrow JSON/streaming over/sql. - Idempotent create-table — accept
default_valueas alias fordefault_exprin/kit/create_table.
Core (mongreldb-core)
- Foreign-key final-write-set enforcement —
core FK final-write-setintegrates referential integrity with the WAL group-commit path. - CDC, backup, and PITR — change-data-capture stream + cold/offline backups + point-in-time restore with additional test coverage.
Tooling
- Cross-engine benchmark matrix refreshed (34 language clients documented).
- rustfmt applied across
mongreldb-coreandmongreldb-server. - Code review pass: address Codex peer-review findings across the shipped features.
Stats since v0.46.2
- 954 tests passing, 1 ignored.
cargo fmt --check,cargo clippy --workspace --all-targets --all-features -- -D warnings, andcargo test --workspace --all-featuresall green.
v0.46.2
Bug Fixes
- server: invalidate idempotency cache on
drop_table— when a table is dropped and recreated, cached idempotency entries became stale and replays silently reported success without writing (data-loss bug). Fix clears all idempotency entries on table drop.
Full Changelog: v0.46.1...v0.46.2
v0.46.1
v0.46.0
v0.45.0
Maintenance
- CI: GitHub Actions on Node 24 runtime. All workflow steps now run on the Node 24 action runtime, clearing the Node 20 deprecation warnings.
- actions/checkout v5 -> v7
- actions/setup-node v4 -> v6
- softprops/action-gh-release v2 -> v3
- docker/setup-qemu-action, setup-buildx-action, login-action v3 -> v4
- docker/metadata-action v5 -> v6
- docker/build-push-action v6 -> v7
- Swatinem/rust-cache pinned at v2.9.1 (already node24)
Server binaries (linux x64/musl/arm64, darwin arm64/universal) and the ghcr.io/visorcraft/mongreldb-server image are attached/uploaded by CI shortly.
Full changelog: v0.44.1...v0.45.0
v0.44.1
What changed
OpenOptions and lock_timeout_ms for Database::open_with_options
New opt-in knob for cross-process lock acquisition. Default 0 keeps the historical fail-fast behavior; pass OpenOptions { lock_timeout_ms: 5_000 } for SQLite-style busy_timeout semantics with 1ms, then 10ms, then 50ms backoff against a hard deadline. Lets multiple writers commit cleanly against the same database instead of the second opener seeing locked by another process.
create* constructors now refuse to clobber an existing database
Database::create, create_encrypted, create_with_key, create_with_credentials, and create_encrypted_with_credentials now return MongrelError::InvalidArgument("database already exists at <path>; use Database::open() to open it, or remove the directory first") when the on-disk CATALOG file is present. Previously these would silently overwrite a populated directory, destroying the catalog and any encryption keys. Use Database::open* to open an existing database.
Lock retry respects error class
The cross-process lock retry loop now only treats WouldBlock as retryable. Other I/O errors (PermissionDenied, NotFound, etc.) bubble up immediately instead of being treated as "locked, try again" and looping or hiding the real problem.
Tests
- New
crates/mongreldb-core/tests/cross_process_lock.rs: 5 tests covering fail-fast, retry-until-acquired, retry-with-no-timeout, retry-after-engine-holder-releases, and a 4-writer subprocess harness that commits 100 rows cleanly with the newlock_timeout_msknob. - New
database_basic.rscases for thereject_existing_databaseguard across plain, encrypted, and encrypted + credentialed paths. - Writer subprocess PK fixed from
idxtowriter_id * rows + idxso parallel writers no longer collide on the primary key.
Misc
OpenOptionsnow derivesDefault(was a hand-rolledimpl Default).fail_fast_default_rejects_concurrent_opentiming slack bumped 500ms to 2s to stop CI flake on slow machines.
Full Changelog: v0.44.0...v0.44.1