Appearance
Pods
A pod is a small Linux machine of your own, running on MicroApps. It has its own filesystem, its own processes, its own users, and its own network identity. You get shell access, you install what you want, and you run what you want. If you've rented a cheap Linux box before, a pod fills the same slot - just faster to create and cheaper to keep.
Workloads
You don't pick a "type" when you create a pod. You pick a Workload, and that decides everything else:
| Workload | Versions | Pod kind | Login user | Good for |
|---|---|---|---|---|
| Ubuntu | 22.04, 24.04 | instance | ubuntu | Anything. Web apps, scripts, bots, dev boxes. Gets the browser Shell and SSH. |
| MySQL | 5.7, 8.0 | database | root | A managed MySQL database. Gets reset password. |
Under the hood these become instance and database pods respectively - you'll see that as the type field in the API. The practical differences: instance pods have the in-browser Shell and let you add SSH keys; database pods have a resettable password and hand you a generated one at creation.
Compute
Every size is a single fast vCPU. You're choosing how much RAM you want.
| Compute | vCPU | RAM |
|---|---|---|
| Tiny | 1 | 0.5 GB |
| Small | 1 | 1 GB |
| Medium | 1 | 2 GB |
Storage
| Storage | Disk |
|---|---|
| Tiny | 5 GB |
| Small | 10 GB |
| Medium | 20 GB |
| Large | 40 GB |
What does it cost?
Billing is hourly and prepaid from your account credit - you're charged for the compute size and the storage size for as long as the pod exists (even while it's Off, storage keeps counting). For the current per-size rates, see the pricing page. More on the model in Billing.
You can change compute or storage later with a Resize. Storage only grows.
Regions
A pod runs in one Region, which you choose at creation (the API field is serverId). The list of available Regions comes from GET /open/config-options. A pod's private network has to live in the same Region as the pod.
Statuses
| Status | Meaning |
|---|---|
| Running | Up and serving traffic. |
| Stopped | Stopped on purpose (the console shows this as "Off"). Storage still counts; compute doesn't run. |
| Initializing | Being created. |
| Resizing | A compute, storage, or network change is being applied (the pod briefly restarts). |
| Restoring | A snapshot or backup is being restored onto it. |
| Cloning | Being copied into a new pod. |
| Deleting | Being torn down. |
| Failed | An operation didn't complete (a failed resize shows as ResizeFailed). Retry, or reach out to support. |
The middle rows are transient - the pod passes through them and settles back on Running or Stopped. While a pod is in one of them, a second operation on it returns 409.
Connecting
A pod can be reached three ways:
- Public host + external port. From the internet, the pod answers at its public host (the
domainNamefield). Pods in the same Region share that host - the assigned external port is the part that's yours. SSH listens on22internally but you connect on the external port (say3001); MySQL is3306internally on its own external port. Both are shown on the pod's Connection Strings tab. - Private host + internal port. Pods that share a private network reach each other by private hostname on the real internal port - no mapping. From one pod,
ssh ubuntu@other-podandmysql -h db-pod -P 3306just work. - Custom domain. Map a domain to a pod and a port, and our proxy terminates HTTPS on the public side and forwards to your app. This is how you put a web app on
80/443.
What you can do inside
It's a real Linux system. Install packages, run services, write systemd units, mount your own volumes, cron whatever you like. We don't police what runs inside your pod.
What you can't do
- Load custom kernel modules or swap the kernel.
- Hog shared host resources to the point of hurting your neighbours.
- Anything illegal or against the terms of service.