> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anonalabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create a sandbox, run a command and clean up, in about two minutes.

**1. Get an API key**

Sign in to the [dashboard](https://app.compute.anonalabs.com), open **API keys** and create a key. Keys look like `e2b_` followed by hex; the secret is shown once.

```bash env.sh theme={null}
export ANONA_API_KEY=e2b_YOUR_API_KEY
```

The Anona SDK extras and the CLI read `ANONA_API_KEY` (or `E2B_API_KEY`) and default to `compute.anonalabs.com`.

**2. Install**

```text Python theme={null}
pip install anona
```

```text TypeScript theme={null}
npm install @anona/sdk e2b
```

```text CLI theme={null}
# anona-compute: a single binary for Linux, macOS and Windows (amd64, arm64)
```

> [!NOTE]
>
> **Coming soon:** the `anona` and `@anona/sdk` packages on PyPI and npm, and downloadable `anona-compute` binaries. Until they are published, the stock E2B SDK works on its own (`pip install e2b` or `npm install e2b`, then `from e2b import Sandbox` with `E2B_DOMAIN=compute.anonalabs.com`); see [Migrate from E2B](https://docs.anonalabs.com/compute/migrate-from-e2b.md).

**3. Run code in a sandbox**

```python quickstart.py theme={null}
from anona import Sandbox

sbx = Sandbox.create("base")  # a KVM microVM, ready in about a second
print("sandbox", sbx.sandbox_id)

result = sbx.commands.run("uname -a && whoami")
print(result.stdout)

sbx.files.write("/home/user/hello.txt", "hello from Anona\n")
print(sbx.files.read("/home/user/hello.txt"))

sbx.kill()
```

```typescript quickstart.ts theme={null}
import { Sandbox } from "@anona/sdk";

const sbx = await Sandbox.create("base"); // a KVM microVM, ready in about a second
console.log("sandbox", sbx.sandboxId);

const result = await sbx.commands.run("uname -a && whoami");
console.log(result.stdout);

await sbx.files.write("/home/user/hello.txt", "hello from Anona\n");
console.log(await sbx.files.read("/home/user/hello.txt"));

await sbx.kill();
```

```bash quickstart.sh theme={null}
printenv ANONA_API_KEY | anona-compute login --with-api-key   # or: anona-compute login (browser)

SANDBOX_ID=$(anona-compute create -t base --json | jq -r .sandboxID)
anona-compute exec "$SANDBOX_ID" -- 'uname -a && whoami'
anona-compute list
anona-compute delete "$SANDBOX_ID"
```

## Next

> [card] [Run code](https://docs.anonalabs.com/compute/guides/run-code.md)
>
> Commands, exit codes, environment and working directories.

> [card] [Long-running sandboxes](https://docs.anonalabs.com/compute/concepts/lifecycle.md)
>
> Timeouts, no-limit sandboxes, pause and resume.

> [card] [Templates](https://docs.anonalabs.com/compute/concepts/templates.md)
>
> `base`, `python`, `node`, `code-interpreter`, `desktop`, `coding-agent`.

> [card] [Agents over MCP](https://docs.anonalabs.com/compute/guides/mcp.md)
>
> Let Claude Code, Codex or Cursor drive sandboxes.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.