Skip to content

Changelog

15 October 202634 changes

Sandboxes 16 · Apps 1 · Platform 7 · SDKs and CLI 5 · Billing 3 · Jobs 1 · Containers 1

9 min read

NewerOlderFollow by RSS

Hundreds of outbound connections, and a clear answer at every limit

A sandbox of an account that keeps a top-up now holds 512 outbound connections open at once for each vCPU, up to 4,096, where every sandbox held 64. In a test, 500 HTTPS connections opened at once from a 1 vCPU sandbox all connected, where 436 of them were reset before. New connections a second (20, after a first 128 at once) and new hosts a minute (120) stay as they were for every sandbox; past them a connection waits its turn instead of being reset. Past any limit a connection gets 503 with the limit in X-Runtime-Egress, and the account event sandbox.network.limited says which limit, at most once an hour. GET /v1/sandboxes/{id}/network shows a sandbox's limits. Accounts without a kept top-up keep 64. See the sandbox environment.

Keep sandboxes on separate servers

A create takes spreadFrom, up to 16 ids of your sandboxes or snapshots, and starts on a server none of them is on. Every sandbox and snapshot now shows placement, an opaque tag that is the same when two share a server. A copy of a memory snapshot starts only on its snapshot's server, so keep warm sources apart and spread copies across their snapshots: each server starts copies at its own pace rather than refusing them account_busy_here. See the API.

A sandbox's time limit can be set or changed after it starts

