Roadmap

What is implemented,
and what is not.

Development follows a vertical sequence. 62 items are complete. The numbered engine sequence ends at 73; later coordinator, columnar, and schema-evolution work is also complete. Serializable isolation, concurrent writers, and MCP remain planned or deferred.

0

Rust foundation

Stable types, schema, parser, HIR, and relational IR.

Complete
1

Storage foundation

4 KiB slotted pages, bounded buffer pool, heap insert/scan, and reopen.

Complete
2A

Transactions + WAL core

Transaction lifecycle, versioned WAL, LSN / pageLSN, and durable commit.

Complete
2B

Crash recovery

Startup analysis, repeat-history redo, reverse undo, and crash-tail handling.

Complete
2B.1

Single writer + runtime rollback

Lazy writer ownership, retryable commit/rollback, and before-image undo.

Complete
2C

Checkpoint + WAL lifecycle

Quiescent checkpoints, monotonic logical LSNs, and bounded WAL generation recycling.

Complete
3A

Typed expressions + NULL

Contextual NULL typing, three-valued logic, and explicit IS NULL.

Complete
3B

Typed DML

INSERT / UPDATE / DELETE, stable RowIds, and affected-row results.

Complete
3C

INNER JOIN

Qualified columns, aliases, self joins, and nested-loop execution.

Complete
3C.5

Schema fingerprints

Canonical table encoding, SHA-256 fingerprints, and identity checks on open.

Complete
integrity

Page and WAL integrity

Page v4/v5 CRC32C, WAL v4 checksums, and decoder fuzzing.

Complete
3D

Aggregates + sort

ORDER BY, global aggregates, and in-memory GROUP BY.

Complete
4A

Versioned RowId

Page v5 slot generations, tombstone reuse, and stale-locator detection.

Complete
4B

Heap reuse + safe relocation

Deterministic first-fit and UPDATE relocation that returns the current RowId.

Complete
4C1

Persistent B+Tree

Transactional create/insert/point lookup, mixed pages, and split recovery.

Complete
4C2

B+Tree delete / rebalance

Exact (key, RowId) delete, merge-only rebalance, and root collapse.

Complete
4D1

Index catalog + backfill

Persistent IndexCatalog and transactional create_index backfill.

Complete
4D2

Heap / index DML maintenance

Registered indexes stay consistent with heap and SQL DML.

Complete
4E

Point IndexScan

Equality and IS NULL predicates can select a point IndexScan.

Complete
4F

ANALYZE and costing

Explicit ANALYZE snapshots and deterministic point access-path costs.

Complete
5A

Protocol v1

Language-neutral binary framing. Frozen; current servers reject v1 frames.

Complete
5B

netbadbd server

Manifest bootstrap, TCP sessions, and a dedicated database worker.

Complete
5C

TLS and authorization

Mutual TLS, certificate principals, and per-table operation scopes.

Complete
6A

Go Protocol client

Independent Go Protocol v2 client and generated typed bindings.

Complete
6C

Rust remote SDK

Synchronous netbadb-sdk::remote client over Protocol v2.

Complete
6D

Inspection CLI

Offline catalog and statement inspection; current machine contract is Inspection JSON v7.

Complete
6E1

SQL diagnostics LSP

Diagnostics-only language server over SDK Schema Spec v1 or v2.

Complete
7A

Performance baseline

Reproducible warm-cache benchmarks without changing engine behavior.

Complete
7B

Range IndexScan

Costed bounded Int64/UInt64 range scans.

Complete
7C

Predicate-first NestedLoopJoin

Rejected join pairs allocate no combined row.

Complete
7D

Costed HashJoin

Analyzed Scan × Scan INNER JOIN may select a simple equi HashJoin.

Complete
7E

Validate-once heap scan

Each immutable heap page is fully validated once per sequential scan.

Complete
7F

Join predicate prebinding

NLJ and HashJoin bind column positions once before candidate loops.

Complete
7G

Borrowed join evaluation

Join predicates borrow column and literal scalars; only computed results are owned.

Complete
7H

Inequality bound rejection

NestedLoopJoin skips left probes that cannot match any right row.

Complete
7I

Adaptive inequality sweep

Exact candidate counting can replace a full NestedLoopJoin inner loop.

Complete
7J

