Beta Past initial proving, but the Python API surface may still shift before 1.0. WiredTiger on-disk format is stable, but there's no migration tool yet — don't put production data here.

Blog

Updates, design notes, and deep dives from the SecantusDB project.

  • The Rust server's change streams get a real oplog visibility point

    30 July 2026 · Joe Drumgoole

    Summary: The Rust server's change streams get a real oplog visibility point (v0.6.0b5).

    Concurrent writers on different collections could permanently lose a change event. The Rust server's tailable cursors treated the highest minted oplog seq as the readable tail, but a seq is minted inside its writer's still-open …

  • Restore full PGO on the arm64-macOS standalone binary

    29 July 2026 · Joe Drumgoole

    Summary: Restore full PGO on the arm64-macOS standalone binary (v0.6.0b4).

    The arm64-macOS secantusd-rs binary's on-target profile-guided optimization is working again, after a run of macos-14-runner-specific failures. Two quirks (both Linux-immune) are now handled: the PGO instrumented build drops mimalloc (whose instrumented allocator internals segfault at startup), and — the …

  • Fix `drop` (and other ops) on a never-written collection under lazy shards

    28 July 2026 · Joe Drumgoole

    Summary: Fix drop (and other ops) on a never-written collection under lazy shards (v0.6.0b3).

    Lazy shard creation (0.6.0b2) makes a collection's documents shard exist only once something is written to it, and the Rust server's drop_collection ran purge_collection_tables unconditionally — which opened the collection's shard cursor and …

  • RecordId storage on both servers, faster writes, a decoupled oplog, and an Ops Board

    26 July 2026 · Joe Drumgoole

    Summary: RecordId storage on both servers, faster writes, a decoupled oplog, and an Ops Board (v0.6.0b1).

    The headline change is that both servers now use the same on-disk document layout, byte for byte. The Python server's document table is keyed by RecordId — a monotonic insertion counter — exactly as …

  • Say no like mongod: an operator-fidelity sweep, and a Rust server that clears every gauge

    19 July 2026 · Joe Drumgoole

    Summary: Say no like mongod: an operator-fidelity sweep, and a Rust server that clears every gauge (v0.6.0b0).

    The single largest theme in this release is learning to fail correctly. Roughly sixty slices went through the query, update, and aggregation operators asking one question of each: when the argument …

  • Measured everywhere: a concurrent test suite that caught real bugs, three-way benchmarks, and self-hosted docs

    17 July 2026 · Joe Drumgoole

    Summary: Measured everywhere: a concurrent test suite that caught real bugs, three-way benchmarks, and self-hosted docs (v0.5.4b236).

    SecantusDB now measures itself against real mongod in both dimensions. The per-operation benchmark became a three-way comparison — the Rust server lands at 2.1×–4.5× of mongod, roughly 2.7 …

  • SQL: user-defined range types, and enum OIDs in every plan shape

    17 July 2026 · Joe Drumgoole

    Summary: SQL: user-defined range types, and enum OIDs in every plan shape (v0.5.4b237).

    A focused SQL-server release, both slices driven by the psycopg conformance gauge. CREATE TYPE ... AS RANGE brings user-defined range types end to end — catalog rows, the v3 extended protocol's binary codec path, and range operators …

  • Point-in-time recovery, a SQL server with its own gauges, and operator parity across both servers

    16 July 2026 · Joe Drumgoole

    Summary: Point-in-time recovery, a SQL server with its own gauges, and operator parity across both servers (v0.5.4b235).

    This is the largest SecantusDB release to date — a month of parallel work, 125 changelog entries. The headline capability is point-in-time recovery: every write already flowed through the oplog, and secantusAdmin …

  • `find()` with no sort now returns documents in insertion order

    16 June 2026 · Joe Drumgoole

    Summary: find() with no sort now returns documents in insertion order (v0.5.3b13).

    An unsorted find() now returns documents in insertion order, matching mongod's natural (storage) order. Previously SecantusDB returned them in _id order — which coincides with insertion order for the default monotonic ObjectId _ids, but diverged …

  • Real transactions, a pure-Python core, and the full Mongo CLI toolchain

    15 June 2026 · Joe Drumgoole

    Summary: The first PyPI release since v0.5.2b7 bundles real multi-document transactions, a Rust-free pure-Python core, richer change streams, and a wave of indexing and conformance work (v0.5.3b7).

    This is the first release on PyPI since v0.5.2b7, and it carries a lot. The headline is …