OMGDB DOCS
// Docs

Changelog

Dated, user-facing summaries of what changed in OMGDB, one entry per release pass.


What changed, written for users rather than as a commit log. For where the project is going next, see the roadmap.

2026-07-13 — the application pass

A pass that fills in the everyday MongoDB-style application surface — immediate updates, bulk writes, transactions, and real collection/index lifecycle — across the CLI, MCP, the driver protocol, and both language clients.

  • Immediate updates: update-one, update-many, find-one-and-update (with before/after images), and delete-many apply update operators atomically and fail-closed — a many-document update commits its complete selected set or appends nothing. Every command carries explicit scan/mutation bounds; exceeding one is an error, never a partial answer.
  • Explicit-seed upsert: when nothing matches, update-one inserts a document you supply — OMGDB never synthesizes a document from the filter.
  • Ordered bulk writes: bulk-write runs a versioned program of up to 1,024 CRUD operations as one atomic transaction, where later steps read earlier writes.
  • One-request transactions: the driver and the TypeScript/Python clients expose an ordered insert/get/replace/delete program executed with read-your-writes visibility and committed as one begin/commit frame with one fsync — no cross-request transaction tokens, no held locks. Before executing, a transaction authorizes itself by replaying the canonical op-log, never by trusting derived cache files.
  • Collection lifecycle: create-collection (empty collections are first-class), list-collections, and drop-collection are authoritative op-log operations.
  • Named indexes: indexes now have stable, collection-scoped names — create-index --name, list-indexes, drop-index; legacy nameless definitions derive a deterministic identity, and checked-in legacy-log fixtures pin the cross-version behavior.
  • count-documents and distinct: planner-driven counting and deterministic distinct values, bounded and order-stable.
  • MCP: the server now exposes 48 tools, and the dangerous scope became real — drop_collection is never advertised or callable below it.
  • In the playground: update-one and an ordered bulk-write program run live in your browser on the real engine.

Stated plainly: transactions and DDL pay a synchronous canonical-replay preflight (bounded, correctness-first) until paged state lands, and upserts are explicit-seed only by design.

2026-07-11 — the native-search pass

A pass that gives the engine a real retrieval stack — full-text, semantic, and hybrid — without giving up the text-canonical design.

  • Full-text search: define-search-index writes a versioned, typed index definition into the op-log, where it is replayed, transacted, and compacted like any other operation. Queries are a strict AST — term, phrase, prefix, fuzzy, regex, boolean — with no query-string dialect to escape.
  • Deterministic BM25: per-field weights, versioned English/Greek/keyword/n-gram analyzers, bounded UTF-8-safe highlighted snippets, and --explain score breakdowns with stable semantics versions. Scores are identical on every platform, browser included.
  • Structured + text in one call: search --filter intersects a MongoDB-style filter with the text query before ranking, at one consistent log boundary, and re-checks every hit against canonical live-document state.
  • Semantic and hybrid modes: exact-cosine ranking over locally computed embeddings, and versioned deterministic reciprocal-rank fusion of the lexical and semantic rankings.
  • Pinned local models: omgdb models pull installs bge-small-en-v1.5 or multilingual-e5-small with revision, size, SHA-256, tokenizer, and license verification — the only network path in the engine. Search never downloads; builds without model support report the capability as unavailable.
  • Honest derived generations: the accelerated index records definition/analyzer digests, its exact log boundary, file checksums, and rebuild reason. search-index-status reports them; a missing, stale, corrupt, swapped, or partial generation is rebuilt, never served.
  • In the playground: the full lexical lifecycle — define, search, fuzzy, filter intersection, status — runs live in your browser on the real engine.

Current limits, stated plainly: search opens the full in-memory store, rebuilds are synchronous and whole-index (no incremental tail indexing yet), semantic mode exact-scores every filtered chunk, and model inference requires a supported native build.

2026-07-02 — the performance pass

A pass focused on making writes fast without giving up the text-canonical design, and on tightening the agent contract.

  • Bulk import: import-jsonl loads 50,000 documents in about 2 seconds, committing atomic batches with one fsync each.
  • Single writes: durable single-document writes are now fsync-bound — the same physical wall every embedded database hits — instead of paying a cache rewrite per operation. Derived cache checkpoints persist on a bounded-lag policy and heal lazily on read.
  • describe shows the write contract: the live manual now includes each collection’s indexes and validation rules alongside the inferred schema and samples.
  • Vectors: vsync is incremental (fresh embeddings are skipped), and vsearch/context reuse persisted vectors instead of re-embedding per call.
  • Query planning: $in now plans as a union of index buckets instead of falling back to a scan, and two-sided ranges scan the more selective bound.
  • MCP contract fixes: unknown tool names report “unknown tool”, destructive tools carry real destructive hints, and per-tool required parameters — including vsearch’s k/filter and context_pack’s budget/filter — are declared in the schema.
  • Structured errors: explain and diagnose fail loudly on a missing collection with a did-you-mean hint; find keeps empty-result semantics but warns on stderr.
  • Compaction honesty: compacting the op-log preserves each surviving record’s original timestamp.
  • Regression gate: the production benchmark harness now doubles as a coarse regression gate, so a reintroduced hot-path cost fails loudly in CI-adjacent runs.

The full engineering story of this pass — how a text-log database got its writes back — is in the blog post 63x faster inserts.

2026-06 — the hardening pass

A pass focused on durability and recovery guarantees.

  • Crash-truncation test matrix: the log is truncated at every plausible byte boundary in tests, including non-UTF-8 tears, and recovery must hold at each one.
  • Canonical codec property test: the codec is bit-exact — dump → load → dump is byte-identical, enforced by a property test rather than a handful of examples.
  • repair tool: an opt-in recovery command that reports a corrupt log’s intact prefix and truncates to it only with explicit confirmation, backing up the original first.
  • Cross-platform CI: Linux, Windows, and macOS, plus a pinned minimum supported Rust version.