---
title: "E2B vs Fly.io Sprites."
description: "Compare E2B and Fly.io Sprites through one sandbox API, including environment selection, lifetimes, command output, and persistent state."
canonical: "https://wildflower.computer/compare/e2b-vs-sprites/"
openapi_version: "0.8.0"
source_revision: "788b7325a454b8b753a7d614247d5694bad5c967"
---

# E2B vs Fly.io Sprites.

E2B accepts a template and timeout. Sprites uses a fixed environment, rejects timeout, and can automatically wake from a stopped state on execution. Wildflower Computer keeps the surrounding lifecycle calls the same while leaving these differences visible.

## Capability comparison

| Concern | E2B | Fly.io Sprites |
| --- | --- | --- |
| Provider value | `e2b` | `sprites` |
| Image | The image field is interpreted as an E2B template ID. It defaults to base when omitted. | Sprites uses a fixed environment. The adapter rejects image rather than silently ignoring it. |
| Lifetime | The timeout is a sandbox lifetime in seconds and defaults to 300 when omitted. | Sprites automatically sleeps and persists until deletion. The adapter rejects timeout. |
| Command output | The adapter preserves separate stdout and stderr streams and returns the command exit code. | The adapter preserves separate stdout and stderr frames and returns the command exit code. |
| Credential | E2B API key | Fly.io Sprites API token |

## One create endpoint, explicit provider input

The endpoint and authentication boundary are shared. The request body changes only where the selected provider's supported creation inputs differ.

```bash
# E2B
curl --fail-with-body "$WILDFLOWER_URL/v1/sandboxes" \
  -H "Authorization: Bearer $WILDFLOWER_API_KEY" \
  -H "X-Provider-Api-Key: $LEFT_PROVIDER_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{  "provider": "e2b",  "image": "base",  "timeout": 300}'

# Fly.io Sprites
curl --fail-with-body "$WILDFLOWER_URL/v1/sandboxes" \
  -H "Authorization: Bearer $WILDFLOWER_API_KEY" \
  -H "X-Provider-Api-Key: $RIGHT_PROVIDER_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{  "provider": "sprites"}'
```

## What is portable

- The create, get, runCommand, and delete methods across generated SDKs.
- Normalized sandbox IDs, provider values, status, and metadata.
- Command, working-directory, and environment inputs for execution.
- Normalized stdout, stderr, and exitCode response fields.

## What is not automatically portable

Existing sandbox state is not transferred between E2B and Fly.io Sprites. An ID stays bound to the provider selected at creation. Images and lifetimes also retain the semantics shown above.

## Current limitations

### E2B

- The image value is a template ID, not a general container image.
- The sandbox remains attached to E2B for its complete lifecycle.
- Wildflower Computer does not migrate E2B filesystem state to another provider.

### Fly.io Sprites

- Image selection is not supported by the current adapter.
- A sandbox lifetime timeout is not supported by the current adapter.
- A cold Sprite can initially report stopped and wakes on its first command.

## Read the underlying support pages

- [E2B sandbox API capabilities and limitations](https://wildflower.computer/providers/e2b/)
- [Fly.io Sprites sandbox API capabilities and limitations](https://wildflower.computer/providers/sprites/)
- [Full provider compatibility matrix](https://wildflower.computer/compatibility/)
- [Shared lifecycle quickstart](https://wildflower.computer/docs/getting-started/)

> **Create · get · runCommand · delete** — Shared lifecycle Provider choice remains fixed for the lifetime of each sandbox.
