| title | WebUI Dashboard |
|---|
The Cube Sandbox Dashboard is a built-in web console that lets you see what's running, manage sandboxes, build templates, and inspect cluster health — all from your browser, no CLI required.
⏱ Takes ~3 minutes to read. After that you can drive a cluster from a laptop.
The Dashboard is a static frontend served by an nginx container on the control node.
| Scenario | URL | Notes |
|---|---|---|
| One-click / multi-node deploy | http://<control-node-ip>:12088 |
Default port, change via WEB_UI_HOST_PORT |
| Bare-metal deploy | http://<server-ip>:12088 |
Same port |
| Local development | http://localhost:5173 |
Vite dev server, proxies /cubeapi to 127.0.0.1:3000 |
::: tip Port 12088, not 3000
Port 3000 is the E2B-compatible REST API (CubeAPI). Port 12088 is the human-facing Dashboard. The Dashboard internally calls CubeAPI under the same-origin prefix /cubeapi/v1, so you only ever need to open 12088.
:::
If you don't know your control-node IP, run ip -4 addr on the server, or check http://<hostname>:12088 on the same LAN.
Everything lives behind the 11 icons in the left rail. Hover any icon to see its name.
| # | Icon | Page | What it's for |
|---|---|---|---|
| 1 | 📊 | Overview | Cluster KPIs: running sandboxes, CPU/memory usage, healthy nodes |
| 2 | 📦 | Sandboxes | Live list of every micro-VM, with pause / resume / kill actions |
| 3 | 🧩 | Templates | Catalog of reusable sandbox snapshots; create new ones from OCI images |
| 4 | 🖥️ | Nodes | Fleet health: per-host CPU, memory, slot capacity |
| 5 | 🧬 | Versions | Component version matrix across nodes (kernel, agent, guest image) |
| 6 | 🌐 | Network | API gateway config and per-node rate limits |
| 7 | 📈 | Observability | Runtime status, sandbox health, template build overview |
| 8 | 🔑 | API Keys | Store the X-API-Key value used for all Dashboard requests |
| 9 | 🏪 | Template Store | Install official preset images to bootstrap templates |
| 10 | 🤖 | AgentHub | Recruit and manage AI agent instances running on Cube Sandbox |
| 11 | ⚙️ | Settings | Theme, language, cluster info, keyboard shortcuts |
::: tip New user? Start with Overview. It shows everything important in one screen and refreshes automatically. :::
Open Overview (/). You should see four green-ish KPI cards:
- Running Sandboxes — how many micro-VMs are live
- CPU / Memory Utilization — cluster-wide pressure
- Healthy Nodes —
N/Mnodes reportingReady
If any number is red, click into Nodes to see which host is unhappy.
- Click Sandboxes in the left rail, then + New sandbox (top-right).
- Pick a template from the grid. Templates marked
STALEare disabled — pick aREADYone. - (Optional) Add a few
metakey/value pairs as labels. - Click Create. Within a couple of seconds you'll be redirected to the sandbox's detail page, where you can watch its logs stream in real time.
To stop a sandbox, go to Sandboxes, find the row, and click the pause / kill button on the right.
If your deployment has authentication turned on, the Dashboard needs an API key before any request will succeed.
- Open API Keys in the left rail.
- Paste your key (it looks like
sk-cube-…) into the input. - Click Save. The value is stored in your browser's
localStorageundercube.apiKeyand attached to every Dashboard request as theX-API-Keyheader.
::: details Where does the key come from? The admin who enabled auth generated it. See Authentication for the full flow. :::
The Dashboard is keyboard-friendly. The big three:
| Key | Action |
|---|---|
⌘ K / Ctrl K |
Open the Command Palette — type a page name to jump there |
? |
Open Settings → Shortcuts (this list, but in-app) |
R |
Refetch every visible data panel |
Esc |
Close any open modal or the Command Palette |
Open Settings in the left rail:
- Appearance → Theme — Light, Dark, or follow your OS
- Appearance → Language — English or 简体中文
- Cluster — Read-only view of the CubeAPI endpoint, sandbox domain, default instance type, rate limit, and whether auth is on
The Command Palette's ⌘K input box and the topbar have quick toggles for the same.
Why a separate Dashboard, not just curl?
Most operations (create-from-image, version matrix, node triage) are easier to discover and visualize in a UI. For automation, the Dashboard is just a thin client — every page is a call to /cubeapi/v1/*, which is the same E2B-compatible REST API you can hit with curl or the E2B SDK.
Does the Dashboard store my data?
It stores only one thing in your browser: the API key under localStorage.cube.apiKey. All other state (templates, sandboxes, logs) lives on the cluster.
Can I change the port?
Yes — set WEB_UI_HOST_PORT in .env before running install.sh. The change applies on next start of cube-sandbox-webui.service.
Can I disable the Dashboard?
Yes — set WEB_UI_ENABLE=0 (or unset) in .env. The cluster keeps running; you just won't have the web UI. The E2B-compatible API on port 3000 is unaffected.
Is the Dashboard open source? Can I run my own build?
Yes — it lives in web/ of the repo, built with Vite + React + TypeScript + Tailwind. See Self-Build Deployment and the web/README.md for details.
- Quick Start — if you haven't installed yet, get to a running Dashboard in minutes
- Service Management — how to start/stop/restart the
cube-sandbox-webui.servicecontainer - Authentication — turn on API keys if you haven't
- HTTPS & Domain Resolution — put the Dashboard behind TLS
- Architecture Overview — understand how CubeAPI, CubeMaster, Cubelet fit together behind the scenes