The idea

Every provider gives you an HTTPS address for a port inside the machine. What differs is the lock. A provider-key link needs an API key or a signed token on every request. A token-in-the-URL link is a password you can paste: convenient, and exactly as safe as the place you pasted it. An open link has no lock at all.

The open case is more common than buyers expect. boxd's name.boxd.sh is public to the internet with no authentication in front of it. InstaBox's public ports are unauthenticated by design, though a port can instead be made private behind a token. Agent 37's public port is deliberately credential-free and keeps working until you delete it. In each case the URL is the only secret.

The other doors are less visible. SSH is sometimes a real port, sometimes a WebSocket tunnel, sometimes a shell over the provider's own transport. Raw TCP exists at a few providers and is missing at most. The provider's API is always a door, and sometimes the only one.

Where providers split

The claim on the left, the provider's own words on the right

Token in the URL, or no token at all

Sandboxer puts a token in the preview URL by default and strips it before the request reaches your app. Lizard uses one token per sandbox, so a link to one port opens every exposed port on that machine. Sprites makes the URL private to the organisation, reachable with an org token.

At boxd and InstaBox the URL is the only credential. Agent 37 goes further and sells an explicitly public port that anyone can reach with no credential at all.

Raw TCP and SSH are a separate capability

Runtime, boxd and Boat support a raw TCP path; Boat's depends on IPv4, which is not guaranteed. Sandboxer and InstaBox route SSH through a gateway. Lizard has no SSH protocol at all: its ssh command is an interactive shell over the provider's transport, so scp, rsync and port forwarding do not work.

Vercel exposes web ports and bills traffic to them, but a general raw TCP inbound or a personal SSH endpoint is not published.

A sleeping machine changes the answer

A URL that wakes a machine is a different product from a URL that returns an error. Sprites, Runtime and InstaBox document wake on request. boxd's bot protection gates the wake: a webhook, API client or uptime monitor gets a 503 check page and the machine does not wake.

Boat cannot wake on a URL at all, because a stop removed the machine.

One worked case

The same job at every provider, from the documented defaults

Paste the preview URL into a client channel

The agent builds a demo on port 3000. You copy the HTTPS address and paste it into a shared channel for a client, who opens it the next morning from a different country.

  1. 17:00

    You copy the URL. Whether it carries a token, and whether that token covers one port or the whole machine, is already decided.

  2. 23:00

    The machine goes idle or stops. The link either wakes it, returns an error, or points at a machine that no longer exists.

  3. 09:00

    The client opens the link. Anyone with the URL, or only someone holding a key, gets through.

Four providers here put no authentication in front of the port at all, and one makes the token per machine rather than per port. A URL that wakes a sleeping machine is a different product from one that returns an error.

What each provider does

Agent 37
Instance and preview URLs need an API key or a signed URL; the public port is deliberately open to anyone and keeps working.
Blaxel
Preview URLs back a running sandbox with optional auth; whether auth is on by default is not published.
Boat
The HTTPS route is token-gated unless you pass --public, and SSH is a real port.
boxd
Every machine answers on name.boxd.sh with no authentication; bot protection only gates the wake, so a sleeping machine returns a check page.
Cloudflare Sandbox
There is no URL to paste: the client reaches the page through your Worker, and any authentication is code you write.
Daytona
The preview URL needs authentication unless the sandbox is public; the standard token opens the whole sandbox and cannot be revoked.
E2B
Anyone who has the URL gets in; there is no authentication by default.
InstaBox
A port can be public, or private so it answers only requests that carry its token, which can be replaced.
Lizard
One token per sandbox opens every exposed port on it, so a link to the demo also opens the rest.
Modal
Nothing is reachable until a port is exposed; the client needs a connect token, and the container sees a verified header.
Morph
An HTTP service can be exposed through the API, but default authentication is not published.
Runtime
Nothing is reachable until you open a door; a token-gated preview is one of the options.
Sandboxer
A token sits in the preview URL by default and is stripped before the request reaches the app.
Sprites
The URL is private to the organisation and needs an org token, so a client outside it cannot open the link.
Vercel Sandbox
Web ports can be exposed, up to 15, and traffic to them is billable; no general inbound TCP is published.
Tensorlake
Each exposed port gets https://<port>-<name>.sandbox.tensorlake.ai; a project key is required unless the sandbox is switched to public access.

