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
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
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
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
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
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
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
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