Source: https://docs.any.org/files/cache.html # Cache Once a file is backed up to the network, its local bytes become a cache: droppable and refetchable. Until then they are the only copy the network can vouch for — a peer that happens to hold them does not count — and the server refuses to throw them away. Nothing reclaims space on its own unless you configure it to. ## Pin `POST /v1/spaces/:spaceId/files/:fileId/pin` schedules a full background fetch of the file into the local store (→ 204). The request survives restarts. Use it for "keep this available offline" — a file that was only ever streamed on demand may be partially local; pinning completes it. Completion shows up as a `status` frame on the [status stream](https://docs.any.org/files/status-and-durability.md.txt) and as `cached: true` on the file's info. ```bash curl -X POST "http://127.0.0.1:7001/v1/spaces/$SP/files/$FILE/pin" any file pin $SP $FILE ``` ## Offload `POST /v1/spaces/:spaceId/files/:fileId/offload` drops one file's local bytes while keeping the file (→ 204). A later download refetches transparently, block by block, and accretes toward a full copy again. ```bash curl -X POST "http://127.0.0.1:7001/v1/spaces/$SP/files/$FILE/offload" any file offload $SP $FILE ``` - Refused with **`409 file.not_durable`** while the local bytes are the only copy — the file has not been backed up yet. A peer copy alone does not satisfy this check. - A no-op on inline files (their bytes are the CRDT row). - Content shared through per-space deduplication loses its bytes for every file sharing that `rootCid`; each stays refetchable. > **Why it matters.** Because the network copy is ciphertext under the space key, offloading is safe by construction: the bytes you drop can only ever be reconstituted by a member holding the key. Space management on a phone becomes a local decision with no privacy cost. ## Account-wide cache controls The three `/v1/files/cache*` routes operate across **all spaces** on this device, so they sit outside the space group: | Method | Path | Purpose | | --- | --- | --- | | GET | `/v1/files/cache` | `{"size": }` — bytes held by file content, complete and partial copies | | POST | `/v1/files/cache/free` | `{"bytes": N}` → `{"freed": M}` — LRU reclaim of safe-to-drop content | | POST | `/v1/files/cache/sweep` | one safety pass → 204 | ```bash curl "http://127.0.0.1:7001/v1/files/cache" curl -X POST "http://127.0.0.1:7001/v1/files/cache/free" \ -H 'Content-Type: application/json' -d '{"bytes": 500000000}' # → { "freed": 312044544 } curl -X POST "http://127.0.0.1:7001/v1/files/cache/sweep" ``` ```bash any file cache size any file cache free 500000000 any file cache sweep ``` `free` drops least-recently-used content that is **safe to drop** — backed up or unreferenced, never the only copy — and returns the bytes actually freed, which is less than requested when nothing else is safely evictable. `sweep` is the safety pass: it prunes references of deleted files, deletes unreferenced content past its grace period, and drops stale partial fetches. ## No background GC by default The sweep runs periodically only when `files.gcInterval` is set in the [configuration](https://docs.any.org/operations/configuration.md.txt); with a zero interval, reclamation is entirely caller-driven. Two consequences: - Bytes of a [deleted](https://docs.any.org/files/deleting.md.txt) file are not reclaimed synchronously — they go when a sweep finds the CAR unreferenced past grace. - Deleting a whole space still offloads all of its state, file bytes included, through the space-delete path. > **Note.** `free` and `offload` are about the local copy only. Neither touches the network backup, and neither changes the file's durability state — a durable file stays durable with zero local bytes.