What to watch for

The details that decide the answer in practice

  1. 01

    Who can open the link: only you, anyone you send it to, or anyone who guesses it.

  2. 02

    Whether the token is per port or per machine.

  3. 03

    Whether a request to a sleeping machine wakes it or returns an error.

  4. 04

    Whether raw TCP and SSH exist, and whether SSH is a real port or a tunnel.

  5. 05

    Whether the URL survives a stop and resume.

Compare all 16

Docs read 28 October 2026

A machine nobody can reach is not an agent. There are four doors in — an HTTPS link, a raw TCP port, SSH, and the provider's API — and the important difference is who can open each one.
ProviderWho can open the linkDoes it?What that means
Agent 37API key, or publicYesEvery port gets an HTTPS URL; instance and preview URLs require an API key or a time-boxed signed URL. A public port is deliberately unauthenticated and permanent. SSH is tunnelled; no raw TCP.Agent 37 docs: Instance and preview URLs — HTTPS per port, signed URLs ↗
Agent 37's own wordsdocs-confirmed
“Instance URLs require auth on every request”
Agent 37docs-confirmed
BlaxelOptional authPartlySpecific ports can be exposed, and preview URLs back a running sandbox with optional auth and custom domains. Default ingress authentication is not published.Blaxel docs: Real-time previews ↗
Blaxel's own wordsdocs-confirmed
“Render an application in real-time through a direct preview URL backed by a running Blaxel sandbox, with optional auth and custom domains.”
Blaxeldocs-confirmed
BoatToken by defaultPartlyAn HTTPS route per port, token-gated by default and --public to remove it; SSH on port 22; raw TCP by opening the sandbox firewall, but only IPv6 is guaranteed.Boat docs: Public URLs ↗
Boat's own wordsdocs-confirmed
“boat does not support custom domains.”
Boatdocs-confirmed
boxdNo authYesEvery machine is on name.boxd.sh with no authentication in front of it; subdomain proxies add ports, up to three raw TCP forwards, and SSH on a dedicated port. Bot protection only gates wake-ups.boxd docs: HTTPS ↗
boxd's own wordsdocs-confirmed
“When a request would wake a sleeping machine, boxd first asks the visitor to pass a quick browser check.”
boxddocs-confirmed
Cloudflare SandboxNo public portPartlyHTTP from the internet reaches the instance only through your Worker. No built-in preview auth, token or IP allowlist. SSH exists only through Wrangler, does not start a stopped container and does not keep one alive.Cloudflare Sandbox docs: Preview a web application ↗
Cloudflare Sandbox's own wordsdocs-confirmed
“The server has no public port, so your Worker forwards requests to it.”
Cloudflare Sandboxdocs-confirmed
DaytonaToken, or signed URLPartlyPreview links are authenticated unless public is true. The standard token is sandbox-wide, opens the terminal and toolbox, and cannot be revoked; signed URLs are per port, 60 seconds by default and 24 hours maximum.Daytona docs: Preview (preview URLs and tokens) ↗
Daytona's own wordsdocs-confirmed
“If a sandbox has its public property set to true, preview links are publicly accessible without authentication. Otherwise, authentication is required.”
Daytonadocs-confirmed
E2BNo authPartlyPublic URLs are reachable by anyone who knows them, with no authentication by default. SSH runs through a WebSocket proxy rather than a native port.E2B docs: Sandbox public URL ↗
E2B's own wordsdocs-confirmed
“By default, a sandbox's public URLs are reachable by anyone who knows them.”
E2Bdocs-confirmed
InstaBoxPublic or token-only linksPartlyAn HTTPS link per port, up to 16, either public or private behind a replaceable token. SSH and mosh go through a gateway. Raw non-web ports are in an admin-only preview, later paid plans only with 5 per workspace. No custom domain.InstaBox docs: Public and private ports — HTTPS URL per port ↗
InstaBox's own wordsdocs-confirmed
“A private port answers only requests that carry its token.”
InstaBoxdocs-confirmed
LizardOne token per sandboxPartlyA preview URL per exposed port, gated by one token per sandbox that opens every port on it. WebSockets pass through. No raw TCP, no SSH protocol, no custom domains for sandboxes.Lizard docs: Preview URLs — HTTPS per port with an access token ↗
Lizard's own wordsdocs-confirmed
“The token belongs to the sandbox, not to a port: it opens every port you expose on that sandbox”
Lizarddocs-confirmed
ModalConnect tokenYesNo inbound by default. Expose encrypted, h2 or unencrypted ports; connect tokens are the recommended path for HTTP and WebSockets, and raw TCP is possible. inbound_cidr_allowlist is not enforced on unencrypted tunnels.Modal docs: Sandbox networking: forwarding ports and tunnels ↗
Modal's own wordsdocs-confirmed
“You can make authenticated HTTP and WebSocket requests to a Sandbox by generating Sandbox Connect Tokens.”
Modaldocs-confirmed
MorphNot publishedPartlyAn instance can expose an HTTP service through the API. Default authentication and raw TCP support are not published.Morph docs: HTTP Services ↗
Morph's own wordsdocs-confirmed
“Expose Http Service”
Morphdocs-confirmed
RuntimeClosed until openedYesNothing is reachable until you open a door: token-gated previews, custom domains, raw TCP ports, a WireGuard or Tailscale private network, or SSH over the API.Runtime docs: Private preview links ↗
Runtime's own wordsdocs-confirmed
“Nothing on the internet can connect in to a sandbox. These are the ways in. You open each one yourself”
Runtimedocs-confirmed
SandboxerToken in URLYesA stable HTTPS address per port, private by default with a token in the URL; --public removes it. A public IPv6 with the firewall closed except SSH. No raw-TCP endpoint.Sandboxer docs: Hosting ↗
Sandboxer's own wordsdocs-confirmed
“Private (default) | https://…-3000.box.sandboxer.com?_token=… | Anyone with the full URL.”
Sandboxerdocs-confirmed
SpritesOrg tokenPartlyEvery Sprite has an HTTPS URL that is private to the organisation by default, reachable with an org token. SSH requires installing a server and proxying it.Sprites docs: Networking ↗
Sprites's own wordsdocs-confirmed
“A Sprite URL is private by default. It's reachable only by members of your org, through the browser or with an org token”
Spritesdocs-confirmed
Vercel SandboxWeb ports onlyPartlyWeb ports can be exposed, up to 15 per sandbox, and traffic to them is billable. The dashboard's Connect tab gives a terminal in the browser. A general raw TCP inbound, standard SSH or public IPv4 is not published.Vercel Sandbox docs: Sandbox concepts: network access and exposed ports ↗
Vercel Sandbox's own wordspricing-page
“Data your sandbox sends to the internet, plus all traffic to and from exposed ports, is billable and measured in GB.”
Vercel Sandboxpricing-page
TensorlakeHTTPS per portauth on by defaultYesThe proxy carries HTTP, WebSocket and gRPC, and preserves path and query. Auth is the default: requests need a project API key, or a signed-in session cookie from a browser. allow_unauthenticated_access makes exposed user ports public, but the management API on port 9501 always requires auth.Tensorlake docs: Networking — sandbox public URLs, exposed ports and auth ↗
Tensorlake's own wordsdocs-confirmed
“https://<port>-<sandbox-id-or-name>.sandbox.tensorlake.ai routes to a user service listening on <port> inside the sandbox”
Tensorlakedocs-confirmed

