๐Ÿ”ฅ firecracker inside $0.00 / sandbox-hour certified friends-only โœŒ๏ธ NOW SERVING ยท 4 CLOUDS ยท 1 HOUSE

Sandboxes,
but make it
homemade.

The Sprites, E2B, Vercel Sandbox and Daytona APIs, running on a computer in Jake's house. Use the official SDKs, unmodified: change one URL, get a real microVM in about half a second. No invoices, no quota emails, no sales calls.

~0.4sAPI call to a booted microVM
4sandbox APIs, one engine
0lines of SDK patched
$0billed, ever (it's Jake's power bill)

Pick your flavor

Same Firecracker engine underneath, four famous APIs on top. Your code thinks it's talking to the real thing, and every SDK suite agrees.

๐Ÿ‘พ

Spritessprites.sandbox.inevitable.fyi

Persistent little computers with names. The disk keeps everything, an idle sprite naps with its memory intact and wakes on the next request, and each one gets its own URL. This is the API the engine was born speaking.

  • exec + streaming
  • persistent disk
  • suspend / wake warm
  • checkpoints + restore
  • a URL per sprite
  • TCP proxy
  • services
  • network policy
base URL
https://sprites.sandbox.inevitable.fyi
SPRITE_TOKEN
your sandboxd key
your URL
https://<name>.sprites.sandbox.inevitable.fyi

Tested with sprites-py 0.7.1 through this URL. A sprite's URL wants your key until you set its url_settings.auth to "public". Names are global here, so pick something unlikely.

from sprites import SpritesClient  # pip install sprites-py

client = SpritesClient("<your key>",
                       base_url="https://sprites.sandbox.inevitable.fyi")
sprite = client.create_sprite("my-sprite")
print(sprite.command("uname", "-a").output().decode())
sprite.command("sh", "-c", "echo remember me > ~/note").run()
# ...walk away; it naps, and wakes with ~/note still there
client.delete_sprite("my-sprite")
โšก

E2Be2b.sandbox.inevitable.fyi

Code-interpreter sandboxes with E2B's own in-guest daemon, envd, running inside. It's the real envd, not an imitation, so every feature of the SDK just works.

  • streaming commands
  • background processes
  • PTY + stdin
  • files
  • signed upload/download URLs
  • public ports
  • pause / resume
  • metrics
  • timeouts
E2B_API_URL
https://e2b.sandbox.inevitable.fyi
E2B_DOMAIN
e2b.sandbox.inevitable.fyi
E2B_API_KEY
your sandboxd key
your ports
https://<port>-<id>.e2b.sandbox.inevitable.fyi

Tested with e2b 2.52.0 (Python and JS): 26 of 26 checks pass. 2 vCPUs and 512 MiB per sandbox, like hosted E2B's base template.

import os
os.environ |= {
  "E2B_API_URL": "https://e2b.sandbox.inevitable.fyi",
  "E2B_DOMAIN":  "e2b.sandbox.inevitable.fyi",
  "E2B_API_KEY": "<your key>",
}
from e2b import Sandbox  # pip install e2b

with Sandbox.create() as sbx:
    r = sbx.commands.run("python3 -c 'print(6*7)'")
    print(r.stdout)                     # 42
    sbx.commands.run("python3 -m http.server 8080", background=True)
    print("https://" + sbx.get_host(8080))  # live on the internet
โ–ฒ

Vercel Sandboxvercel.sandbox.inevitable.fyi

Run commands, stream their logs, write files, expose a port on its own route, snapshot it, and boot a new one from the snapshot. The full Vercel Sandbox API, minus the bill.

  • runCommand (waited + detached)
  • streamed logs
  • env, cwd, sudo
  • files + mkdir
  • routes per port
  • snapshots
  • extendTimeout
  • kill signals
base URL
https://vercel.sandbox.inevitable.fyi/api
VERCEL_TOKEN
your sandboxd key
TEAM / PROJECT
any value (the SDK insists; we don't check)
your ports
https://<subdomain>.vercel.sandbox.inevitable.fyi

The JS SDK has vercel.com hardcoded, so it needs a 30-line preload that redirects its fetch: vercel-target.mjs. The Python SDK just takes a base_url.

# once: curl -O https://sandbox.inevitable.fyi/vercel-target.mjs
# VERCEL_TOKEN=<key> VERCEL_TEAM_ID=x VERCEL_PROJECT_ID=x \
# VERCEL_SANDBOX_URL=https://vercel.sandbox.inevitable.fyi/api \
#   node --import ./vercel-target.mjs app.mjs
import { Sandbox } from '@vercel/sandbox'

const sandbox = await Sandbox.create({ ports: [3000] })
const cmd = await sandbox.runCommand('sh', ['-c', 'echo it works'])
console.log(await cmd.stdout())
await sandbox.stop()
โ˜€

Daytonadaytona.sandbox.inevitable.fyi

Dev environments for agents: one-shot exec, code runs, long-lived sessions whose logs you can follow live, bulk file moves and preview links for anything you serve. It stops when idle and starts again when you need it.

  • exec + code run
  • sessions
  • live log follow
  • bulk upload/download
  • preview links
  • labels
  • auto-stop
  • stop / start
DAYTONA_API_URL
https://daytona.sandbox.inevitable.fyi/api
DAYTONA_API_KEY
your sandboxd key
previews
https://<port>-<id>.daytona.sandbox.inevitable.fyi

Tested with daytona 0.220.0 (Python and TypeScript): 22 of 22 checks pass. Private sandboxes' previews want their x-daytona-preview-token.

import os
os.environ |= {
  "DAYTONA_API_URL": "https://daytona.sandbox.inevitable.fyi/api",
  "DAYTONA_API_KEY": "<your key>",
}
from daytona import Daytona  # pip install daytona

sbx = Daytona().create()
print(sbx.process.exec("echo hi from $(hostname)").result)
print(sbx.process.code_run("print(sum(range(10)))").result)  # 45
print(sbx.get_preview_link(3000).url)
sbx.delete()

Three steps to ๐ŸŽ‰

Run this from anywhere: your laptop, a CI box, a sandbox inside a sandbox (it's been done). All you need is uv.

1

Get a key

Ask Jake. Each friend gets their own key, and Jake can revoke it if you mine crypto.

export SANDBOXD_API_KEY="<from jake>"
2

Grab the script

One file. It pins the official SDKs and fetches them itself.

curl -O https://sandbox.inevitable.fyi/try.py
3

Light it up

A sandbox on each API: run a command, serve a page, fetch it from the internet, delete it.

uv run try.py        # or: sprites | e2b | vercel | daytona

The fine print ๐Ÿงพ

It's one computer. A very good computer, but one. Be cool.

50sandboxes at once across everyone
16 GiBof RAM for running sandboxes; idle ones nap on disk and wake on demand
4cold boots in flight at once; past that you get a retryable error
10 minto send one request (big uploads are fine); responses stream as long as you like
publicport URLs: anyone with the link can reach that port, the same as upstream (sprite URLs only once you say so)
no SLAif the house loses power, so do your sandboxes
copied! ๐Ÿ“‹