inro

11-08-2026

Phase one: the core

Pager, copy-on-write B+tree, free list, transactions, secondary indexes and per-page encryption.

Pager

The layer every other piece sits on: fixed-size pages read and written by number, with the header and the two alternating meta slots on top of it. Nothing above the pager knows how a page reaches disk.

Copy-on-write B+tree and free list

A modified page is written into a free slot, never over live data, and a commit is a single meta-page write. The free list that makes this affordable is written too: pages a transaction frees go to a pending list tagged with the freeing txn_id, and move to the reusable head once the oldest active reader has moved past that id.

file1. read page2. write copy into a free slot3. commit = new metapagecopymeta
A commit frees the old page rather than deleting it; it returns to the free list for reuse.

Transactions

One writer held by an in-process mutex, readers that never block and are never blocked. A reader pins a meta page and reads the immutable tree hanging from it — there is no recovery procedure to run, only three reads at open: the header and both meta slots.

Catalogue and secondary indexes

Indexes are maintained inside the same transaction as the data they index, through an extractor function registered in a one-page catalogue. That's what buys the guarantee an index cannot drift from the data it was built from.

delete_range

Range deletion over a contiguous key range unhooks whole subtrees without reading their leaves: internal nodes are walked, their child pointers are dumped to the free list in bulk, and the cost stays proportional to the number of internal pages, not the number of deleted entries.

Per-page encryption

Optional, authenticated, fixed at file creation. The nonce is derived rather than stored, and it is built from a monotonic page-write counter kept apart from the transaction id — not from txn_id itself — so a transaction's own lifecycle, however long it runs, cannot make a nonce repeat.

This is what phase 1 has written so far, not a public API and not a shipping date. inro is still in phase 1.