:update (sandbox.update() in the SDKs, or the CLI's runtime sandboxes update --timeout) takes timeoutSeconds, a new limit counted from now, sooner or later than before (0 removes it), and onTimeout, what its end does. A sandbox made without a limit can now get one. E2B's setTimeout to an earlier time works under withruntime/e2b instead of throwing. See Sandboxes in the API guide.

Custom domain on an App

An App can serve your own domain, apex or www, through every deploy and rollback. Its HTTPS certificate is issued and checked before you point the name at the App, so the first visitor already gets HTTPS, and it renews by itself at least 30 days before it expires. See networking.

Referral and welcome matches always land

A referral or welcome match that could not be decided the moment you paid, for a passing error on our side, is no longer lost: it is tried again within minutes until it is paid, and your payment is never held up by it. See referrals.

Which stopped sandboxes lose their disk after three days

Pricing now names them by client version, not by date: a sandbox made by a JavaScript or Python SDK before 0.12.0, Go, Java or Ruby before 0.2.0, or raw HTTP without x-runtime-client: http/2026-10-04 keeps its disk free for three days after it stops, then it is deleted. JavaScript 0.11.1 and 0.11.2 and Python 0.11.1 came out after 4 October and count as older. See paused storage.

pip install withruntime on Python 3.9

The Python SDK now installs and runs on Python 3.9, the python3 a Mac comes with, where pip used to find no version of it at all. See the Python SDK.

GitHub API rate limit exceeded

Calls to GitHub's API without a token share GitHub's 60-an-hour limit with every sandbox sending from the same address. The guide now shows how to save a GitHub token as a secret that the network adds to each call, so tools get your own limit with no change. See shared addresses and per-address limits.

llms-full.txt names each page

Every guide in llms-full.txt, the docs in one file, now starts with its address, so an assistant that reads the one file can link you to the page a fact came from. AI assistants' search crawlers now get the home page itself rather than the plain-text quickstart. See start.

Listing sandboxes is faster

GET /v1/sandboxes and every SDK's list answer a page about three times sooner in any account with more than one sandbox, and a list of only running sandboxes in an account with thousands of stopped ones answers in milliseconds where it read all of them. GET /v1/usage answers two to three times sooner in large accounts, and GET /v1/me no longer waits on a usage read. The answers are the same. See Sandboxes and Account.

Refer someone, not only a company

The referral in Billing and Home now reads "Refer someone", and your billing history names someone you referred rather than a company: anyone you bring to Runtime counts. See referrals.

Set up Runtime with one line for your coding agent

A new account's Home now opens on the line to paste into Claude Code, Codex or Cursor, shown as it will be pasted, with one Copy button; starting a sandbox in the browser comes next, and the key and install steps by hand are folded below. The line is shorter everywhere: "Move this project to Runtime Cloud: read https://withruntime.com/llms.txt and follow it." See Get started.

Free hours card fits on every page

The "100 free hours" card at the end of the changelog, pricing and about pages now holds its whole title on wide screens, where its second line ran past the card's edges. See pricing.

MCP server instructions on first connect

When npx withruntime mcp connects through runtime_connect, its answer now carries Runtime's full instructions (limits, cleanup, safe retries), which an agent's first session never saw before. If your client does not show the new tools, restart it: the connection is saved. See MCP.

sandboxes run deletes its sandbox

npx withruntime sandboxes run now deletes the sandbox when the command ends, so nothing is left billing for disk and an account without credit no longer reaches its 10 kept sandboxes after ten runs. --keep still keeps it. See CLI.

Volume restored from a backup stays put

A volume made from a backup can no longer be removed after it is ready by a restore attempt that finished late, and the nightly backups keep earlier copies whenever a night could not read the data they protect. See Volume backups.

A paused sandbox wakes when its server can't take it

A wake whose sandbox's own server is full, out of service or lost now comes back on another server from the sandbox's saved copy, files and memory as they were, where it was refused no_capacity. Each server is checked for this after every release before it takes another server's sandboxes. See pause, wake, extend.

Free account limits for backups, feedback and support

An account without credit keeps a volume backup at most seven days, like its snapshots and paused sandboxes; one that has never added credit files 5 feedback reports and sends 40 support messages a day. Adding credit lifts them. See volume backups and feedback and support.

Preview token expiry explained

Each create or read of a private preview signs its own token with its own tokenExpiresAt, so a list after a week-long create shows a different token that ends sooner; the token you already hold still works until its own expiry or a rotate. See private preview tokens.

Sandbox environment changes and running programs

:update changes a paused or stopped sandbox's env too, and a program already running keeps the values it started with, so restart it to pick up a change. See Sandbox environment.

Vouch for a scheduled job

An owner or admin can now vouch for a job on its page in the console. Each run's identity token then names the job, its version, who made it and who vouched for it, so your own API can accept a job's call only when a person stood behind exactly what it runs. Any change to the job takes the vouch off. See identity tokens.

Code for the newest rival SDKs runs on Runtime

The drop-ins follow Daytona 0.224.1, E2B 2.56, Blaxel 0.3.30 (Python 0.4.18), Freestyle 0.2.20, Modal 0.11.1 (Python 1.6.2), Prime Sandboxes 0.4.5 and Vercel Sandbox 3.8.0 (Python vercel-sandbox 0.9.1 and vercel 0.12.0). New here: finding a stopped Modal sandbox by name (includeTerminated); Prime checkpoints, and creating a sandbox from one; input to a running Vercel command (stdin, writeStdin, onStart); Freestyle terminals that reconnect after a dropped connection, and connectXterm; Blaxel's error helpers, preview shorthand and createIfExpired tokens; a Prime background job that cannot start now fails instead of reading as running. Anything Runtime cannot do, such as another Daytona region or Prime LAN networks, is refused with a plain error rather than ignored. See Migrate.

A snapshot of a running sandbox answers sooner

sandbox.snapshot() in every SDK now asks the server once, and the server pauses the sandbox for the capture and wakes it before answering, where the SDKs paused, captured and woke it in three calls of their own. A repeat snapshot of a 4 GiB sandbox took 1.19 s at the median instead of 1.96 s in Virginia. Snapshots and forks also see they are ready sooner on the server.

Images start where their base says

A Dockerfile stage FROM an image now starts in that image's WORKDIR, as its USER, with its CMD and ENTRYPOINT, as on Docker: FROM golang builds in /go. An image built from {image: "redis:7"} starts redis. See Custom images.

Dockerfiles read more like Docker reads them

An ENV now beats an ARG of the same name in RUN, an ARG with no value stays unset (so ${FOO:-default} gives the default), quotes and \$ keep $ literal in COPY and ARG, and COPY --chmod takes symbolic modes such as a+x. COPY --from naming its own stage is refused with a clear message. See Custom images.

Containers from slow registries start

Reading a container's image allows 5 seconds for each request rather than for the whole read, accepts index.docker.io and registry.hub.docker.com as Docker Hub, and refuses an image built only for arm64 at create instead of failing later.

Prove a volume backup restores

The storage guide now says what a ready backup already proves, that only a restore checks every byte, and how to prove one: restore it, check it, and delete the restored volume, charged only while it exists. A restored volume counts toward your volume limit. See volume backups.

Creates from a snapshot no longer fail because its servers are full

When the servers keeping a disk snapshot have no room, the sandbox now starts on another server in the region, once a verified copy of the snapshot is brought there from its backup. That create takes longer (the copy arrives first) instead of failing with no_capacity. Each such create leaves the snapshot on one more server, so a snapshot used often is kept on more servers as it is used.

Dockerfile files are owned as Docker owns them

COPY and ADD now write files owned by root unless --chown says otherwise, whatever the USER, and a WORKDIR that does not exist yet is made for the current USER. So USER node, WORKDIR /app, COPY . ., RUN npm ci builds, where it failed on an /app only root could write. See Build from a Dockerfile.

An account with credit now has 1 TiB of disk across its sandboxes, up from 400 GiB. One sandbox is still at most 400 GiB. See Limits.

An account without credit keeps 5 sandboxes

Running, paused or stopped, down from 10; each is still up to 10 GiB of disk. A sandbox you already keep is never cut off: waking or deleting one is never refused, and an account keeping more than 5 makes new ones once it is under. Adding credit lifts the limit.

Morph Cloud code runs on Runtime after one import

Change from "morphcloud" to from "withruntime/morph" (withruntime 0.16.0): snapshots and their cached setup steps, instances, branch, pause and resume, exec and HTTP services run as Runtime sandboxes, snapshots and previews. See Switch to Runtime.

Morph Cloud's Python code runs on Runtime too

Change morphcloud to withruntime.morph in the imports (withruntime 0.14.0 on PyPI): from withruntime.morph import MorphCloudClient. The same calls work, with their a-prefixed async twins and Morph's build and cached setup chains.

A reference on the page that did not load

When a page of your account fails to load, it now shows a reference number. Quote it when you ask for help, and support can find exactly what went wrong with that page. See Feedback and support.

Other days.

Cut your cloud billby 75%.

No card to start. Billed by the second after.

Start free, no card