Skip to content

Changelog

29 October 202619 changes

Sandboxes 9 · Billing 6 · CI/CD 2 · Platform 2

7 min read

NewerOlderFollow by RSS

A sandbox waiting on its disk is no longer paused as idle

Idle pause now counts time a sandbox spends blocked on disk I/O as activity, alongside CPU, network traffic and open calls. Before, a sandbox whose processes were blocked on slow disk writes could use no CPU and be paused in the middle of its work.

Sandboxes: wakeOnTimers turns off timer wakes

A sandbox that pauses because it is idle wakes by itself when a process in it is due on a timer, such as a sleep 600 loop or an agent that polls every ten minutes. This is on by default for every sandbox, and a timer wake is billed as ordinary use from the moment the sandbox runs. To keep request wakes and turn off timer wakes, set wakeOnTimers: false at create or with POST /v1/sandboxes/{id}:update; turning it off also cancels a timer wake already planned. The setting is in the TypeScript, Python, Go, Java and Ruby SDKs, the CLI (--no-wake-on-timers, --wake-on-timers on|off) and the MCP tools, and sandbox responses include it. See timers wake an idle sandbox.

Free machine time in GET /v1/usage matches what a create is admitted on

trial.availableMs now counts what running sandboxes hold and the free-usage rules, so a create without credit is refused with included_usage_used_up exactly when it is 0. The new freeUsageHold field says why an account has no free machine time (hosting, region, card, withheld, no-source or unknown) and what starts it; the refusal's details.reason names the same rule, and npx withruntime usage shows the message. Before, an account could read free time left while every create was refused.

A wake that its server has no room for no longer stays in resuming

If the sandbox's server refuses a wake for memory or disk room, the sandbox returns to paused within 30 seconds with its memory intact, and the wake operation reports host_capacity or host_memory_pressure with the reason. The sandbox can be woken again immediately, including by an automatic wake from a command. Previously the sandbox could stay in resuming until its lease ended, and every command returned 409 sandbox_not_ready.

Accounts with credit keep their remaining trial hours

An account that has paid or holds credit uses its remaining free trial hours before credit again, wherever it was opened and whether or not a card is saved. Since earlier today, such an account opened outside the 41 advanced economies, or opened by email with no card saved for auto top-up, was charged credit while it still had trial hours.

Sandboxes report pressure stall information

/proc/pressure/cpu, /proc/pressure/memory and /proc/pressure/io are now available in sandboxes started after this release, so tools that read Linux pressure stall information (PSI), such as systemd-oomd or a build's own throttling, work inside a sandbox. Sandboxes resumed from a snapshot taken before the release keep their previous kernel settings until they are restarted.

Sandboxes: a timer wakes a sandbox that paused while idle

When a sandbox pauses because it is idle, Runtime records when the next timer of a process in it is due (a sleep, a wait with a timeout, a timerfd, alarm or a POSIX timer) and wakes the sandbox about one second before then. Only timers due within 29 minutes of the pause, and pending for the whole idle time, count, so a process that wakes every few seconds does not keep waking it. A sandbox with no pending timer stays paused. A pause you request, a pause at the end of a time limit or of credit, and a sandbox with autoWake: false are not woken by timers. See timers wake an idle sandbox.

CI/CD: test only the packages and crates a pull request touches

Add pull_requests: { tests: touched } to the production branch's runtime.yml. A pull request into the production branch then runs only the tests of the packages (nearest package.json) and crates (nearest Cargo.toml) that hold its changed files, plus steps whose inputs it changes and steps that read every file. The other tests its change reaches are listed on the left to main job, and the production branch's check runs them after the merge. Turn on undo with it so that a commit that breaks the production branch is reverted automatically. A change to a root file other than Markdown, a file in a dot folder, a lockfile or toolchain file, a script a step runs, or the config file runs every test it reaches. The default, tests: reached, is unchanged.

CI/CD: check only pull requests into the branches you list

Add pull_requests: { branches: [main] } to the production branch's runtime.yml. A pull request into any other branch ends immediately, uses no machine, and its runtime run reads "Not checked" (action required, which never passes a required check). A pull request whose base branch changes is checked again. Without the list, every pull request is checked, as before.

Free usage for accounts opened by email starts with a card

