Sandboxes use included free usage before credit in every region
A sandbox's running time is charged to the month's included free usage first, then to credit, in every region where the account runs sandboxes. A sandbox pauses only when both are used up; a wake then returns 402 insufficient_credit until credit is added. At the start of each month, the new month's included usage applies immediately for accounts whose included usage renews monthly.
Same day.
- Sandboxes: browser, desktop and MCP on every new sandbox/v1/sandboxes/{id}/browser (:start, GET, :stop), /desktop:start, /desktop:act, /desktop/screenshot, /desktop:stop and /mcp (POST, GET, DE…
- Sandboxes: network rules work for every sandboxGET /v1/sandboxes/{id}/network and PUT /v1/sandboxes/{id}/network now work for every sandbox.
- Sandboxes: a verb the API key does not allow returns 403, and older keys can wake, extend, update, set retention and restartA request for a sandbox operation that the API key's grant does not include now returns 403 forbidden; previously some of these requests…
- Sandboxes: a fork returns 409 fork_unsafe when a copy would repeat the source's random numbersA fork (forkOf, or POST /v1/sandboxes/{id}:fork) copies every process's memory, including the state of each language runtime's own random…
- Sandboxes: a fork with count above 1 makes its copies in parallelPOST /v1/sandboxes/{id}:fork with {"count": 4} previously made each copy after the one before it; it now makes them at the same time and…
- Tailscale: new sandboxes can join a tailnet againPOST /v1/sandboxes/{id}/tailscale, GET /v1/sandboxes/{id}/tailscale, DELETE /v1/sandboxes/{id}/tailscale, and the tailscale field on POST…
- API: keep-alive connections stay open across Runtime releasesWhen a server's API process was replaced during a release, a request in progress on a keep-alive connection could be answered with connec…
- Jobs: a vouch is no longer cleared by secrets scoped to other sandboxes by IDAny change to an egress secret's scope, including a list of other sandboxes' IDs, cleared every vouch in the organization, and the job's…
- Keys: POST /v1/keys no longer slows down or returns 502 keys_unavailable in accounts with many keysIn an account holding tens of thousands of keys, creating a key could take 15 seconds or more and return 502 keys_unavailable, and other…
- API keys: keys Runtime creates for your builds, CI/CD checks, app versions, agent sessions and Actions runners no longer count toward the limit of 1,000 live keys per memberPreviously, a busy CI/CD repository could fill the limit with its checks' short-lived keys, and POST /v1/keys returned 409 limit_reached…
- spreadFrom keeps a new sandbox off its peers' serversPOST /v1/sandboxes accepts spreadFrom again: 1 to 16 IDs of your own sandboxes.
- Sandbox creates in a full region fail immediately and name the sizeWhen no server in the region has room for a new sandbox, POST /v1/sandboxes now returns 503 capacity_unavailable immediately, before any…
- Sandboxes: creates from an existing image no longer return 404 image_not_found for some accountsPOST /v1/sandboxes could return 404 image_not_found (or snapshot_not_found, volume_not_found) for an image, snapshot or volume that exist…
- Sandboxes: creates no longer return 501 or an immediate 503 for some accountsPOST /v1/sandboxes could return 501 (for example env_unavailable or feature_unavailable) or an immediate 503 for request bodies the API s…
- Correct clock after a restoreA sandbox created from a template, forked, or woken from a pause now reads the correct wall-clock time from its first instruction.
- Creates from an image that cannot boot return 404POST /v1/sandboxes now returns 404 image_not_found, naming the image and the reason, when the image is not the organization's or was dele…
- Requests that carry a secret's placeholder are never sent unreplacedIf the server running a sandbox has not received secret updates in the last 15 seconds, a request that carries a secret's placeholder, or…
- Files: watches work in sandboxes created from the default imagePOST /v1/sandboxes/{id}/files/watches (and files.watch() in the SDKs) returned 500 watch_failed ("The watch exited while starting") in sa…
- Sandbox creates move off a failed host immediatelyWhen the host chosen for a new sandbox has failed and refuses connections, POST /v1/sandboxes now places the sandbox on another host imme…
- A Function with no running copy starts one for its next requestA request to a Function that has scaled to zero waits at the router while a copy is started from the version's saved copy, then is answer…
- A crashed process restarts immediatelyWhen the process of an App, a Function or a container exits, its first restart now happens immediately instead of after 1 second; an App'…
- CI/CD: always run a pull request's own testsA split step with own: true (split: { files: "/*.test.{ts,tsx}", own: true }) runs the test files a change adds or changes that no other…
- Parallel forks no longer return 503 busy while a snapshot copy arrivesWhen a snapshot's own server was full, creating many sandboxes from that snapshot at once could return 503 busy ("Cloud is busy; retry").
- CI/CD checks every push of the branches you listAdd pushes: [{ branch: next, steps: [...] }] to the production branch's .runtime/checks.yml to check each push of a branch that has no pu…
- Slack triggers in the v2 Agents APIPOST /v2/agents/slack/installs returns a link that adds Runtime's Slack app to a workspace, valid for 15 minutes; POST /v2/agents/slack/i…