Releases: kacy/ember
v0.4.9
What's Changed
- fix: replace bincode with postcard in raft log by @kacy in #296
- feat: ember-client — native async RESP3 client library by @kacy in #297
- feat: CLI watch mode, batch mode, and proto-ts stub by @kacy in #298
- feat: add Redis 6.2+ commands (LMOVE, GETDEL, GETEX, ZDIFF, ZINTER, ZUNION) by @kacy in #299
- feat(server): automatic snapshot scheduling by @kacy in #300
- fix: rustfmt and clippy cleanup after sprint 1-4 merges by @kacy in #301
- refactor(cli): remove duplicate connection code by @kacy in #302
- feat(client): typed API and pipelining by @kacy in #303
- feat(client): close gRPC API gap — 31 new commands + pub/sub subscriber + vector commands by @kacy in #304
- feat(client): add hincrby by @kacy in #305
- feat(grpc): close api gap — 39 new rpcs by @kacy in #306
- docs: update ember-client readme, add crates index, regenerate protos by @kacy in #307
- feat(ts): scaffold ember-ts client with proto codegen by @kacy in #308
- feat(ts): ember-ts client — 65+ methods, full api parity by @kacy in #309
- fix: launch readiness — auth docs, healthcheck, metrics, info fields by @kacy in #310
- fix: rustfmt cleanup by @kacy in #311
- feat: WAIT command and CONFIG SET live-apply (maxmemory, maxmemory-policy) by @kacy in #312
- feat: keyspace notifications by @kacy in #313
- observability and reliability: prometheus counters, crash recovery, TLS tests by @kacy in #314
- feat: EXPIRETIME, PEXPIRETIME, SMOVE, and SINTERCARD by @kacy in #315
- feat: bitmap commands (GETBIT, SETBIT, BITCOUNT, BITPOS, BITOP) by @kacy in #316
- feat: LMPOP and ZMPOP commands by @kacy in #317
- feat: EXPIREAT, PEXPIREAT, GETSET, MSETNX, LPOP/RPOP count by @kacy in #318
- feat: HRANDFIELD and ZRANDMEMBER by @kacy in #319
- feat: surface 17 new commands across cli, grpc, and client libraries by @kacy in #320
- docs: accuracy pass — concurrent mode removal + command parity by @kacy in #321
- fix: eliminate production panics in client decoder and server startup by @kacy in #322
- fix: auth failure metrics, command memory budget, migration progress by @kacy in #323
- launch prep: FLUSHALL, MEMORY USAGE, and docs clarity by @kacy in #324
- fix: replication send failure counter and go subscribe error propagation by @kacy in #325
- docs: remove status section, relocate stats to benchmarks by @kacy in #326
- fix: deps and ci hardening by @kacy in #327
- style: cargo fmt by @kacy in #328
- fix: remove atomic-polyfill from dep tree by @kacy in #329
- fix: bitop cross-shard correctness; update test count by @kacy in #330
- feat: pre-launch quick wins (COMMAND, HINCRBYFLOAT, Z*STORE, helm pvc, npm publish) by @kacy in #331
- chore: rename npm package to emberdb, switch to oidc trusted publishing by @kacy in #333
- chore: rename npm package to emberdb, add oidc trusted publishing by @kacy in #332
- chore: add HEALTHCHECK to Dockerfile by @kacy in #334
- docs: update command count to 190+ by @kacy in #335
- style: cargo fmt — fix formatting from pr #331 by @kacy in #336
- fix(go): regenerate protobuf stubs for 17 new rpcs by @kacy in #337
- chore: bump version to 0.4.9 by @kacy in #338
- fix: make cluster produce cluster_state:ok on bootstrap by @kacy in #339
Full Changelog: v0.4.8...v0.4.9
v0.4.8
performance
- entry struct optimizations: version field moved to lazy side table, cached_value_size packed as u32, ENTRY_OVERHEAD tightened from 128 to 104 (#284-287)
- skip touch() timestamp updates when eviction is disabled (#287)
- packed hash encoding — hash memory reduced from ~451 to ~240 B/key (#276)
- vector insert throughput optimization with binary-encoded VADD_BATCH (#271-272)
fixes
- ENTRY_OVERHEAD bumped from 100 to 104 for cross-platform CI compatibility (#292-294)
- rate-limited ENOSPC handling for AOF writes (#249)
docs
- removed concurrent mode references — sharded is now the only execution mode (#275, #291)
- refreshed all benchmark numbers from 2026-02-25 GCP run (#288-290)
- added documentation section, code of conduct, performance tuning guide, production checklist (#270, #281-282)
full changelog: v0.4.7...v0.4.8
What's Changed
- fix: phase a quick wins — replication, dead code, CI coverage by @kacy in #241
- ci: enable cluster + CLI integration tests by @kacy in #242
- fix: use serial execution for integration tests by @kacy in #243
- fix: diagnose and fix cluster integration test failures on CI by @kacy in #244
- feat: persistent raft log storage by @kacy in #245
- docs: update raft persistence references by @kacy in #246
- feat: SSCAN, HSCAN, ZSCAN collection scanning by @kacy in #247
- feat: CLIENT ID / SETNAME / GETNAME / LIST by @kacy in #248
- fix: rate-limited ENOSPC handling for AOF writes by @kacy in #249
- feat: WATCH optimistic locking + INFO completeness by @kacy in #250
- feat: COPY, OBJECT, TIME, LASTSAVE, ROLE (audit #11-13) by @kacy in #251
- feat: ACL per-user access control by @kacy in #252
- docs: update READMEs for recent feature additions by @kacy in #253
- feat: RANDOMKEY, TOUCH, SORT commands by @kacy in #254
- feat: ZREVRANK, ZREVRANGE, ZCOUNT, ZINCRBY, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZPOPMIN, ZPOPMAX by @kacy in #255
- feat: SUNION, SINTER, SDIFF, SPOP, SRANDMEMBER, SMISMEMBER + STORE variants by @kacy in #256
- feat: LINDEX, LSET, LTRIM, LINSERT, LREM, LPOS list commands by @kacy in #257
- feat: SETNX, SETEX, PSETEX string commands by @kacy in #258
- feat: GETRANGE, SETRANGE, SUBSTR string commands by @kacy in #259
- feat: disk-full handling for AOF writes by @kacy in #260
- feat: OOM rejection visibility by @kacy in #261
- feat: config validation bounds checking by @kacy in #262
- feat: improve graceful shutdown drain visibility by @kacy in #263
- chore: switch license from MIT to Apache 2.0 by @kacy in #264
- refactor: split command.rs into command/ module by @kacy in #265
- refactor: split connection.rs into connection/ module by @kacy in #266
- refactor: deduplicate expiry-check pattern with get_live_entry helper by @kacy in #267
- refactor: eliminate unnecessary clones in sorted set and crossslot paths by @kacy in #268
- feat: data type, eviction, and stress benchmark workloads by @kacy in #269
- docs: changelog, migration guide, production checklist, troubleshooting, performance tuning by @kacy in #270
- perf: vector insert performance optimization by @kacy in #271
- perf: optimize vector insert throughput by @kacy in #272
- docs: update vector benchmarks after insert optimization by @kacy in #273
- docs: add SIFT1M recall and throughput results by @kacy in #274
- docs: refresh all benchmarks, remove concurrent mode by @kacy in #275
- perf: packed hash encoding to reduce memory ~451 → ~240 B/key by @kacy in #276
- fix: remove stale --no-grpc flag from bench scripts by @kacy in #277
- docs: update hash memory benchmark from 451 to 243 B/key by @kacy in #278
- docs: fix outdated compatibility matrix and stale references by @kacy in #279
- fix: cargo fmt on hash module by @kacy in #280
- docs: add documentation section to readme by @kacy in #281
- docs: add code of conduct by @kacy in #282
- docs: fix stale claims in readmes by @kacy in #283
- perf: move version field to lazy side table by @kacy in #284
- perf: pack cached_value_size as u32 by @kacy in #285
- perf: tighten ENTRY_OVERHEAD from 116 to 100 by @kacy in #286
- perf: skip touch() when eviction is disabled by @kacy in #287
- docs: update memory benchmark numbers by @kacy in #288
- docs: update stale memory numbers in readme by @kacy in #289
- docs: update benchmark results from 2026-02-25 GCP run by @kacy in #290
- docs: remove concurrent mode references, update readme benchmarks by @kacy in #291
- fix: bump ENTRY_OVERHEAD from 100 to 104 for CI platform compat by @kacy in #292
- fix: update safety_margin test for ENTRY_OVERHEAD 104 by @kacy in #293
- fix: update stale overhead comment in eviction test by @kacy in #294
- chore: release v0.4.8 by @kacy in #295
Full Changelog: v0.4.7...v0.4.8
v0.4.7
What's Changed
Full Changelog: v0.4.6...v0.4.7
ember-0.1.1
a low-latency, memory-efficient distributed cache
ember-0.1.0
a low-latency, memory-efficient distributed cache
v0.4.5
what's new
batch pipeline dispatch
sharded mode pipelining had a major throughput regression after the thread-per-core PR (#230). per-command channel sends caused head-of-line blocking at high pipeline depths (P=16 dropped from 1.2M to 202k ops/sec).
the fix groups pipeline commands by target shard and sends one batch message per shard, reducing channel traffic from O(pipeline_depth) to O(shard_count). this eliminates contention and restores monotonic scaling:
| pipeline depth | SET (ops/sec) | GET (ops/sec) |
|---|---|---|
| P=1 | 222k | 222k |
| P=4 | 765k | 764k |
| P=16 | 1.56M | 1.96M |
| P=64 | 1.95M | 3.21M |
| P=256 | 2.07M | 4.08M |
sharded mode now achieves 1.6x redis SET and 1.7x redis GET throughput at P=16 (up from 1.2-1.3x).
other changes
- thread-per-core workers with SO_REUSEPORT (#230)
- CompactString keys with SSO for ≤24 bytes (#228)
- zero-copy read loop via split_to (#227)
- hot-path optimizations: fused lookups, cached sizes, packed Entry (#226)
- O(log n) sorted set rank queries (#224)
- pipeline scaling and transaction benchmarks (#231)
- sort list commands alphabetically in CLI help
- resolve clippy warnings and protobuf CompactString migration
full changelog
v0.4.4
what's new
VADD_BATCH command
batch vector insert for dramatically improved throughput — send multiple vectors in a single command instead of one round-trip per vector.
VADD_BATCH key DIM 3 a 0.1 0.2 0.3 b 0.4 0.5 0.6 METRIC COSINE
- RESP3 and gRPC support
- up to 10,000 vectors per batch
- updated python client (
vadd_batch()) and benchmarks
security hardening
comprehensive audit across all 6 crates:
- ember-protocol: reject oversized bulk strings (512 MB cap), aggregate frame limits (1M elements), finite ZADD score validation
- emberkv-core: eliminate panicking indexing, checked arithmetic for memory estimates, SCAN cursor bounds, RENAME self-check
- ember-server: pipeline depth limit (10k), gRPC concurrency limit (256/conn), gRPC auth interceptor with constant-time comparison
- ember-persistence: atomic AOF truncation (write-to-temp-then-rename), vector dimension validation on replay, snapshot shard_id validation, encryption key zeroize on drop
- emberkv-cli: filter AUTH from history, history file permissions (0600), ANSI escape sanitization in responses
- ember-cluster: release-mode slot range assertions, raft command validation (AssignSlots, BeginMigration, CompleteMigration), encoding truncation guards, gossip incarnation poisoning protection
What's Changed
- harden server — startup, shutdown, overflow guards by @kacy in #91
- harden server — startup, shutdown, overflow guards by @kacy in #92
- harden round 3 — overflow, DoS, correctness fixes by @kacy in #93
- tasteful refactoring — clarity, dedup, structure by @kacy in #94
- feat: vector similarity search with HNSW by @kacy in #95
- harden vector operations — bug fixes, tests, docs by @kacy in #96
- fix: gate proto tests behind protobuf feature flag by @kacy in #97
- refactor: deduplicate accept loop, slowlog, pubsub in ember-server by @kacy in #98
- refactor: keyspace helpers for expiry, collection cleanup, and error strings by @kacy in #99
- refactor: extract_strings and extract_bytes_vec helpers in ember-protocol by @kacy in #100
- harden: replace unmaintained dep, enable overflow checks by @kacy in #101
- harden ember-server — auth rate limiting, pubsub limits, integer safety by @kacy in #102
- harden ember-protocol — vector dimension and HNSW parameter caps by @kacy in #103
- harden ember-persistence — safe u32 length casts in format layer by @kacy in #104
- harden ember-cluster — saturating arithmetic in migration progress by @kacy in #105
- perf: build + serialization fast paths by @kacy in #106
- perf: zero-copy command parsing + keyspace fast path by @kacy in #107
- perf: small wins — static bytes and inline hints by @kacy in #108
- update benchmark results post-performance audit by @kacy in #109
- add string helpers to concurrent mode by @kacy in #110
- fix: broken integration tests (46 failures → 0) by @kacy in #111
- perf: sharded mode pipeline throughput optimization by @kacy in #112
- update benchmark results from gcp c2-standard-8 by @kacy in #113
- add vector similarity benchmark suite by @kacy in #114
- harden: vector security audit fixes by @kacy in #115
- feat: grpc proto definitions + codegen infrastructure by @kacy in #116
- feat: grpc server implementation by @kacy in #117
- feat: go grpc client by @kacy in #118
- add python grpc client by @kacy in #119
- refactor: ember-protocol types.rs documentation by @kacy in #120
- refactor: ember-persistence docs and test cleanup by @kacy in #121
- refactor: ember-core unreachable removal and sorted_set optimization by @kacy in #122
- refactor: ember-server grpc error handling and protobuf fix by @kacy in #123
- harden: collection count validation in persistence deserialization by @kacy in #124
- harden: mix random bits into migration ID generation by @kacy in #125
- harden: grpc input validation, ttl overflow, cursor truncation by @kacy in #126
- refactor: extract collection-write helpers in ember-core by @kacy in #127
- refactor: replace grpc pipeline dispatch with macro by @kacy in #128
- refactor: group response tags, use let-else in proto handlers by @kacy in #129
- refactor: aof serialization helpers and snapshot utf-8 helper by @kacy in #130
- security: harden ember-protocol input validation by @kacy in #131
- security: eliminate panic sites in ember-core keyspace by @kacy in #132
- harden ember-server: grpc limits, scan cap, gossip port overflow by @kacy in #133
- bound vector deserialization total allocation in persistence by @kacy in #134
- update dependencies to latest compatible versions by @kacy in #135
- cargo fmt: fix formatting drift from merged refactoring PRs by @kacy in #136
- perf: tier 1 and tier 2 performance audit by @kacy in #137
- docs: add python client readme by @kacy in #138
- docs: add go client readme by @kacy in #139
- docs: add helm chart readme by @kacy in #140
- feat: complete grpc api — pub/sub, slowlog, operational commands by @kacy in #141
- feat: regenerate client stubs + add new client methods by @kacy in #142
- bench: add grpc-based ember vector benchmarks by @kacy in #143
- bench: add qdrant comparison to vector benchmark by @kacy in #144
- bench: add qdrant comparison to vector benchmark by @kacy in #145
- cargo fmt: fix formatting drift from grpc merge by @kacy in #146
- fix: add qdrant support to vm setup and vector benchmark defaults by @kacy in #147
- bench: expand memory benchmarks to all data types by @kacy in #148
- bench: add grpc vs resp3 throughput comparison by @kacy in #149
- bench: add pub/sub throughput benchmark by @kacy in #150
- bench: add protobuf storage overhead benchmark by @kacy in #151
- bench: add bench-all.sh master script by @kacy in #152
- docs: update readmes with new benchmark sections and results by @kacy in #153
- fix: use INFO memory for bench-memory.sh measurements by @kacy in #154
- fix: benchmark suite reliability improvements by @kacy in #156
- fix: proto benchmark key collision and memory DBSIZE parsing by @kacy in #157
- fix: rewrite memory benchmark bulk loading and mode handling by @kacy in #158
- fix: add --no-grpc to benchmarks that don't need grpc by @kacy in #159
- docs: update benchmark results from GCP c2-standard-8 by @kacy in #160
- feat: add VADD_BATCH command for bulk vector inserts by @kacy in #161
- fix: comprehensive security audit hardening by @kacy in #162
Full Changelog: v0.4.3...v0.4.4
v0.4.3
patch release — readme cleanup only, no code changes.
- removed duplicate architecture section with aspirational target metrics (now redundant with real benchmark data in the benchmarks section)
- updated status line: 989 tests, ~21k LOC
Full Changelog: v0.4.2...v0.4.3
v0.4.2
v0.4.1
what's new
- cluster subcommands —
ember-cli cluster info,cluster nodes,cluster meet, and all other cluster management commands as typed CLI subcommands (#77) - built-in benchmark —
ember-cli benchmarkwith pipelining, concurrent clients, and latency percentile reporting (#78) - CLI polish — syntax highlighting, inline hints, and subcommand tab-completion (#75)
- cluster server integration — wire cluster commands into the server (#72, #74)
- integration test suite — 45 end-to-end tests covering commands, data types, auth, persistence, and pub/sub (#76)
- security hardening — timing-safe auth, restrictive file permissions, password file support (#71)
- refactoring — consolidate cluster slot checks (#73)
- docs — updated all READMEs for new CLI features (#79)
stats
- 85 commands
- 861 tests (817 unit + 44 integration)
- ~18k lines of code (excluding tests)
install
cargo install ember-server
cargo install emberkv-cli