Cloudflare Computer

Durable Object の SQLite にファイルを保存し、同じ Workspace を 3 種類の実行環境から扱う。

1 — 概要

Cloudflare Computer は、Durable Object 内の SQLite を正とする仮想ファイルシステムです。workspace.fs が永続ファイルを操作し、workspace.runtime.exec() が登録済みバックエンドへ処理を振り分けます。ファイルだけを使う構成では、実行バックエンドを登録しなくても構いません。

SQLiteAuthoritative store
3Execution backends
1 APIruntime.exec
PreviewUnstable API
2 — 全体構成

Workspace.fs → DOFS → SQLite

読み書き、ディレクトリ操作、検索、マウントを Durable Object のストレージ上で処理します。この SQLite 状態が Workspace の正です。

同じ Workspace を実行へ渡す

workspace.runtime.exec(source, { backend })

安定した ID でバックエンドを選びます。接続は初回利用時に作られ、コマンド型とモジュール型の違いは Runtime が吸収します。

用途に応じて 3 経路へ

Container

computerd が FUSE で /workspace をマウント。Linux バイナリとネットワークを使えます。

Isolate shell

just-bash を Dynamic Worker で実行。HOST proxy を通じて同じ SQLite を直接扱います。

Isolate JavaScript

新しい Dynamic Worker で ES module を評価。構造化入力と node:fs/promises を利用できます。

3 — 実行バックエンド
バックエンド実行するものファイル経路向いている処理
Container
push / pull
Linux shell と実バイナリSQLite ↔ capnweb ↔ computerd ↔ FUSEネイティブ CLI、パッケージ処理、Linux userland が必要な作業
Isolate shell
direct
just-bash コマンドWorkers RPC の HOST proxy から SQLite へ直接軽量なファイル操作、コンテナを使わないシェル処理
Isolate JavaScript
direct
ECMAScript modulehost bridge から fs / git / artifacts へ接続構造化入出力、相対 import、JavaScript の隔離実行
DO SQLite永続状態
pre-exec push差分を送る
computerd / FUSE/workspace で実行
post-exec pull変更を戻す
DO SQLite結果を永続化
同期対象: Container 内の変更で Workspace に戻るのは /workspace 配下です。Isolate shell と Isolate JavaScript は host 側の Workspace を直接使うため、第二のストアや同期往復を持ちません。
4 — 公開 API

withWorkspace で Durable Object に Workspace を組み込み、呼び出し側では getWorkspace() からファイル API を使います。Worker では nodejs_compat が必要です。

TypeScript
import { getWorkspace, withWorkspace } from "@cloudflare/computer";
import { DurableObject } from "cloudflare:workers";

export class Agent extends withWorkspace(
  class extends DurableObject<Env> {},
) {}

export default {
  async fetch(_request, env) {
    const id = env.Agent.idFromName("demo");
    using ws = await getWorkspace(env.Agent.get(id));

    await ws.fs.writeFile("/notes.txt", "durable\n");
    return new Response(await ws.fs.readFile("/notes.txt", "utf8"));
  },
};

Workspace に backend を登録すると、同じ runtime.exec() から選択できます。最初の backend が既定値になり、{ backend: "stable-id" } で明示的に切り替えられます。

Runtime call
const run = await ws.runtime.exec("cat /workspace/notes.txt", {
  backend: "container",
  encoding: "utf8",
});

const { stdout, exitCode } = await run.result();
5 — パッケージ

利用者向け facade

Workspace、fs、runtime、各 backend、git、assets、artifacts、AI SDK tools を公開します。

SQLite ファイルシステム

スキーマ、ファイル操作、同期部品、computerd が利用する VFS provider を担います。

capnweb 契約

Durable Object と computerd の wire types、server / client、同期 driver を共有します。

Container 内 daemon

FUSE mount、HTTP / WebSocket RPC、shell 実行を提供し、Container 内の状態を Workspace と同期します。

実際の利用経路

Container、worker-shell、worker-javascript、agent、tutorial、assets の構成例を収録します。

backend は省略可能

実行が不要なら、永続ファイルシステムだけの Workspace として構築できます。

6 — 制約・参照
Preview: API は不安定で、実験・探索・prototype 向けです。現時点では production 用途を想定していません。リポジトリの docs/ は将来仕様であり、現在の main の実装説明とは区別してください。
  • 容量は Durable Object ストレージと共有し、目安は約 10 GB です。
  • Container 側のファイルシステムはメモリ上にあり、大規模ツリーには向きません。
  • FUSE は metadata-heavy な処理に強い一方、大きな連続 I/O や大規模な package install には負荷があります。
  • R2 mount は読み取り専用です。書き込みは EROFS になります。
  • Isolate shell は完全な Linux userland ではありません。JavaScript backend も外向き通信を既定で持ちません。

このページは 2026-08-03 時点の main(commit 63d3636)を基に整理しています。