diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
 # Changelog
 
+## 0.3.1.0 — 2026-03-07
+
+### Drop `memory` dependency, use `ram`
+
+- **`memory` → `ram`** — Replaced `memory` package with `ram` (modern, minimal replacement). Same `Data.ByteArray` API, drops the heavy `basement` transitive dependency. Fixes build failure with `crypton >= 1.1` which switched from `memory` to `ram` internally — `Data.ByteArray.ByteArrayAccess` instances were no longer compatible across packages.
+- **`crypton >= 1.1` required** — Lower bound bumped from `1.0` to `1.1` so that `crypton` and `nova-cache` both link against `ram` for `ByteArrayAccess` instances. Older `crypton` versions used `memory`, causing instance mismatches at link time.
+- All imports remain `Data.ByteArray` — no source-level changes needed for downstream consumers.
+
 ## 0.3.0.0 — 2026-02-28
 
 ### Breaking changes
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 
 [![CI](https://github.com/Novavero-AI/nova-cache/actions/workflows/ci.yml/badge.svg)](https://github.com/Novavero-AI/nova-cache/actions/workflows/ci.yml)
 [![Hackage](https://img.shields.io/hackage/v/nova-cache.svg)](https://hackage.haskell.org/package/nova-cache)
-![Haskell](https://img.shields.io/badge/haskell-GHC%209.6-purple)
+![Haskell](https://img.shields.io/badge/haskell-GHC%209.8-purple)
 ![License](https://img.shields.io/badge/license-BSD--3--Clause-blue)
 
 </p>
@@ -294,8 +294,8 @@
   └──────────────────────────────────────────────────────┘
 ```
 
-- **9 modules**, 7 pure + 2 at the IO boundary (Compression optional via flag)
-- **58 core tests + 4 compression tests**, hand-rolled harness, no framework dependencies
+- **10 modules**, 8 pure + 2 at the IO boundary (Compression optional via flag)
+- **74 core tests + 4 compression tests**, hand-rolled harness, no framework dependencies
 - **Zero partial functions** — total by construction
 - **Strict by default** — bang patterns on all data fields
 
@@ -405,7 +405,7 @@
 | `paths` | no | Explicit store paths (space-separated). Defaults to all paths from `shell.nix` / `default.nix` |
 | `parallel` | no | Max concurrent uploads (default: 32) |
 
-The action resolves Nix store path closures, exports them to a local binary cache, and uploads all narinfo + NAR files to the server. Works with any CI that has Nix installed.
+The action fetches `GET /narinfo-hashes` to determine which paths are already cached, exports only the missing paths, and uploads narinfo + NAR files in parallel. Falls back to uploading everything if the endpoint is unavailable (servers < 0.3.0.0). Works with any CI that has Nix installed.
 
 ---
 
diff --git a/nova-cache.cabal b/nova-cache.cabal
--- a/nova-cache.cabal
+++ b/nova-cache.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               nova-cache
-version:            0.3.0.0
+version:            0.3.1.0
 synopsis:           Pure Nix binary cache protocol library
 description:
   A focused, minimal, pure-first library implementing the full Nix binary
@@ -17,7 +17,7 @@
 category:           Nix, Distribution
 stability:          experimental
 build-type:         Simple
-tested-with:        GHC == 9.6.7
+tested-with:        GHC == 9.8.4
 extra-doc-files:
     CHANGELOG.md
     README.md
@@ -53,10 +53,10 @@
     , base64-bytestring   >= 1.2 && < 1.3
     , bytestring          >= 0.11 && < 0.13
     , containers          >= 0.6 && < 0.8
-    , crypton             >= 1.0 && < 2
+    , crypton             >= 1.1 && < 2
     , directory           >= 1.3 && < 1.4
     , filepath            >= 1.4 && < 1.6
-    , memory              >= 0.18 && < 1
+    , ram                 >= 0.20 && < 1
     , text                >= 2.0 && < 2.2
     , vector              >= 0.12 && < 0.14
 
@@ -86,8 +86,9 @@
   build-depends:
       base                >= 4.16 && < 5
     , bytestring          >= 0.11 && < 0.13
-    , memory              >= 0.18 && < 1
+    , crypton             >= 1.1 && < 2
     , nova-cache
+    , ram                 >= 0.20 && < 1
     , http-types          >= 0.12 && < 0.13
     , text                >= 2.0 && < 2.2
     , wai                 >= 3.2 && < 3.3
@@ -106,10 +107,10 @@
       base                >= 4.16 && < 5
     , base64-bytestring   >= 1.2 && < 1.3
     , bytestring          >= 0.11 && < 0.13
-    , crypton             >= 1.0 && < 2
+    , crypton             >= 1.1 && < 2
     , directory           >= 1.3 && < 1.4
     , nova-cache
-    , memory              >= 0.18 && < 1
+    , ram                 >= 0.20 && < 1
     , text                >= 2.0 && < 2.2
 
 test-suite nova-cache-compression-test
