Skip to content

Releases: kacy/ember

v0.4.9

27 Feb 15:26

Choose a tag to compare

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

25 Feb 13:57
cb437ff

Choose a tag to compare

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

22 Feb 17:20

Choose a tag to compare

What's Changed

  • docs: add homebrew install instructions and badge by @kacy in #240

Full Changelog: v0.4.6...v0.4.7

ember-0.1.1

22 Feb 16:00

Choose a tag to compare

a low-latency, memory-efficient distributed cache

ember-0.1.0

22 Feb 15:36

Choose a tag to compare

a low-latency, memory-efficient distributed cache

v0.4.5

21 Feb 01:43

Choose a tag to compare

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...v0.4.5

v0.4.4

16 Feb 16:11

Choose a tag to compare

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

11 Feb 03:02

Choose a tag to compare

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

10 Feb 16:08

Choose a tag to compare

What's Changed

  • test: cluster command and CLI integration tests by @kacy in #80
  • feat: encryption at rest (AES-256-GCM) by @kacy in #81
  • docs: update benchmarks and docs for encryption at rest by @kacy in #82
  • feat: TLS support for ember-cli by @kacy in #83

Full Changelog: v0.4.1...v0.4.2

v0.4.1

10 Feb 02:43

Choose a tag to compare

what's new

  • cluster subcommandsember-cli cluster info, cluster nodes, cluster meet, and all other cluster management commands as typed CLI subcommands (#77)
  • built-in benchmarkember-cli benchmark with 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