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.

  • v0.4.0b2: SecantusDB enters beta

    10 May 2026 · Joe Drumgoole

    Summary: SecantusDB graduates from alpha to beta. The pymongo conformance gauge sits at 100.0%, the cross-driver matrix now covers 15 features across mongosh, Go, Node, and Java, and the functional surface has filled in enough — real session tracking, multikey indexes, custom and cluster role bundles, noop oplog heartbeats, malformed-BSON …

  • Wire-protocol robustness, cross-driver session smokes, and a 100%-honest gauge

    9 May 2026 · Joe Drumgoole

    Summary: Malformed BSON in command bodies now elicits a BadValue reply instead of dropping the connection, sessions and cluster-role bundles get cross-driver smokes (mongosh + Node + Go + Java), and the pymongo conformance dashboard catches up to the gauge it was always passing — a clean 100.0% (v0.3.0a78).

    The wire …

  • Real session tracking, date densify, and a 100% pymongo gauge

    9 May 2026 · Joe Drumgoole

    Summary: Logical sessions are now real server-side state, $densify walks date ranges by week / day / hour / minute / second / millisecond, and the pymongo conformance gauge moves to a clean 100.0% (v0.3.0a77).

    startSession / endSessions / refreshSessions are no longer no-op stubs. A new thread-safe secantus.sessions.SessionRegistry tracks logical sessions …

  • Change-stream split events + four cluster role bundles

    9 May 2026 · Joe Drumgoole

    Summary: Opt-in splitEvent envelope on every change-stream event and four documented mongod cluster role bundles — clusterMonitor, clusterAdmin, backup, restore — join the built-in role set (v0.3.0a76).

    The splitLargeChangeStreamEvents option now stamps a splitEvent: {fragment: 1, of: 1} envelope on every change-stream event — insert, update, delete, replace, invalidate. Without the …

  • Multikey indexes: array fields are now IXSCAN-fast

    9 May 2026 · Joe Drumgoole

    Summary: Indexes on array-valued fields now use per-element entries, so {tags: "python"} against {tags: ["python", "go"]} lands at IXSCAN instead of falling back to a full collection scan (v0.3.0a75).

    Before v0.3.0a75, the moment any document on an indexed field carried an array value, SecantusDB flagged the …

  • Compound-index $lookup + Java smoke matrix

    8 May 2026 · Joe Drumgoole

    Summary: $lookup now exploits compound non-multikey indexes whose leading field matches foreignField, and the Java cross-driver smoke matrix is complete (v0.3.0a74).

    v0.3.0a74 widens $lookup's index-acceleration window. Previously the per-outer-doc IXSCAN path only fired when the foreign collection had a single-field index on foreignField exactly; otherwise …

  • SASLprep arrives: SCRAM-SHA-256 now Unicode-correct

    6 May 2026 · Joe Drumgoole

    Summary: SASLprep on SCRAM-SHA-256 — non-ASCII passwords now Unicode-normalised before PBKDF2 (v0.3.0a73).

    v0.3.0a73 brings SecantusDB's SCRAM-SHA-256 authentication into line with RFC 4013 by running passwords through SASLprep before they reach PBKDF2. The full stringprep pipeline lands: B.1 mapping (zero-width and other "to-nothing" code points stripped), NFKC …

  • Change streams emit createIndexes/dropIndexes; updateUser command

    5 May 2026 · Joe Drumgoole

    Change streams emit createIndexes/dropIndexes; updateUser command (v0.3.0a52).

  • Compound-index sort acceleration

    5 May 2026 · Joe Drumgoole

    Compound-index sort acceleration (v0.3.0a50).

  • Index-accelerated $lookup foreign-side

    5 May 2026 · Joe Drumgoole

    Index-accelerated $lookup foreign-side (v0.3.0a48).