The specific capabilities

Each one checked for every provider, with the catch where a version falls short. All capabilities

Reaching it: capabilities by provider
CapabilityAgent 37BlaxelBoatboxdCloudflare SandboxDaytonaE2BInstaBoxLizardModalMorphRuntimeSandboxerSpritesTensorlakeVercel Sandbox
Public link to a portAgent 37: Yes. Any portBlaxel: Yes. Public or privateBoat: Yes. Up to 50 portsboxd: Yes. No sign-in at allCloudflare Sandbox: With a catch. Through your Worker. There is no address for the machine itself; you publish a small program of your own and anyone who can open that address gets in.Daytona: Yes. public flagE2B: Yes. Anyone with the linkInstaBox: Yes. 16 portsLizard: No. Every preview link needs the machine's access token, so there is no open address to share.Modal: With a catch. Open raw port only. A normal web port needs a connect token; only a port exposed as raw traffic is open to anyone.Morph: Not publishedRuntime: Yes. Paid top-upSandboxer: Yes. --publicSprites: Yes. public or org-onlyTensorlake: Yes. Per-port switchVercel Sandbox: Yes. Exposed ports
Private linkAgent 37: Yes. Key or signed linkBlaxel: Yes. Token per previewBoat: Yes. Token in linkboxd: No. Every machine address is open to the internet, and the provider offers no token or login to put in front of it.Cloudflare Sandbox: With a catch. Login is your code. You have to write the login check in your own small program; the machine brings no token or password of its own.Daytona: Yes. Token or signed linkE2B: No. There is no built-in lock: anyone who has the link can open it.InstaBox: Yes. Token in linkLizard: Yes. One token per machineModal: Yes. Connect tokenMorph: Not publishedRuntime: Yes. Token by defaultSandboxer: Yes. Token in linkSprites: Yes. Org tokenTensorlake: Yes. Project keyVercel Sandbox: No. An exposed port is open to anyone with the link; there is no token or login in front of it.
Real SSHAgent 37: Yes. Over one connectionBlaxel: No. There is no SSH address or SSH server; the only shell is the provider's own terminal.Boat: Yes. Port 22boxd: Yes. Real SSHCloudflare Sandbox: With a catch. One provider tool. You cannot point a normal SSH client at the machine; the only way in is a Cloudflare command-line tool.Daytona: Yes. Token, 60 minE2B: With a catch. You build the image. SSH only works if you build a custom image with an SSH server and a relay inside it.InstaBox: Yes. Gateway, short certLizard: With a catch. Own client only. Its shell command works, but it is the provider's own client rather than a standard SSH connection, so ordinary SSH tools cannot connect.Modal: With a catch. Install it yourself. The machine has no SSH server; you have to install one and open a port for it.Morph: Yes. Built inRuntime: With a catch. Through the CLI. The connection goes through the provider's own command rather than a plain SSH address.Sandboxer: Yes. sshEndpointSprites: With a catch. Install a server. You must install an SSH server inside the machine and reach it through the provider's proxy.Tensorlake: Yes. Standard sshVercel Sandbox: With a catch. SSH-like shell. The command line is the provider's own tool that feels like SSH; a standard SSH client cannot connect.
Terminal in the browserAgent 37: Yes. Port 7681Blaxel: Yes. Console tabBoat: Not publishedboxd: Yes. Console terminalCloudflare Sandbox: With a catch. You build it. The provider gives you code for a terminal you host yourself, not a terminal on its own website.Daytona: Yes. DashboardE2B: Not publishedInstaBox: Yes. DashboardLizard: Yes. Terminal tabModal: Not publishedMorph: Not publishedRuntime: Yes. ConsoleSandboxer: Yes. Dashboard tabSprites: Not publishedTensorlake: Not publishedVercel Sandbox: Yes. Dashboard tab
Tunnel to your computerAgent 37: Yes. ssh -LBlaxel: Not publishedBoat: Yes. ssh -Lboxd: Yes. ssh -LCloudflare Sandbox: No. There is no way to map a port inside the machine onto your own computer.Daytona: Not publishedE2B: Not publishedInstaBox: Yes. ssh -L, yours onlyLizard: Not publishedModal: Not publishedMorph: Yes. ssh -LRuntime: Yes. Through the APISandboxer: Yes. sbx forwardSprites: Yes. sprite proxyTensorlake: Yes. Local tunnelVercel Sandbox: No. Exposed ports are reachable on the internet, but there is no documented way to map one onto your own computer.
Non-web portsAgent 37: No. Only web traffic gets through; a database or game server cannot be reached directly.Blaxel: Not publishedBoat: Yes. IPv6 only sometimesboxd: Yes. 3 forwardsCloudflare Sandbox: No. Web traffic only: no other kind of connection can be made to the machine from outside.Daytona: Not publishedE2B: Not publishedInstaBox: With a catch. Preview, 5 per workspace. Raw non-web traffic is in a preview only administrators can use, and later will be paid-plan only with five ports per workspace.Lizard: No. Preview links carry web traffic only, so a database or game port cannot be published.Modal: Yes. Raw tunnelsMorph: Not publishedRuntime: Yes. 5 per machineSandboxer: With a catch. Through SSH only. There is no public non-web port; you reach one by opening a tunnel from your own computer.Sprites: With a catch. Through your computer. You can map a database port onto your own computer, but there is no public address for non-web traffic.Tensorlake: With a catch. Through a tunnel. The public address carries web traffic and SSH only; a database needs a tunnel from your own computer.Vercel Sandbox: No. Only web ports can be exposed, so a database or game server cannot be reached from outside.

