Releases: NoKV-Lab/NoKV
Release list
v1.0.0-alpha.1
NoKV is now a single-node, agent-native copy-on-write filesystem β "git for live, large, derived state." This first alpha consolidates the pivot from a distributed KV/DFS into a focused CoW workspace runtime for AI agents and ML pipelines.
Where git versions small text at dev time, NoKV gives snapshot / clone / diff / rollback over live filesystem namespaces (code + data + model weights) at runtime speed β O(metadata), not O(data) β and at scale.
Highlights
Copy-on-write workspace operations
snapshotβ zero-copy MVCC version pin of a subtree (read-only, GC-protected).cloneβ writable fork; shares object blocks zero-copy (samegenerationβ same object keys); diverges on write (CoW); O(metadata). Spin up 100 agent workspaces off one base; each writes its own delta over shared blocks.diffβAdded/Removed/Modifiedbetween two subtrees; unchanged shared files are skipped.rollbackβ revert a workspace to a prior snapshot via clone-from-snapshot + atomic graft (keeps inode identity); discarded delta becomes GC-reclaimable, restored blocks survive.- CLI:
nokv clone,nokv diff(snapshot/rollbackexposed at the service/RPC layer).
See docs/cow-workspaces.md.
Architecture
- Single-node metadata engine (Holt 0.5.4) β local hot path, no quorum, no Redis/TiKV round-trip.
- Object data on S3-compatible storage (RustFS / S3 via OpenDAL); 4 MiB block / 64 MiB chunk.
- Structural zero-copy object layout:
blocks/{mount}/{inode}/{generation}/{chunk}/{block}β forks share blocks by construction. - Durability ordering: object-first, metadata-atomic-after β a crash leaves GC-able orphan objects, never a dangling pointer.
- The distributed/Raft metadata layer was removed in favor of a focused single-writer-owner model (read-only snapshots are shared by many readers).
Correctness & performance
- Write path: ~213 MiB/s sequential (release build), durable β
closedrains to S3. - Six write-path correctness bugs root-caused and fixed (overlapping staged blocks from FUSE re-dispatch, manifest bloat past the metadata value limit, silent zero-fill on getattr, stale dentry CAS on mid-write setattr, body-wipe after chmod, xattr rejection).
- GC safety β the
owns_block_object_keyinvariant: an inode reclaims only blocks it minted; retained snapshot pins protect still-shared base blocks. - 322 tests passing;
clippy -D warningsclean.
Scope & boundaries
- Single-node: one writer-owner per workspace; many readers share snapshots.
- POSIX via FUSE (Unix-only).
- Not yet in this alpha: cloud sharding + owner leases, derivation lineage, branch/merge, a FUSE control surface for clone.
Distribution
GitHub release only β not published to crates.io. No crate version was changed.
v0.9.0
Highlights
- Added the native fsmeta service path for distributed metadata workloads, including rooted mount lifecycle, WatchSubtree, SnapshotSubtree, quota fences, hard links, subtree authority handoff, fsmeta contract tests, and Docker/benchmark harnesses.
- Introduced and hardened the Peras metadata fast path: compiler proof hardening, isolated benchmark coverage, operation-id scoping, read-path materialization, and release-blocking CLI startup safety for authority key loading.
- Strengthened the distributed storage substrate with Eunomia authority grants, dynamic coordinator duty grants, rooted store membership, scan retry budgets, follower read modes, dependency-aware async apply, batched 2PC/RPC paths, and WAL/raftlog durability improvements.
- Expanded release and evaluation surfaces: GHCR image publishing, Docker Compose demo hardening, official fsmeta workload profiles, fsmeta median/long benchmark CI, DCO enforcement, VitePress docs, repository code contract, TLA artifacts, and correctness/chaos smoke coverage.
Install
Binary archives are attached for Linux and macOS on amd64/arm64. Each archive includes nokv, nokv-config, nokv-fsmeta, fsmeta diagnostic tools, README.md, LICENSE, and raft_config.example.json.
shasum -a 256 -c checksums.txtContainer images are published as:
ghcr.io/feichai0017/nokv:v0.9.0
ghcr.io/feichai0017/nokv:0.9.0
ghcr.io/feichai0017/nokv:0.9
ghcr.io/feichai0017/nokv:latestDocker Hub mirrors use the same tags when Docker Hub publishing is available:
docker.io/feichai0017/nokv:v0.9.0
docker.io/feichai0017/nokv:0.9.0
docker.io/feichai0017/nokv:0.9
docker.io/feichai0017/nokv:latestWhat's Changed
- feat(fsmeta): add native metadata service, fsmeta executor, server/client split, benchmark workloads, WatchSubtree, SnapshotSubtree, rooted mounts, quota fences, hard links, and subtree authority handoff.
- feat(eunomia): add dynamic coordinator duty grants and authority protocol hardening.
- feat(raftstore): add follower read modes, dependency-aware async apply, batched proposals, bounded scan retry, and 2PC rerouting/cleanup hardening.
- feat(wal/raftlog): enforce durability and retention contracts, batch fsync durability requests, rebuild segment catalogs, and shard raft WAL managers.
- perf(fsmeta): optimize placement, key shape routing, read paths, atomic mutate fast paths, TSO coalescing, and fsmeta benchmark paths.
- perf(lsm): shard data-plane WAL managers, add shard hint cache, reduce read-path allocations, and improve write/read/compaction paths.
- docs: replace mdBook with VitePress, add NoKV code contract, refresh public architecture/fsmeta docs, and document Peras architecture boundaries.
- bench: add official fsmeta workload profiles, fsmeta benchmark profile bundles, Docker benchmark CI, and improved benchmark diagnostics.
- ci: add GHCR Docker image publishing, DCO enforcement, CodeQL/Codecov stabilization, and updated GitHub Actions dependencies.
- fix(root): defer grant key loading until authority use so release binaries can run read-only CLI commands without grant key environment variables.
Additional Changes
This release includes many cleanup and hardening commits across control-plane protocol vocabulary, package boundaries, error taxonomy, fsmeta recovery, coordinator liveness, meta-root timing, Docker demo reliability, test deflaking, generated artifacts, and security/dependency updates.
New Contributors
No first-time contributors in this release.
Full Changelog: feichai0017/NoKV@v0.8.0...v0.9.0
v0.8.0
Highlights
- Added the namespace listing research line, including a hardened listing contract, benchmark tooling, and paper-oriented framing for direct-children / stable pagination style namespace access.
- Expanded the metadata-root and control-plane substrate with separated deployment, transport-backed replication, freshness / catch-up semantics, allocator fencing, and clearer rooted publish lifecycle boundaries.
- Reorganized NoKV as a more maintainable distributed storage research platform: single-node engine code now lives under
engine/*, DB/runtime boundaries were tightened, benchmark outputs were unified, and the top-level docs now explicitly describe the repository as an extensible research base.
What's Changed
- feat: add separated metadata root deployment in feichai0017@276f1c8a
- feat: add remote metadata root harness in feichai0017@e5b7f0f3
- feat: add coordinator allocator windows in feichai0017@01e398e6
- feat: add control-plane freshness contract in feichai0017@e2aa9805
- feat: expose control-plane root lag in feichai0017@5f0442b7
- feat: expose control-plane catch-up state in feichai0017@6c8682b5
- feat: return publish lifecycle assessment in feichai0017@ce4f190c
- feat: add transition ids and phases in feichai0017@4769dcb8
- research: scaffold namespace listing layer prototype in feichai0017@b0e8769c
- feat: harden namespace listing contract and benchmark tooling in feichai0017@be06333e
- refactor: reorganize engine runtime and benchmarks in feichai0017@b301d3b5
- refactor: tighten db cleanup and benchmark outputs in feichai0017@49e369bb
- docs: position nokv as a research platform in feichai0017@52e5b1bf
Additional Changes
- refactor: rename metadata substrate to virtual log in feichai0017@8810a670
- refactor: tighten control and execution protocol boundaries in feichai0017@05c8fed0
- refactor: split scheduler operation and publish runtime in feichai0017@f00d5e28
- refactor: tighten coordinator root storage boundary in feichai0017@a31f5bd6
- refactor: centralize package error surfaces in feichai0017@cd8b82c6
- refactor: centralize raftstore error surfaces in feichai0017@1e96d4f5
- refactor: unify distributed package error surfaces in feichai0017@3deeb955
- fix: align benchmark scripts with ycsb package in feichai0017@7be06fca
- deps(deps): bump github.com/actions/github-script from 8 to 9 in https://github.com/feichai0017/NoKV/pull/147
- deps(deps): bump golang.org/x/sys from 0.42.0 to 0.43.0 in https://github.com/feichai0017/NoKV/pull/148
New Contributors
No first-time contributors in this release.
Full Changelog: feichai0017/NoKV@v0.7.2...v0.8.0
v0.7.2
Highlights
- Hardened the single-node write path around a bounded MPSC commit queue, including correctness fixes for publish/wake behavior, a long-lived consumer session, batch draining, and sync-pipeline cleanup.
- Tightened distributed truth-source and runtime boundaries: local region truth now stays apply/bootstrap-driven, peer region metadata is explicitly a local mirror, and scheduler-side PD publishing is kept separate from local catalog updates.
- Clarified client routing/degraded behavior with explicit route-availability errors, unified retry entrypoints for single-key and multi-key flows, lazy store dialing, and cleaner transport/retry boundaries.
- Aligned top-level architecture and runtime documentation with the current code paths.
What's Changed
- fix: harden manifest and region recovery semantics in feichai0017@ebe2027
- fix: rollback can delete lock from a different transaction in feichai0017@ed235aa
- fix: Percolator commit accepts commitVersion earlier than startVersion in feichai0017@e9e8b38
- refactor: propagate context through raft paths in feichai0017@c182490
- refactor: remove write-path busy waits in feichai0017@a6a2a1a
- perf: specialize commit queue with bounded mpsc in feichai0017@5298094
- fix: wait for published head in commit queue in feichai0017@506ccca
- fix: harden queue and iterator benchmark paths in feichai0017@86c63fb
- perf: streamline mpsc queue consumer path in feichai0017@9920fef
- refactor: tighten region truth and scheduler boundaries in feichai0017@2e7a1f7
- refactor: clarify route lookup failure contracts in feichai0017@c9ef355
- refactor: surface route availability errors explicitly in feichai0017@16506b6
- refactor: split raft client routing and transport layers in feichai0017@1b071b0
- refactor: tighten distributed runtime boundaries in feichai0017@8614903
- refactor: unify client route retry entrypoints in feichai0017@9c5b750
- refactor: collapse store construction entrypoint in feichai0017@34b3bc2
- docs: align architecture docs with current code in feichai0017@2478146
Additional Changes
- refactor: narrow raftstore engine boundaries in feichai0017@dbd8c1e
- refactor: narrow legacy option fallback semantics in feichai0017@a924c2f
- refactor: simplify option normalization boundaries in feichai0017@a700b1d
- perf: tighten mpsc queue wake behavior in feichai0017@c3f5426
- test: extend queue benchmark coverage in feichai0017@12065b9
- docs: refresh benchmark snapshot in feichai0017@e4e21f9
- refactor: harden local region mirror updates in feichai0017@08f5985
- refactor: harden client route retry grouping in feichai0017@c1b7fc8
- refactor: trim raft client cleanup leftovers in feichai0017@e77d9f6
New Contributors
No first-time contributors in this release.
Full Changelog: feichai0017/NoKV@v0.7.1...v0.7.2
v0.7.1
Highlights
- Added practical LSM range-filter pruning for point reads and bounded scans, including exact-candidate point fast paths, table-internal block-range pruning, and read-path cleanup.
- Tightened value separation and value-log defaults: CF/keyspace-aware routing landed, ordinary multi-bucket vlog routing remains enabled,
ValueThresholdmoved to2048, and HotRing is now narrowed to an optional write-hot detector/throttling tool instead of a default data-path strategy. - Continued correctness and boundary cleanup across startup recovery, WAL/LSM integration, iterator semantics, range tombstones, region metadata APIs, and stale internal wrappers.
What's Changed
- feat: add range filter pruning for LSM reads by @feichai0017 in https://github.com/feichai0017/NoKV/pull/127
- feat: add value-separation policy by CF/keyspace by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/126
- perf(wal): decouple WAL fsync from commit pipeline via sync worker by @zzzzwc in https://github.com/feichai0017/NoKV/pull/123
- feat/external-sst-import by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/122
- fix: stop iteration on value-log read errors instead of silently skipping by @sreekar2307 in https://github.com/feichai0017/NoKV/pull/124
- fix: replace log.Fatal with error return in compact.State.Delete() by @sreekar2307 in https://github.com/feichai0017/NoKV/pull/120
- fix: prevent short-circuit in decrRefs to ensure complete cleanup by @sreekar2307 in https://github.com/feichai0017/NoKV/pull/119
- fix: enforce user iterator semantics by @nothiny in https://github.com/feichai0017/NoKV/pull/118
- fix: replace mapfile with POSIX-compatible read loop for macOS by @Anekoique in https://github.com/feichai0017/NoKV/pull/117
- fix: reorder munmap/truncate in Truncature to prevent mapping corruption by @LinnkidChen in https://github.com/feichai0017/NoKV/pull/111
- fix: prevent RWMutex reentrant deadlock in lsm compaction by @zzzzwc in https://github.com/feichai0017/NoKV/pull/110
- perf: optimize sequential inserts in skiplist with O(1) append by @zzzzwc in https://github.com/feichai0017/NoKV/pull/108
- proto: add read consistency fields to kv context and raft header by @wchwawa in https://github.com/feichai0017/NoKV/pull/107
- feat: add atomic batch write path for WAL-backed writes by @feichai0017 in https://github.com/feichai0017/NoKV/pull/103
- Add DeleteRange Support with Range Tombstones by @nothiny in https://github.com/feichai0017/NoKV/pull/99
- deps(deps): bump github.com/panjf2000/ants/v2 from 2.11.6 to 2.12.0 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/128
- deps(deps): bump github.com/panjf2000/ants/v2 from 2.11.5 to 2.11.6 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/125
Additional Changes
- fix: enforce strict startup recovery and return open errors in feichai0017@2d8820e
- refactor: simplify lsm compaction and diagnostics in feichai0017@4a3e571
- refactor: tighten kv entry ownership and key semantics in feichai0017@cc77b33
- refactor: narrow hotring usage and raise vlog threshold in feichai0017@b6e3450
- refactor: remove stale wrappers and hot tracker shim in feichai0017@e4e8574
- docs: align benchmark and engine documentation in feichai0017@6cae04c
New Contributors
- @sreekar2307 made their first contribution in https://github.com/feichai0017/NoKV/pull/119
- @Anekoique made their first contribution in https://github.com/feichai0017/NoKV/pull/117
- @LinnkidChen made their first contribution in https://github.com/feichai0017/NoKV/pull/111
- @wchwawa made their first contribution in https://github.com/feichai0017/NoKV/pull/107
Full Changelog: feichai0017/NoKV@v0.7.0...v0.7.1
v0.7.0
Highlights
- Added PD-based control plane integration for distributed mode (routing, metadata persistence, allocator bootstrap).
- Removed standalone/local transaction APIs from the embedded path; transaction semantics are now aligned with distributed Percolator flow.
- Continued iterator and LSM correctness improvements.
What's Changed
- fix [Bug/Feature] Iterator Does Not Support Reverse Iteration by @nothiny in https://github.com/feichai0017/NoKV/pull/75
- fix: preserve L0 fid ordering in replaceTables by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/95
- feat(pd): integrate PD-lite control plane with persistence and config-driven bootstrap by @feichai0017 in https://github.com/feichai0017/NoKV/pull/100
- feat: add iterator bounds to IteratorOptions by @CyberSleeper in https://github.com/feichai0017/NoKV/pull/101
- refactor: remove standalone txn APIs and align docs by @feichai0017 in https://github.com/feichai0017/NoKV/pull/102
Additional Changes
- fix: release pooled redis entries and clarify SetEntry version semantics by @feichai0017 in feichai0017@2eae696
- refactor: remove SetEntry API and add SetWithTTL by @feichai0017 in feichai0017@31053fd
New Contributors
- @nothiny made their first contribution in https://github.com/feichai0017/NoKV/pull/75
- @CyberSleeper made their first contribution in https://github.com/feichai0017/NoKV/pull/101
Full Changelog: feichai0017/NoKV@v0.6.1...v0.7.0
v0.6.1
What's Changed
- docker: bump golang from 1.25 to 1.26 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/68
- deps(deps): bump google.golang.org/grpc from 1.78.0 to 1.79.1 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/69
- feat: add batch insert support for badger and pure insert workload by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/70
- fix: add refcount lifecycle validation with panic on invalid state by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/72
- fix: add underflow guard to request.DecrRef by @hacker4257 in https://github.com/feichai0017/NoKV/pull/74
- fix: resolve locks during read operations by @zzzzwc in https://github.com/feichai0017/NoKV/pull/77
- fix: add underflow check in DecrRef method and corresponding test by @zqr10159 in https://github.com/feichai0017/NoKV/pull/67
- fix: add refcount underflow guards to ART.DecrRef and table.DecrRef by @vasilytrofimchuk in https://github.com/feichai0017/NoKV/pull/78
- fix: enforce strong durability semantics in LogFile.DoneWriting by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/82
New Contributors
- @hacker4257 made their first contribution in https://github.com/feichai0017/NoKV/pull/74
- @vasilytrofimchuk made their first contribution in https://github.com/feichai0017/NoKV/pull/78
Full Changelog: feichai0017/NoKV@v0.6.0...v0.6.1
v0.6.0
What's Changed
- deps(deps): bump golang.org/x/sys from 0.40.0 to 0.41.0 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/34
- deps(deps): bump github.com/pelletier/go-toml/v2 from 2.2.3 to 2.2.4 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/35
- deps(deps): bump github.com/dgraph-io/badger/v4 from 4.9.0 to 4.9.1 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/37
- deps(deps): bump github.com/panjf2000/ants/v2 from 2.11.4 to 2.11.5 by @dependabot[bot] in https://github.com/feichai0017/NoKV/pull/36
- refactor: unify metrics collection and stats export by @feichai0017 in https://github.com/feichai0017/NoKV/pull/38
- refactor: split raftstore store services and reduce duplication by @feichai0017 in https://github.com/feichai0017/NoKV/pull/50
- feat: support min_commit_ts validation for percolator commit by @zzzzwc in https://github.com/feichai0017/NoKV/pull/51
- fix: commit secondary when primary already committed by @zzzzwc in https://github.com/feichai0017/NoKV/pull/53
- fix: unify Entry lifecycle ownership across DB/Txn read paths by @feichai0017 in https://github.com/feichai0017/NoKV/pull/56
- fix(txn): decrement active txn counter for empty commits by @zqr10159 in https://github.com/feichai0017/NoKV/pull/64
- fix: attempt to close all resources in DB.Close() even on error by @ByteByteUp in https://github.com/feichai0017/NoKV/pull/65
- refactor: unify storage IO on vfs and add file-level fault injection by @feichai0017 in https://github.com/feichai0017/NoKV/pull/66
New Contributors
- @zzzzwc made their first contribution in https://github.com/feichai0017/NoKV/pull/51
- @zqr10159 made their first contribution in https://github.com/feichai0017/NoKV/pull/64
- @ByteByteUp made their first contribution in https://github.com/feichai0017/NoKV/pull/65
Full Changelog: feichai0017/NoKV@v0.5.0...v0.6.0
Release v0.5.0
v0.5.0
Highlights
- Bucketed ValueLog (hashkv) with hot/cold routing for better large-value isolation and GC control
- HotRing externalized and split into read/write tracking; new write-hot metrics exposed
- TOML-based engine config loader for embedded deployments
Storage / ValueLog
- Bucketed ValueLog with hot/cold buckets
- Parallel VLog GC with compaction/backlog pressure control
- Fixes for GC skip thresholds and candidate filtering
HotRing & Observability
- Read/write HotRing split to avoid read hotness impacting write throttling
- Added HotWriteKeys / HotWriteRing metrics
- HotRing defaults and config normalization tuned
Config & UX
- New TOML loader:
LoadOptionsFile/ApplyOptionsFile - Example config:
nokv.options.toml
Fixes
- Hardened raftstore reads and MVCC scans
- Iterator ordering and write-throttle alignment fixes
Docs
- Expanded HotRing/VLog/Compaction docs
- DBDB badge
Release v0.4.2
This release provides critical security fixes, cache stability improvements, and enhanced CI/CD integration. It addresses issues identified by CodeQL and optimizes the W-TinyLFU cache implementation for long-term stability.
π Key Highlights
π‘οΈ Security Fixes
- LSM/FID Boundary Check: Fixed a high-severity integer overflow vulnerability in SSTable file ID parsing (utils.FID). This prevents potential memory corruption or logical errors when processing large file IDs. (Addressed CodeQL scan alert).
β‘ Cache Optimization (W-TinyLFU)
- Automatic Freshness (Reset Mechanism): Fixed a bug where the threshold for Frequency Sketch and Bloom Filter resets was uninitialized. Resets now trigger every 10 * size operations, preventing historical data from polluting the frequency estimates.
- Improved Entry Validation: Added explicit bounds checks in the Set path for the internal cache. Key hashes exceeding uint32 are now handled safely without silent truncation, ensuring consistency with the Get logic.
π Infrastructure & CI/CD
- AI-Powered Code Review: Integrated CodeRabbit for automated PR reviews, configured specifically for the Go toolchain (go-vet, golangci-lint).
- Dependency Updates: Bumped github.com/panjf2000/ants/v2 to v2.11.4 for improved concurrency pooling stability.
π What's Changed
- fix(cache): initialize reset threshold for TinyLFU by @feichai0017
- fix(security): prevent integer overflow in FID parsing by @feichai0017
- chore: add .coderabbit.yaml for intelligent PR analysis
- deps: upgrade ants/v2 pool manager
π Full Changelog
For a detailed list of all 100 commits since v0.4.1, please refer to the commit history
(feichai0017/NoKV@v0.4.1...v0.4.2).