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

# Creating a Pod

> Step-by-step guide to creating your first pod on InstaPods.

## From the Dashboard

1. Navigate to the **Dashboard** and click **Create Pod**

2. Fill in the creation form:

   * **Name**: A unique name for your pod. Must be lowercase alphanumeric with hyphens (e.g., `my-app`, `staging-api`). This becomes your subdomain.
   * **Preset**: Choose your development stack - Static, PHP, Node.js, Python, or Go
   * **Version** (optional): For PHP, Node.js, Python, and Go, pick a runtime version (e.g., Node.js 22, PHP 8.4). Defaults to the latest stable.
   * **Plan**: Select a resource tier - Launch, Build, Grow, Scale, or Turbo. Every preset starts on **Launch** (\$3/mo) unless you change it
   * **Region**: Pick where the pod runs, or leave it on the suggested one
   * **SSH Key** (optional): Paste a public SSH key for immediate access

3. Click **Create**

Your pod will be ready in 1-2 seconds. You'll be redirected to the pod detail page.

## Choosing a Region

Your pod runs in one region and stays there. Pick the one closest to the people who will use the
app - it's the difference between a fast page and a slow one, and for some workloads it's also where
your data has to live.

| Region | Slug | Location |
| - | - | - |
| Europe | `eu` | Germany and France |
| US East | `us-east` | Ashburn, Virginia |

Leave the region unset and InstaPods picks the closest one to you automatically.

The picker shows live availability, not a static list: a region that can't currently fit the plan
you selected is shown as unavailable, so you never get a capacity error after filling in the form.
Choosing a bigger plan can therefore change which regions are offered.

<Note>
  A pod can't change region on its own. If you need one somewhere else, create it there and move
  your code across - or contact support, who can migrate an existing pod between servers.
</Note>

## From the CLI

```bash theme={null}
instapods pods create my-app -p nodejs --plan build
```

### Available Flags

| Flag | Description | Default |
| - | - | - |
| `-p, --preset` | Preset slug: `static`, `php`, `nodejs`, `python`, `go` | Auto-detected |
| `-v, --version` | Runtime version (e.g., `8.4`, `22`, `3.11`) | Preset default |
| `--plan` | Plan slug: `launch`, `build`, `grow`, `scale`, `turbo` | `launch` |
| `-r, --region` | Region slug: `eu`, `us-east` | Auto-select (closest) |
| `--ssh-key` | SSH public key or path to key file | None |
| `-w, --wait` | Wait until pod is running before returning | `false` |
| `--timeout` | Max seconds to wait for pod creation | `120` |

The CLI returns immediately by default. Use `-w` to wait until the pod is fully running.

If `--preset` is omitted, the CLI auto-detects from your current directory (e.g., `package.json` → Node.js, `requirements.txt` → Python).

### Examples

```bash theme={null}
# Basic creation
instapods pods create my-site -p static

# With specific plan and region
instapods pods create api-server -p nodejs --plan scale -r us-east

# With SSH key
instapods pods create dev-env -p python --ssh-key ~/.ssh/id_ed25519.pub

# With a specific runtime version
instapods pods create my-app -p nodejs --version 22

# Wait until pod is fully running
instapods pods create my-site -p static -w
```

## From the API

```bash theme={null}
curl -X POST https://app.instapods.com/api/pods \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-app",
    "preset": "nodejs",
    "plan_slug": "build",
    "region": "us-east",
    "ssh_key": "ssh-ed25519 AAAA... user@host"
  }'
```

## What Happens During Creation

1. **Server selection** — The orchestrator picks the best server in your chosen region (or the closest region if unspecified)
2. **Container launch** — A container is created from the pre-built image for your preset
3. **Network setup** — A unique SSH port is allocated and the proxy route is configured
4. **DNS** — Your pod's subdomain is immediately available via wildcard DNS

## Pod Naming Rules

* Lowercase letters, numbers, and hyphens only
* Must start with a letter
* 3-40 characters long
* Must be unique within the platform
* The name becomes your subdomain: `{name}.{server-domain}`


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