@cloudflare/computer
0.6.0 · 20 Oct 2026MIT159.2k / weekRepositoryHomepagenpmAtom feed
13 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 0.6.x · latest line
0.6.0
20 Oct 2026- deprecated
Workspace, its filesystem, the worker-javascript backend, mounts, agent tools, Git, Assets, and Artifacts are now stable;LegacyContainerBackendis deprecated in favor ofContainerBackend; the container and worker-shell backends,ws:container, sync, andcomputerdstay experimental. getWorkspace()now returns a lazy client immediately which resolves on the first call.useThinkand the Think compatibility methods are removed;@cloudflare/think0.21 and later take aWorkspaceas it is.WorkerJavaScriptBackendkeeps its Durable Object alive while executions run, and adds amaxCpuMsoption.
Minor Changes
getWorkspace()now returns a lazy client immediately which resolves on the first call.useThinkand the Think compatibility methods are removed;@cloudflare/think0.21 and later take aWorkspaceas it is.WorkerJavaScriptBackendkeeps its Durable Object alive while executions run, and adds amaxCpuMsoption.just-bashis now an optional peer dependency and should be installed manually when using@cloudflare/computer/backends/worker-shell.
Patch Changes
getWorkspace()accepts any Durable Object stub whose class has__getWorkspaceStub(), without a cast.WorkspaceProxyandWorkspaceServiceProxywake their host Durable Object by name, soctx.id.namesurvives a wake caused by a container or Dynamic Worker callback.WorkspaceRef,WorkspaceProxyPropsandWorkspaceServiceProxyPropsaccept an optionalname, filled in fromctx.id.namewhen the backend runs in the host object itself.- deprecated
Workspace, its filesystem, the worker-javascript backend, mounts, agent tools, Git, Assets, and Artifacts are now stable;LegacyContainerBackendis deprecated in favor ofContainerBackend; the container and worker-shell backends,ws:container, sync, andcomputerdstay experimental.
- 0.5.x
0.5.1
13 Oct 2026Add
forAISDKTools()in@cloudflare/computer/tools/ai-sdkto serve an AI SDK tool set to isolate JavaScript asws:tools; seews:toolsdocumentation.The
edittool bounds its diff withmaxDiffLinesandmaxDiffBytesand reportsdiffTruncated; seeedittool documentation.Fix issue when creating a host module with no functions in the JavaScriptWorkerBackend; see host module documentation.
Patch Changes
Add
forAISDKTools()in@cloudflare/computer/tools/ai-sdkto serve an AI SDK tool set to isolate JavaScript asws:tools; seews:toolsdocumentation.The
edittool bounds its diff withmaxDiffLinesandmaxDiffBytesand reportsdiffTruncated; seeedittool documentation.Fix issue when creating a host module with no functions in the JavaScriptWorkerBackend; see host module documentation.
The
exectool'sinputis an object rather than any JSON value; seeexectool documentation.The
exectool parses aninputobject sent as a string of JSON; seeexectool documentation.Tool sets take
execOutput: { maxLines, maxBytes }for theexectool's output limits; see tool option documentation.Host module factories receive the Workspace's assets client as
host.assets; see host module documentation.WorkerJavaScriptBackendnow lazily reads each host module's description; see module documentation.Mounts can now declare a
versionto support schema migrations; see mount version documentation.createPiToolsresults carry each tool's own output asdetails; see pi documentation.Add
ws:toolsto provide the JavaScript worker backend programmatic access to tools; seews:toolsdocumentation.The
greptool'sincludeandexclude, and thefindtool'sexclude, take one glob or a list; seegreptool documentation.Add
@cloudflare/computer/tools/core, which exportsdefineExecwithout an agent library; see tool documentation.Tool sets take
rootto confine the file tools to one directory; see root documentation.Add
WorkerBundle, a read-only mount that copies files from the deployed bundle or an imported file tree; see mount documentation.Add
@cloudflare/computer/vitewith acomputerBundle()plugin that bundles a directory into a Vite-built worker forWorkerBundle; see mount documentation.ws:artifactsaddscreateTokenandsharefor minting git tokens and clone URLs; seews:artifactsdocumentation.Add
ws:assetsso isolate JavaScript can publish a Workspace file to a time-limited URL; seews:assetsdocumentation.createContainerModule({ maxOutputLines })limits eachws:containerstream by lines as well as bytes; seews:containerdocumentation.createContainerModule({ prelude })runs shell text such asset -o pipefailbefore eachws:containercommand; seews:containerdocumentation.ws:containernow keeps the end of each stream for a Workspace withoutput: false; seews:containerdocumentation.ws:toolslists the tools code can import in its description; seews:toolsdocumentation.
0.5.0
9 Oct 2026createAIToolsmoves to@cloudflare/computer/tools/ai-sdk; see tool wiring documentation.The
execoption (nowExecBackendOptions) has been refactored to useruntime.backends(); see tool option documentation.The
exectool shows the lastmaxLines(2000) lines ormaxBytesof each stream with a pointer to the full output on disk; seeexectool documentation.
Minor Changes
createAIToolsmoves to@cloudflare/computer/tools/ai-sdk; see tool wiring documentation.The
execoption (nowExecBackendOptions) has been refactored to useruntime.backends(); see tool option documentation.The
exectool shows the lastmaxLines(2000) lines ormaxBytesof each stream with a pointer to the full output on disk; seeexectool documentation.ws:gitandws:artifactsare no longer installed by default: addcreateGitModule()andcreateArtifactsModule(); seews:gitdocumentation.Remove
WorkerJavaScriptBackend'smaxConcurrentExecutionsoption, leaving the platform's own limit on concurrent Dynamic Workers; see execution limit documentation.Consolidate
trustedModuleswithmodulesinWorkerJavaScriptBackend; see module documentation.runtime.execresults keep only the last 2000 lines or 64 KiB of each stream and save the full output to a Workspace file, configured withnew Workspace({ output })or turned off withoutput: false; see long output documentation.Fix an issue in
JavaScriptWorkerBackendwhere a source module could import a Workspace file; see source module documentation.
Patch Changes
JavaScriptWorkerBackend now supports absolute imports e.g.
/workspace/lib/util.js; see import documentation.Improve
WorkerShellBackendandContainerBackendtool descriptions including egress information; seeexectool documentation.Add
runtime.backends()toWorkspaceClientallowing tools to be created from workspace stubs; see tool wiring documentation.The
exectool now tells the model to put module code in anexport default async function (input)shape.The
exectool only documentsbackendandinputwhen needed; seeexectool documentation.A cyclic argument to a
node:fsor host module call fails with a "must be acyclic" error; see execution limit documentation.Isolate JavaScript modules now need a default export, and fail before running without one.
Isolate JavaScript code can now import Node.js built-ins such as
node:path,node:crypto, andnode:zlib.The JavaScript backend now creates its root directory (
/workspace) if the Workspace doesn't have one.The JavaScriptWorkerBackend now strips non-serializable return values matching JSON.stringify(); see isolate JavaScript documentation.
Isolate JavaScript runs now fail on I/O at module scope or an unhandled rejection, instead of completing silently, with no output.
JavaScriptWorkerBackendnow uses native RPC formodulesbindings; see execution limit documentation.Imports of
ws:*and other configured modules work whencompatibilityFlagsincludesnew_module_registry; see module documentation.Tools built from a remote
getWorkspace()client of a Workspace without an assets publisher no longer offer apublishtool; see tool wiring documentation.Add
workspace.runtime.backends(), which lists each backend's id, protocol, whether it is callable, and its description for a model, including the modules aWorkerJavaScriptBackendcan import; see backend routing documentation.Each
JavaScriptWorkerBackendnow only stores each module once, so a large bundle counts once; see module documentation.A DO's
ctx.storagecan now be passed to a Workspace without casting.Workspace filesystem errors no longer repeat the path.
Add
ws:containerso isolate JavaScript can run shell commands in the Workspace'sContainerBackend; seews:containerdocumentation.ws:git'scliaccepts a leading-C <path>as its working directory; seews:gitdocumentation.
- 0.4.x
0.4.1
5 Oct 2026Add
ignoretoContainerBackend: glob patterns, such as**/node_modulesand!/vendor/node_modules, for paths the container keeps on its own disk instead of syncing.
0.4.0
2 Oct 2026Rename the platform-scheduled container backend to
LegacyContainerBackend; see container backend documentation.Add Workspace tool sets for pi (
createPiToolsfrom@cloudflare/computer/tools/pi-ai) and TanStack AI (createTanStackToolsfrom@cloudflare/computer/tools/tanstack-ai); see the tool interface docs.Keep configured paths local to the container instead of syncing them with the Durable Object using
ContainerBackend.ignore; see local-only path documentation.
Minor Changes
Rename the platform-scheduled container backend to
LegacyContainerBackend; see container backend documentation.Add Workspace tool sets for pi (
createPiToolsfrom@cloudflare/computer/tools/pi-ai) and TanStack AI (createTanStackToolsfrom@cloudflare/computer/tools/tanstack-ai); see the tool interface docs.
Patch Changes
Keep configured paths local to the container instead of syncing them with the Durable Object using
ContainerBackend.ignore; see local-only path documentation.Add
ContainerBackendfor durable-object-scheduled containers; see container backend documentation.Expand
ws:gitwith full-history clones by default and additionalcat-file,log, and command-specifichelpoptions; see Git interface documentation.
- 0.3.x
0.3.2
1 Oct 2026Add an
excludeoption tofs.grep, matchingfs.find.
0.3.1
18 Sep 2026Document the symbolic-link filesystem surface under
docs/04_filesystem_interface.md.Extend
Workspace.fsto includerename(oldPath, newPath).findnow acceptsexcludee.g.ws.fs.find("/workspace", "**/*.ts", { exclude: ["node_modules/**"], }).
Patch Changes
Document the symbolic-link filesystem surface under
docs/04_filesystem_interface.md.Extend
Workspace.fsto includerename(oldPath, newPath).findnow acceptsexcludee.g.ws.fs.find("/workspace", "**/*.ts", { exclude: ["node_modules/**"], }).Improve performance of git diff when given named paths.
0.3.0
11 Sep 2026The container's HTTP surface now requires a bearer token. The host generates a secret, passes it to the container as RPC_CLIENT_SECRET at launch, and sends it on /connect. Readiness at /health stays open, and leaving the variable unset disables the checks. Before opening a session the host checks that the container refuses an unauthenticated request and fails the connect if it does not, so a container or image predating this has to be recycled. The container's dial-back to the host carries the same secret, and the host refuses an upgrade that does not present it.
The /connect caller now provides both API & healthcheck endpoints. The container no longer builds either path itself, so a host is free to serve them wherever it likes.
IWorkspaceContainerAPI.start()andrestart()now take a singleContainerLaunchSpecof{ env, enableInternet }instead of two arguments, and return which oflaunched,adoptedorrelaunchedhappened. Each launch records its spec, and a container found already running is relaunched unless it matches, because neither the environment nor the internet flag can be changed on a live container. A container started outside this API has no record and is relaunched rather than trusted.setInactivityTimeout()joins the interface so a caller that pre-starts containers, such as a warm pool, does not need to reach past it.
Minor Changes
The container's HTTP surface now requires a bearer token. The host generates a secret, passes it to the container as RPC_CLIENT_SECRET at launch, and sends it on /connect. Readiness at /health stays open, and leaving the variable unset disables the checks. Before opening a session the host checks that the container refuses an unauthenticated request and fails the connect if it does not, so a container or image predating this has to be recycled. The container's dial-back to the host carries the same secret, and the host refuses an upgrade that does not present it.
The /connect caller now provides both API & healthcheck endpoints. The container no longer builds either path itself, so a host is free to serve them wherever it likes.
IWorkspaceContainerAPI.start()andrestart()now take a singleContainerLaunchSpecof{ env, enableInternet }instead of two arguments, and return which oflaunched,adoptedorrelaunchedhappened. Each launch records its spec, and a container found already running is relaunched unless it matches, because neither the environment nor the internet flag can be changed on a live container. A container started outside this API has no record and is relaunched rather than trusted.setInactivityTimeout()joins the interface so a caller that pre-starts containers, such as a warm pool, does not need to reach past it.A command run through the shell no longer inherits the container's whole environment. It receives PATH, HOME, TMPDIR, TZ, LANG, TERM, the LC* family, and any variable prefixed COMPUTER_VAR*, which arrives with the prefix stripped so COMPUTER_VAR_NODE_ENV becomes NODE_ENV. A workspace that relied on some other inherited variable needs the prefix.
The UPSTREAM_URL environment variable has been removed along with the container's own sync loop. Syncing is driven by whichever peer holds the other end of the Cap'n Web session.
The Cap'n Web /ws endpoint has been renamed to /api at both ends of the connection. A durable object that routes the container's outbound upgrade must match /api in its own fetch handler. Support for the Cap'n Web HTTP batch transport has been removed, so /api carries a websocket only.
Workspace.pull()andWorkspace.push()are now async iterables that commit one block of changes per iteration. This allows a caller to implement a deferred post-exec sync across several invocations. See ./docs/02_sync_protocol.md for details.Make the artifacts session id optional:
createArtifact(binding)now returns a client over the whole namespace rather than requiring a session to scope by. See ./docs/15_artifacts_interface.md for details.
Patch Changes
Create missing parent directories while applying sync entries.
Fix issue where the edit tool would rewrite the whole file when oldText doesn't match exactly.
Sync
node_modulesby default so package manager installs persist across workspace runtimes.
- 0.2.x
0.2.1
17 Aug 2026Embed the configured byte limit directly in Worker JavaScript capability size errors.
Add support for short revision ids in the git module.
container-shelloperations now reconnect after computerd restarts when retrying is safe, and process-local execution handles returnEEXEC_LOSTafter container replacement. See container connection recovery.
0.2.0
11 Aug 2026Consolidate egress configuration across the existing backends. See ./examples/egress for details.
Expose bounded workspace byte reads through RPC and return paginated directory listings with file metadata.
Extend the
readtool to support image and data formats.
Minor Changes
Consolidate egress configuration across the existing backends. See ./examples/egress for details.
Expose bounded workspace byte reads through RPC and return paginated directory listings with file metadata.
Extend the
readtool to support image and data formats.Updated
findandgreptools to support additional filtering parameters, adeletetool.Reduced the size of bundles using worker-shell by making many commands opt-in. See the documentation for details.
Patch Changes
Cut peak memory during a sync pull. Applying a file entry now links the chunks the sender already staged instead of reading them back and joining them into one whole-file buffer, which used to hold roughly twice the file size in the isolate at once.
Fix git diff/status/log edge cases, batch sync hash probes within Durable Object SQLite limits, and count tracked RPC targets by identity.
- 0.1.x
0.1.0 – 0.1.12 releases without a noteShow each
- 0.1.13 Aug 2026no note
- 0.1.03 Aug 2026no note
- 0.0.x
0.0.0
29 Jul 2026