Offload large files (4 MB+) to R2

Offen
#217 4 Kommentare 1 Reaktion 1 zugewiesene Person Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@aron-cf arbeitet bereits daran.

Seit 08.10.2026.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Beschreibung

enhancement

vfs_* tables in Durable Object SQLite hold all file content today, so a workspace is capped at the Durable Object storage limit (about 10 GB). R2 mounts are read-only, which means a writable file can't live outside that cap.

@cloudflare/shell in cloudflare/agents had a hybrid model. It kept small files inline in SQLite and moved files over a size threshold to R2. We're deprecating Shell in favour of Computer, and some agents (media, datasets, build outputs) will need large writable files.

Proposal
  • Add an optional R2 bucket to WorkspaceOptions, along with a size threshold. The default would be 4 MB.
  • When a write reaches the threshold, the content goes to R2. vfs_nodes keeps the metadata and a pointer to the R2 key. The key is scoped by workspace, using the session id or DO id.
  • Reads through workspace.fs, the worker backends, and the container sync path resolve the pointer without the caller knowing about it. A read of an R2-backed file returns a stream, so the bytes never pass through SQLite.
  • rm, overwrite, and gc() delete the R2 object they replace.
  • Without a bucket, behaviour stays as it is today.
Open questions
  • Should content-addressed blob dedup extend to R2 objects, or should R2 hold one object per file?
  • Container sync could pull large R2-backed files on demand instead of copying them into the container's in-memory VFS. Is that in scope here?
Vorherrschende Sprache
TypeScript
Sterne
9.7k
Forks
577
Ø Merge
1 T. 15 Std.
Gemergte PRs (30 T.)
79

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus cloudflare/computer

Alle Issues in cloudflare/computer

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.