1 of 8

ZERO DEPENDENCY 2026 · TRACK D — DATA & STORAGE

kvlite.

a crash-safe LSM key-value store, built on nothing but the JDK.

No frameworks. No packages. No dependency manifest — because there's nothing to declare one in.

21/21 TESTS PASSING

REPRODUCIBLE BUILD

JDK 21 · javac+Makefile

GUAVA→BitSet BLOOM

01

2 of 8

THE PROBLEM

Every small storage need drags in a dependency tree.

Need persistence?

→ RocksDB bindings, or a full embedded database JAR

Need a membership filter?

→ Guava's BloomFilter — millions of downloads, one class

Need JSON on disk?

→ Jackson or Gson, for a format you fully control internally

kvlite proves all three are buildable from the standard library alone — with tests to prove it.

02

3 of 8

ARCHITECTURE

Write path in, read path back out.

CLI

put · get · del · scan · bench

LSMEngine

public facade

MemTable

ConcurrentSkipListMap

WAL

CRC32, fsync'd

SSTableManager

bloom filter + sparse index

Compactor

merges, drops tombstones

03

4 of 8

DURABILITY

Every write is durable before it's visible.

[4B length][1B op][4B keyLen][key][4B valLen][val][8B CRC32]��appendPut/appendDelete → fsync (FileChannel.force) → THEN memtable insert�replay() on startup rebuilds the memtable — stops cleanly at the first

corrupted/truncated tail record instead of throwing.

Proven live, not simulated:

1. write 3 keys�2. Runtime.getRuntime().halt(0) — hard kill, zero shutdown hooks�3. fresh JVM process reopens the same dir�RECOVERY OK — all 3 keys survived

04

5 of 8

PACKAGE KILLER BONUS

Guava's BloomFilter, replaced with BitSet.

h1(key) = key.hashCode() h2(key) = FNV-1a variant�position(i) = (h1 + i·h2) mod m

Kirsch–Mitzenmacher double hashing — k hash functions from just two, statistically equivalent to k independent ones.

If any bit is 0 → definitely absent, skip the disk read entirely.

If all k bits are 1 → probably present, then check the file.

05

6 of 8

REAL NUMBERS, REAL RUNS

Nothing here was estimated.

21 / 21

tests passing

7,528

writes / sec

339 µs

p50 write latency

1,331 µs

p99 write latency

Honest limitation: fsync-per-write bounds throughput. Group-commit batching is documented

as the next step, not hidden — a prior batched build reached ~117K writes/sec on similar hardware.

0 third-party imports — grep-verified across every file in src/ and tests/.

06

7 of 8

REPRODUCIBLE BUILD BONUS

Two clean builds. One hash.

build 1

7acda9fd25bfb9ccabf65b3932f58e8d545d37bfdb7e5cf415c93902e65b8e5a

build 2

7acda9fd25bfb9ccabf65b3932f58e8d545d37bfdb7e5cf415c93902e65b8e5a

✓ match

$ make clean && make build�$ find build -name "*.class" | sort | xargs sha256sum | sha256sum�(repeat)

byte-identical output, independently verified on the same machine, twice.

07

8 of 8

ZERO DEPENDENCY 2026 · TRACK D

Every line here is�standard-library Java.

No supply chain. Nothing to audit but our own code.

kvlite

Track D · Java · JDK 21 · zero runtime dependencies

08