All notable changes to OxiDB, organized by version.
v0.18.0
2026-03-05latest
Added
OxiWire binary protocol -- Custom wire format with 1-byte type tags, 4-byte LE lengths, 8-byte LE numbers. Magic byte 0xDB. Replaces MsgPack for all request/response paths.
Encoder + decoder in Rust and Go
.NET EF Core provider -- Full Entity Framework Core support with LINQ queries, transactions, and both TCP and embedded modes.
d7d5a05
Composite index tests -- 9 subtests covering exact match, prefix match, count, sort, update, delete, aggregate, drop, and triple-field composite indexes in Go.
Parallel OxiWire serialization -- Result sets >= 5,000 docs are serialized across up to 8 CPU cores. Chunk-based, zero per-doc allocation.
OxiDB vs MongoDB benchmark suite -- 22 tests across 7 categories. Score: OxiDB 19 -- MongoDB 1.
OxiDB vs PostgreSQL benchmark suite -- 20 tests comparing document workloads. Score: OxiDB 10 -- PostgreSQL 10.
d7d5a05
OxiDB vs SQLite benchmark -- 100K document embedded benchmark.
ce8db5f
Changed
Aggregation indexed-path threshold -- Changed from 10% to 50% selectivity. Indexed aggregation path now preferred when candidate set is less than 50% of collection size.
Go client rewritten for OxiWire -- All requests/responses use OxiWire binary format. MsgPack dependency removed entirely.
Pipeline handler updated -- Sub-responses decoded from OxiWire and re-encoded for composite pipeline responses.
Removed
MsgPack support -- Removed from server (Rust), Go client, and all benchmark tests. OxiWire is the sole binary protocol.
github.com/vmihailenco/msgpack/v5 -- Removed from Go module dependencies.
v0.17.0
2026-02-23
Added
LRU document cache -- Per-collection in-memory cache with configurable capacity. JSON deserialized once, then Arc-refcounted.
0997d8e
Streaming scan for non-indexed finds -- Avoids loading all documents into memory for large unindexed queries.
39cd803
Lock-free pread -- Separate read-only file handle uses pread for concurrent reads without locking the write path.
63093a3
Sorted-offset batch reads -- Indexed finds sort offsets before reading to minimize disk seeks.
63093a3
Zero-decode aggregation -- Extract only needed fields from raw JSONB, skip full document deserialization.
4a6f696
Batch pread for indexed $match aggregations -- Combine pread with zero-decode for indexed aggregation paths.
4b610ea
Zero-decode index creation -- Extract only _id and the indexed field from raw JSONB during index build.
beb3f49
DocIdSet optimization -- Inline storage for single-document index entries saves ~80 bytes per entry.
4897f86
Zero-decode filter for unindexed scans -- JSONB keypath extraction avoids full JSON parse on scan.
7b9c639
Parallel segmented scan -- Large unindexed queries split across CPU cores for parallel processing.
b339e5a
Index-only count for aggregations -- $group with $sum: 1 on indexed fields returns set size without touching documents.
b339e5a
Changed
Memory consumption reduced -- Skip bulk cache during insert, drop unused Value clones, use DocIdSet instead of BTreeSet for single-entry indexes.
4897f86
Streaming I/O throughout -- Replaced collect-then-process patterns with streaming iterators for finds, aggregations, and index creation.