An account opened by email, in the regions with free usage, starts its free usage once its owner adds a card under Auto top-up on Usage & billing. The card is checked by your bank and is not charged unless you turn on auto top-up. Each card starts free usage for one account. Accounts opened with Google and accounts that have bought credit are unchanged. See free usage by region.

Stricter checks on new email sign-ups

A sign-up code is not sent to an address at a domain registered less than 90 days ago, or to a fourth new address at the same domain within a day, unless the domain is a major email provider. Addresses that already have an account are not affected. Sign up with Google, or ask a teammate to invite you.

One account per inbox when signing up by email

A new address that is another form of an inbox that already has an account, such as a +tag or dotted Gmail address, is not sent a sign-up code. Sign in with the address the account was opened with, or with Google.

Free machine time outside the listed regions starts with credit

An account opened from a region outside the 41 countries in free usage by region has no free machine time until it buys credit; buying credit provides the full monthly free usage in every region. Accounts opened from the 41 countries are unchanged.

Free usage depends on the region an account was opened from

An account that has never bought credit and was opened from one of 41 countries, including the United States, Canada, the United Kingdom, most of Western Europe, Japan and Australia, receives the full free machine time. An account opened from any other region receives 15 minutes of a default sandbox (2 vCPU, 4 GiB): 1 GiB-hour of machine memory and 0.5 vCPU-hours of active CPU. Buying credit provides the full monthly free usage in every region. Free saved copies and disks are the same in every region. See free usage by region.

Lower network limits for sandboxes without credit

A sandbox of an account without credit now uploads at up to 10 Mbit/s (was 50 Mbit/s) and transfers up to 1 GiB a day, inbound and outbound combined (was 5 GiB). Connections to cryptocurrency mining pools are blocked on every port. Downloads have no speed limit, and paid sandboxes are not affected. See included usage.

A wake of a sandbox moving to another server returns 409 sandbox_moving; terminals reattach without errors

A wake, or a call that wakes a paused sandbox, while the sandbox's paused memory and disk are still being copied to another server now returns 409 sandbox_moving with Retry-After, instead of 503 no_capacity. The sandbox is unchanged and stays paused. The JavaScript, Python, Go, Java and Ruby SDKs wait and retry it as they do no_capacity. A terminal opened with processId on a shell that another terminal already typed into no longer closes with 502 guest_failed ("invalid input offset") on its first keystroke. Its input now starts where the shell's input is.

Accounts that have never paid are suspended for mining, port scans or internet sweeps

A sandbox of an account that has never paid that connects to a mining pool, scans ports, or connects to a large number of distinct destinations within a few minutes now has its network cut, and the account is suspended. Accounts that have paid are not affected. See included usage.

Forks start on another server when the source's server is full

POST /v1/sandboxes/{id}:fork now returns 503 no_capacity only when no server in the region has room for the copies. When the source's server is full, each copy starts on another server in the region, and the snapshot is copied there first, including large snapshots. The fork's memory limit (a quarter of a server's free memory per fork) now applies to each server the copies can start on, not to the source's server alone.

A sandbox that stops responding is reported within 5 seconds, and a restart no longer reports a kept disk as deleted

A running sandbox that stops responding now returns unreachable, with since and reason (agent_not_answering, disk_stalled or host_quarantined), from GET /v1/sandboxes/{id}, and the new events sandbox.unreachable and sandbox.reachable are sent to webhooks. Previously such a sandbox returned running with no indication. When the sandbox's server cannot finish writing to its disk, a new command now returns sandbox_unreachable (503, retryable) after 5 seconds, with details.reason set to disk_stalled. Previously the request waited about 30 seconds and returned guest_busy (429). The request runs nothing, and commands already running continue. POST /v1/sandboxes/{id}:restart on a running sandbox whose server has not confirmed the reboot's stop now returns sandbox_unreachable (503, retryable) and keeps the disk. Previously it returned not_resumable (409) with diskKept: false. A retry with the same Idempotency-Key waits for the stop, then starts the sandbox from its disk. A command sent to a stopping sandbox now returns sandbox_stopped with "is stopping" instead of "is stopped (ended earlier)". When the server could not pause a sandbox to free disk space, the sandbox keeps running instead of refusing every call. See troubleshooting.

Other days.

Cut your cloud billby 75%.

No card to start. Billed by the second after.

Start free, no card