dev-tools 6 min read

ComputeSDK: one API for sandboxes across 38 providers

ComputeSDK is an MIT TypeScript SDK and REST API for running code in remote sandboxes across dozens of providers, backed by open weekly benchmarks.

By
Share: X in
Abstract illustration of code routed into many separate remote sandbox containers

TL;DR: ComputeSDK gives you one TypeScript API and one REST API for spinning up remote sandboxes across 38 providers like E2B and Modal, so you can swap vendors without rewriting your application. The same project publishes free weekly benchmarks on sandbox cold starts, storage, and browser throughput, with the raw JSON sitting in a public repo.

What it is

Two things live under the ComputeSDK name, and they were built to feed each other.

The first is an MIT-licensed TypeScript SDK. You configure a provider once, then call the same create, runCommand, and destroy methods no matter which vendor sits behind them. Provider packages ship separately, so @computesdk/e2b and @computesdk/modal each wrap one vendor’s API and normalize it to an identical interface. The core package has 282 GitHub stars and was pushed the day before this post.

The second is the benchmark platform around it. ComputeSDK runs the same workload against every provider on a schedule, scores the results, and publishes the rankings every Friday. The reasoning is straightforward: picking a sandbox vendor is something you need a measurement for, not something a marketing page answers.

The company behind it is Snelling, LLC, which also sells Stealth, the same suite run daily and privately for a single provider.

The benchmark side

Here is the current sandbox burst TTI table, the median time-to-interactive when launching many sandboxes concurrently, pulled straight from the public leaderboard:

ProviderTTI (median)CompositeSuccess
isorun59 ms99.36100%
miosa73 ms98.59100%
promigence193 ms97.96100%
archil210 ms97.62100%
arker309 ms96.81100%
vercel417 ms95.27100%
e2b1334 ms85.79100%
cloud-run2161 ms69.77100%
sail3857 ms61.42100%
sandbox08075 ms6.8259%
codesandbox38356 ms099%

The fastest provider is roughly 650 times quicker than the slowest one on this table. E2B lands in the middle at 1.3 seconds, behind the leader but well ahead of the bottom half.

Storage and browser benchmarks follow the same format:

Storage providerUploadDownloadCompositeSuccess
azure-blob146 ms219 ms96.19100%
archil431 ms134 ms97.13100%
aws-s3603 ms164 ms96.25100%
cloudflare-r2865 ms535 ms86.14100%
neon983 ms152 ms94.04100%
gcs0 ms0 ms00%
Browser providerActions per secondCompositeSuccess
tilion7.3985.9899%
browserbase4.2572.1199%
steel3.4967.9399%
hyperbrowser2.7931.6866%

Two rows deserve a closer look. The gcs row scoring zero is a failure, not a fast result, and hyperbrowser posting 66% success means roughly a third of its runs broke. Publishing failure rates next to the speed numbers is rarer than it should be, and it is the part that makes the rest of the table worth trusting.

Getting it running

Install the core SDK plus whichever provider you want to start with:

npm install computesdk @computesdk/e2b

Then configure the provider and run something inside it:

import { compute } from 'computesdk';
import { e2b } from '@computesdk/e2b';

compute.setConfig({
  provider: e2b({ apiKey: process.env.E2B_API_KEY }),
});

const sandbox = await compute.instances.create();

const result = await sandbox.runCommand('python -c "print(\'Hello World!\')"');
console.log(result.stdout); // "Hello World!"

await sandbox.destroy();

What matters here is what stays fixed. compute.instances.create() does not change when you swap e2b for modal or vercel. Filesystem operations, command execution, and interactive PTY terminals are normalized across the roster, and the SDK exposes detached processes for commands that outlive the request that started them.

Using it over HTTP

You do not need Node in the picture. The platform runs a REST API at https://platform.computesdk.com/api/v1 with bearer auth, and the OpenAPI spec is served at https://www.computesdk.com/openapi.json.

Create a sandbox, then run a command inside it:

curl -X POST https://platform.computesdk.com/api/v1/sandboxes \
  -H "Authorization: Bearer $COMPUTESDK_KEY" \
  -H "Content-Type: application/json" \
  -d '{"label": "build-42", "timeoutMs": 300000}'

curl -X POST https://platform.computesdk.com/api/v1/sandboxes/$SANDBOX_ID/commands \
  -H "Authorization: Bearer $COMPUTESDK_KEY" \
  -H "Content-Type: application/json" \
  -d '{"command": "python -m pytest -q"}'

The create request is where the interesting options live. providerOrder pins or orders placement across the roster, image selects a base image, snapshotId or disk restores prior state, and maxPrice turns the request into a limit order on the Market rather than a normal placement.

There is also an MCP server at https://platform.computesdk.com/mcp, spoken over Streamable HTTP with OAuth 2.0, so agents can create sandboxes without going through your own tooling. The website itself answers Accept: text/markdown on every page, which makes it unusually easy to pull into an agent’s context.

What else is in the box

Actions runs git workflows on ComputeSDK sandboxes, so a repository can define CI steps that execute on remote sandboxes instead of a shared runner. The Market is the other side of the same arrangement: providers list idle capacity at their own listed price, and buyers pay the ask.

Pricing splits cleanly along the same line. Public benchmarks and platform access are free. Stealth is the paid product, where one provider gets the full suite run daily and privately against pinned regions.

What to watch for

The composite score is a ComputeSDK formula, not an industry standard. The raw JSON is public in the computesdk/benchmarks repo, so you can check the weights and recompute the rankings yourself, but any ordering you see published is still one company’s weighting.

Provider churn is the bigger operational risk. The roster shifts, and a provider sitting at the top of the table today can be gone or repriced within a quarter. That cuts both ways: it is an argument for using the SDK’s abstraction instead of a vendor’s API directly, and an argument against hard-wiring yourself to a leaderboard position.

On the SDK side, provider packages are versioned separately from the core package, so mismatched versions are possible. Nothing in the repository prevents it, which means pinning them together is worth doing when it matters.

Source and Accuracy Notes