YesWith a catchNoNot publishedHover or select a mark to see the catch.

Questions to ask before you sign

Each one targets something the documentation does not answer

  1. Is there authentication in front of a preview URL by default, or is the URL the only secret?
  2. Is the token per port or per machine, and can it be revoked without recreating the sandbox?
  3. Does a request to a sleeping machine wake it, or return an error page?
  4. Does the URL survive a stop and resume, and does it change when the machine is recreated?
  5. Is SSH a real port or a tunnel, and is raw TCP inbound available at all?

Common questions

Answered from the capability checks; each links to the provider-by-provider detail and its sources

Which sandbox providers offer “public link to a port”?
A web address that reaches a program running in the sandbox. Fully: Agent 37, Blaxel, Boat, Daytona, E2B, InstaBox, Runtime, Sandboxer, Sprites, Tensorlake, Vercel Sandbox and boxd. With a catch: Cloudflare Sandbox and Modal. Not at all: Lizard. See each provider's catch
Which sandbox providers offer “private link”?
A link only you or people with a token or login can open. Fully: Agent 37, Blaxel, Boat, Daytona, InstaBox, Lizard, Modal, Runtime, Sandboxer, Sprites and Tensorlake. With a catch: Cloudflare Sandbox. Not at all: E2B, Vercel Sandbox and boxd. See each provider's catch
Which sandbox providers offer “real SSH”?
Connect with a standard SSH client from your own computer. Fully: Agent 37, Boat, Daytona, InstaBox, Morph, Sandboxer, Tensorlake and boxd. With a catch: Cloudflare Sandbox, E2B, Lizard, Modal, Runtime, Sprites and Vercel Sandbox. Not at all: Blaxel. See each provider's catch
Which sandbox providers offer “terminal in the browser”?
Open a command line on the machine from the provider's website. Fully: Agent 37, Blaxel, Daytona, InstaBox, Lizard, Runtime, Sandboxer, Vercel Sandbox and boxd. With a catch: Cloudflare Sandbox. See each provider's catch
Which sandbox providers offer “tunnel to your computer”?
Reach a port inside the sandbox as if it were on your own machine (port forwarding). Fully: Agent 37, Boat, InstaBox, Morph, Runtime, Sandboxer, Sprites, Tensorlake and boxd. Not at all: Cloudflare Sandbox and Vercel Sandbox. See each provider's catch
Which sandbox providers offer “non-web ports”?
Reach services that are not HTTP, such as a database or game server, over TCP. Fully: Boat, Modal, Runtime and boxd. With a catch: InstaBox, Sandboxer, Sprites and Tensorlake. Not at all: Agent 37, Cloudflare Sandbox, Lizard and Vercel Sandbox. See each provider's catch

Part of Access and network. Next: put two or three providers side by side.