# MinIO MemKV RELEASE.2026-07-07T15-55-04Z

Released: 2026-07-07

Batched reads and writes now work over RC transport, so clients on non-mlx5
NICs (e.g. Broadcom `bnxt_re`) get real batching instead of cache misses and
per-key RPCs. This release also fixes a file-mode failure where a write burst
past capacity could leave the server rejecting every subsequent write until
restart.

---

## 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\_20260707155504.0.0_amd64.deb](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260707155504.0.0_amd64.deb) |
| DEB    | arm64        | [memkv\_20260707155504.0.0_arm64.deb](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260707155504.0.0_arm64.deb) |
| RPM    | amd64        | [memkv-20260707155504.0.0-1.x86_64.rpm](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv-20260707155504.0.0-1.x86_64.rpm) |
| RPM    | arm64        | [memkv-20260707155504.0.0-1.aarch64.rpm](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv-20260707155504.0.0-1.aarch64.rpm) |
| APK    | amd64        | [memkv\_20260707155504.0.0_x86_64.apk](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260707155504.0.0_x86_64.apk) |
| APK    | arm64        | [memkv\_20260707155504.0.0_aarch64.apk](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260707155504.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).

### Python Plugins (PyPI)

The LMCache and sglang plugins are also published to PyPI, so they install without the deb/rpm:

```bash
pip install memkv-lmcache memkv-sglang
```

Install **1.0.2 or later** — earlier wheels predate cross-instance KV reuse
(1.0.1) and RC-transport batching on non-mlx5 NICs (1.0.2).

The wheels `dlopen` the RDMA libraries at runtime; the transport needs host `rdma-core`, otherwise it falls back to TCP.

### Container Image

```bash
docker pull quay.io/minio/memkv:RELEASE.2026-07-07T15-55-04Z
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 or PyPI 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
```

---

## Changes since RELEASE.2026-07-06T08-18-42Z

### Hardware / Compatibility

- **Batched reads and writes now run over RC transport.** RC is the only data
  path on non-mlx5 NICs (e.g. Broadcom `bnxt_re`); DC is mlx5-only. Previously
  an RC-only client reported every batched read as a miss — forcing the caller
  to recompute KV that was sitting in the store — and degraded batched puts to
  per-key RPCs. Those clients now ship the batch as a single RC control-channel
  RPC. This also fixes a completion-queue race on the shared RC send queue that
  could tear a connection down mid-batch under concurrent batches. The DC path
  on mlx5 is unchanged. `MEMKV_TRANSPORT=rdma-rc` forces the RC data path even
  on DC-capable hardware, as an ops escape hatch.

### Bug Fixes

- **A write burst past capacity could leave file-mode storage rejecting every
  write until restart.** Failed and deleted writes never reclaimed their memory
  slabs and storage slots, and the saturation guard measured payload bytes
  instead of slots — so a store full of small values read as nearly empty and
  never tripped the guard. Failed writes now roll back the slot and index entry
  they claimed, and an over-capacity write returns a typed `NoSpace` instead of
  an untyped backend error. Affects both DC and RC.

### Improvements

- **RC batch fallback is now visible in release builds.** The client logs its
  DC→RC batch fallback once per server at `info` (previously `debug`, compiled
  out of release builds), so operators can confirm which data path a client
  took without inferring it from metrics.

---

## Documentation

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

## Support

- Security disclosures: security@min.io
