# MinIO MemKV RELEASE.2026-05-18T09-04-29Z

Released: 2026-05-18

Stability and resource-footprint follow-up to the inaugural release.
Cached blocks now survive NIXL agent shutdown, client and server memory
leaks are fixed, TTFT improves on the Dynamo / KVBM path, and the server
uses jemalloc as the global allocator. New read/write byte counters in
Prometheus, exporter is now default-on, and the docs.min.io/memkv site
has been restructured with an INTEGRATIONS catalog.

---

## Downloads

### Server Binary

| Platform | Architecture | Download |
| -------- | ------------ | -------- |
| Linux    | amd64        | [memkv](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv) |
| Linux    | arm64        | [memkv](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv) |

### NIXL Plugin (for Dynamo / KVBM integrations)

| Platform | Architecture | Download |
| -------- | ------------ | -------- |
| Linux    | amd64        | [libplugin_MEMKV.so](https://dl.min.io/aistor/memkv/release/linux-amd64/libplugin_MEMKV.so) |
| Linux    | arm64        | [libplugin_MEMKV.so](https://dl.min.io/aistor/memkv/release/linux-arm64/libplugin_MEMKV.so) |

### LD_PRELOAD Shim (for MLPerf-Storage kvcache workloads)

| Platform | Architecture | Download |
| -------- | ------------ | -------- |
| Linux    | amd64        | [libmemkv_preload.so](https://dl.min.io/aistor/memkv/release/linux-amd64/libmemkv_preload.so) |
| Linux    | arm64        | [libmemkv_preload.so](https://dl.min.io/aistor/memkv/release/linux-arm64/libmemkv_preload.so) |

### Packages

`.deb`, `.rpm`, and `.apk` packages bundle the server + both `.so` sidecars + the LMCache and sglang Python wheels into a single per-arch install.

| Format | Architecture | Download |
| ------ | ------------ | -------- |
| DEB    | amd64        | [memkv\_20260518090429.0.0_amd64.deb](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260518090429.0.0_amd64.deb) |
| DEB    | arm64        | [memkv\_20260518090429.0.0_arm64.deb](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260518090429.0.0_arm64.deb) |
| RPM    | amd64        | [memkv-20260518090429.0.0-1.x86_64.rpm](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv-20260518090429.0.0-1.x86_64.rpm) |
| RPM    | arm64        | [memkv-20260518090429.0.0-1.aarch64.rpm](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv-20260518090429.0.0-1.aarch64.rpm) |
| APK    | amd64        | [memkv\_20260518090429.0.0_x86_64.apk](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260518090429.0.0_x86_64.apk) |
| APK    | arm64        | [memkv\_20260518090429.0.0_aarch64.apk](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260518090429.0.0_aarch64.apk) |

After installing the deb/rpm, the Python plugin wheels land at `/usr/share/memkv/wheels/`:

```bash
pip install /usr/share/memkv/wheels/memkv_lmcache-*.whl
pip install /usr/share/memkv/wheels/memkv_sglang-*.whl
```

The NIXL plugin is auto-symlinked to `/opt/nvidia/nvda_nixl/lib/plugins/` when that directory exists (postinstall hook).

### Container Image

```bash
docker pull quay.io/minio/memkv:RELEASE.2026-05-18T09-04-29Z
docker pull quay.io/minio/memkv:latest
```

Container ships the server + the NIXL plugin (under `/usr/local/lib/plugins/`). The LD_PRELOAD shim and Python wheels are not included in the container image — use the deb/rpm for those.

### Verification

Each binary is signed with both minisign (preferred) and GPG; sha256sums are published alongside.

```bash
# minisign
minisign -Vm memkv -P RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav

# sha256
sha256sum -c memkv.sha256sum
```

(The minisign public key above is the MinIO release-signing key — same key used across the AIStor product line.)

---

## Changes since RELEASE.2026-05-12T19-07-44Z

### Bug Fixes

- **Cached blocks survive NIXL agent shutdown.** `memkv_unload_md` no
  longer issues a DELETE RPC for every block on teardown; the cache now
  persists across vLLM restarts as intended.
- **NIXL plugin teardown no longer segfaults the vLLM container.**
  `~nixlRemoteSection()` previously fanned thousands of synchronous
  control sends through the connection pool.
- **Client connection pool is bounded by `num_connections`.** The
  per-thread index now folds modulo `num_connections` instead of growing
  unbounded across calling threads.
- **Server reaps dead RC connections on flush completions.** Prevents
  per-connection QPs and pinned control buffers from accumulating after
  client crashes, vLLM bounces, or network blips.
- **NIXL plugin survives `dlclose` during backend teardown.** The `.so`
  is pinned with `RTLD_NOLOAD | RTLD_NODELETE` and in-flight transfers
  drain before the engine is destroyed.
- **`RdmaConnection::drop` diagnostics no longer abort vLLM workers.**
  Diagnostics use `eprintln!` instead of tracing macros that hit
  `AccessError` during thread-local teardown.

### Performance

- **Engine RDMA rails are shared across threads.** Eliminates DCI-pool
  exhaustion under TP=8 NIXL workloads and removes the silent RC
  fallback that drove server-side completion-poll timeouts.
- **Server uses jemalloc as the global allocator.** Materially reduces
  the non-pool resident footprint on multi-thread direct-mode
  deployments compared to glibc malloc.

### New Features

- **`memkv_read_bytes_total` and `memkv_write_bytes_total` Prometheus
  counters.** Bytes/s is now directly observable without knowing the
  client's KVBM block size.
- **Prometheus exporter is default-on.** `MEMKV_PROMETHEUS_BIND` works
  on a stock build; no `--features prometheus` rebuild required.
- **jemalloc heap profiling is available in release builds.** Set
  `MALLOC_CONF=prof:true,...` at startup and use `jeprof` against the
  binary.
- **`memkv-bench --engine-read` and `--reregister-every`.** Reproduces
  the NIXL plugin's read-path shape without standing up vLLM, KVBM, or
  Dynamo.

### Behavior Changes

- **`num_connections` is now a hard upper bound.** Previously it was a
  starting hint that grew with the number of unique calling threads.

### Security Updates

- **Docs site bumped to Next.js 15.5.18** — picks up GHSA-8h8q-6873-q5fj
  and other advisories. Server data plane is unaffected.

### Documentation

- **docs.min.io/memkv restructured** into four sidebar sections —
  get-started, integrate, operate, internals — with sitemap, OG
  unfurls, and a custom 404.
- **Drift check between code and docs** asserts every `clap` flag and
  `MEMKV_*` env var is documented.
- **`INTEGRATIONS.md` catalog** covering the plugin, sglang, lmcache,
  preload, and kv-store integrations plus the Dynamo / KVBM patch
  series.
- **Licensing pointer** to <https://min.io/pricing> from the Free-tier
  and quick-start pages.

---

## Documentation

- Hosted docs: <https://docs.min.io/memkv/>
- Embedded docs (in the binary): `memkv doc` serves the same site locally.

## Support

- Licensed customers: <https://subnet.min.io>
- Security disclosures: <security@min.io>
