Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.3.1] β€” 2026-05-01

Fixed

Internal

[0.3.0] β€” 2026-04-30

Added β€” Phase 10: IAM authentication + mTLS

First-class AWS ElastiCache IAM-token authentication and mutual-TLS client certificates, with the same "configure once, rotations happen in the background" posture as the rest of the library.

Dropped / revised from the original scope.

Added β€” Phase 9: blocking pool

Per-node lease pool that lets one Client.t serve regular multiplexed traffic and BLPOP-class blocking commands from the same process without freezing the multiplex FIFO.

Dropped-scope note. Phase 9's original scope also included a general-purpose Client_pool.t with pick strategies for throughput scaling. An exploratory round with a prototype did not beat single-client multiplex + connections_per_node on the bench rig, so that half has been dropped. The connections_per_node knob on Node_pool remains the supported throughput lever. See ROADMAP.md Β§Phase 9 for the decision record.

Added β€” Phase 8: client-side caching (CSC)

Full server-invalidated client-side caching, on standalone and cluster, in all three tracking modes Valkey supports. Configured via the new Client_cache.mode variant β€” type-level mutual exclusion replaces the old optin : bool + mode = Default | Bcast shape so OPTIN/BCAST mismatches stop compiling.

Fixed β€” cluster routing under topology change

Added β€” OpenTelemetry tracing

Security audit pass (Phase 2.5)

Reviewed against threat model: trusted Valkey cluster (operators own all members), TLS chain validated when enabled. Three items fixed in this pass; the rest were either out-of-scope under that model or features Valkey itself doesn't support (e.g. per-node SNI). Items addressed:

[0.2.0] β€” 2026-04-21

Changed β€” opam packaging

Added β€” Batch.pfcount_cluster

Changed β€” Transaction folded into Batch

Added β€” Batch.watch (read-modify-write CAS)

Added β€” Phase 7 (batch + cluster-aware commands)

Changed β€” router

[0.1.0] β€” 2026-04-20

First public release. The repo's been incubating for a few weeks across Phases 0–5; this tag freezes a working surface and ships it to opam under the 0.x umbrella (API may evolve through 0.x; 1.0 waits for the deeper audit in ROADMAP Phase 12).

Highlights of what's in 0.1.0 (full per-phase detail below):

Added β€” typed sorted-set wrappers

The leaderboard example surfaced this gap; the wrappers below replace the Client.custom calls that example was using. docs-first audit done against valkey.io for every command β€” each .mli quotes the upstream syntax + version + reply shape.

Score parsing handles both RESP3 Double and Bulk_string shapes (different commands and server versions emit different encodings).

examples/09-leaderboard/ is now typed end-to-end (no Client.custom left).

Added β€” Phase 5 (examples)

Changed

Known gaps surfaced by examples

Added β€” Phase 4 (documentation)

Added β€” Phase 3 (CI/CD + coverage)

Added β€” Phase 2 (testing rigour + audit)

Changed β€” Phase 2

Added β€” Phase 1 (command surface completion)

Added β€” Phase 0 (core)