Required-column decode

Query plans decode only required heap columns; DML still uses full rows.

Complete
7K

Move-aware projection

Identity and unique projections move owned values instead of cloning them.

Complete
7L

Direct COUNT(column) scan

A lone global COUNT(column) over SeqScan counts presence without materializing rows.

Complete
7M

Direct multi-COUNT scan

One exact heap pass shares live-row counts across multiple COUNT outputs.

Complete
7N-7V

Filter and COUNT streaming

Borrowed Filter evaluation, streamed SeqScan/Filter/Project, and COUNT specializations.

Complete
51

Multi-storage atomic commit

WAL Prepare plus an independent coordinator log for two or more local write storages.

Complete
52

Range partitions

PartitionCatalog v1 RANGE partitioning with exact pruning and atomic row movement.

Complete
53

LSM storage

Synchronous LSM table storage with MVCC, SSTables, flush, and leveled compaction.

Complete
55

Batch execution

Bounded 256-row batches for SeqScan, Filter, Project, Limit, Aggregate, and HashJoin probe.

Complete
isolation

Read Committed and Repeatable Read

Explicit isolation handles; implicit statements use Read Committed. Serializable is not available.

Complete
72

Index nested-loop join

Analyzed Scan × Scan INNER equality joins may point-probe an ordered right index.

Complete
73

IndexJoin cost calibration

Heap point-probe costs stay aligned with managed_page_count SeqScan comparison.

Complete
R17

Runtime schema catalog

Database::open_catalog reconstructs the full schema without external TableDefs.

Complete
R19

SQL CREATE TABLE

Transactional Heap CREATE TABLE over native SQL.

Complete
R21

SQL DROP TABLE

Exact prepared DROP TABLE name over the native SQL frontend.

Complete
R7

SQL CREATE / DROP INDEX

Single-column non-unique Heap BTree CREATE INDEX and DROP INDEX.

Complete
PTv2

Physical Types v2

Exact-width integers, Float32/Float64, and Bytes; no implicit numeric widening.

Complete
5A2

Protocol v2

Current native wire contract. Servers and Rust/Go clients speak v2 only.

Complete
R26

SQL ALTER TABLE

Heap rename, nullable ADD, restricted DROP, and SET/DROP NOT NULL over native SQL.

Complete
3A-vis

Global snapshot visibility

Gap-free DatabaseCommitSeq and a published Heap/LSM visibility vector. Repeatable Read pins the first vector.

Complete
3B-3F

Coordinator pipeline and group commit

Synchronous pipelining, log compaction, and explicit group commit with batched Prepare/Commit/Change Stream barriers.

Complete
Col

Derived columnar projections

Opt-in ColumnarScan, change stream, Base+Delta, compaction, lazy I/O, and caller-driven maintenance. Heap and LSM remain authoritative.

Complete
Adapt

Adaptive operations

Caller-driven inspection and one-action maintenance. No background scheduler or timer.

Complete
M11

Deployment manifest v11

Current netbadbd startup contract. Manifests v1–v10 are rejected.

Complete
NBOP7

NBOP v7 operator plane

Local Unix-domain operator protocol for status, Adaptive controls, and explicit physical-design approval.

Complete
PG-rm

PostgreSQL wire removed

netbadb-pgwire and netbadbd --postgres were deleted. Native Protocol v2 is the only database network frontend.

Complete
next

Serializable isolation

Serializable isolation, concurrent writers, and broader join enumeration remain later work.

Next
6E2

MCP adapter

Deferred: official MCP SDKs currently exceed the Rust 1.85 MSRV.

Later
7+

Further optimization

General ALTER COLUMN TYPE, one-sided/Text range costing, and broader HashJoin eligibility.

Later

Not included in the current release

Serializable isolation, concurrent writers, and cross-process file locking

PRIMARY KEY / UNIQUE / FK constraints, IF EXISTS, and index-only scans

General ALTER COLUMN TYPE, LSM/partitioned DDL composition, and arbitrary ALTER after DML

Full SQL: outer joins, subqueries, HAVING, DISTINCT, window functions

External sort spill, PostgreSQL wire compatibility, and complete information_schema

MCP adapter (deferred past MSRV), SQL EXPLAIN, network CDC, and on-disk format migrations