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 | Service port | Good for |
|---|---|---|---|---|---|
| Ubuntu | 22.04, 24.04 | instance | ubuntu | 22 | Anything. Web apps, scripts, bots, dev boxes. Gets the browser Shell and SSH. |
| MySQL | 5.7, 8.0 | database | root | 3306 | 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. A pod accrues two charges - one for its compute size, one for its storage size - from the moment it is created until the moment it is deleted. Stopping it does not pause either one. 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, in either direction. A resize stops and starts the pod, and shrinking a disk needs the data to fit in the new size, so check what you are using before you pick a smaller one.
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"). Nothing runs, and both charges keep accruing - only deleting the pod stops them. |
| Initializing | Being created. |
| Resizing | A compute, storage, or network change is being applied (the pod stops and starts again). |
| 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); the console shows these in red. 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 and tells you to wait, rather than queueing behind the first.
Connecting
A pod can be reached three ways. The Connection Strings tab has the first two assembled and ready to copy; the raw parts (public host, ports, username) live in the Access card on Overview, and again under Security & Public Access on Networking.
bash
# Public: the shared Region host, on the external port that is yours
ssh -p 3001 ubuntu@your-pod.microapps.io
mysql -P 3308 -u root -h your-db.microapps.io -p
# Private: the pod's own generated hostname, on the real service port
ssh ubuntu@i-6a4d5b83b7006ccae6391810
mysql -P 3306 -u root -h d-70a1e4c6b92f3d8a5e1b7c42 -p- Public host + external port. Every pod in a Region shares the same public host (the
domainNamefield); the external port assigned to yours is the part that is actually yours. The service still listens on its real port inside the pod. - Private host + internal port. Pods sharing a private network reach each other by private hostname on the real service port - no mapping, no external ports. That hostname is generated (
i-...for an instance,d-...for a database), not the name you gave the pod. - Custom domain. Map a domain to a pod and a port, and our proxy terminates HTTPS and forwards to your app. This is how you put a web app on
80/443. Database pods cannot take a domain.
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.
Two things to know about the in-browser Shell before you use it as your main way in: it drops you in as root, not as the pod's login user, so anything you create there is owned by root; and its terminal is a fixed 120 by 32 that ignores your browser window, which full-screen programs notice. SSH has neither quirk.
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.