# Deploy a target

`deploy` creates a target, starts it and attaches the log. A target is a box: a Postgres, a Redis, a game server or a container, all from the same catalogue with the same flags. The shape of the command is already final even though the command cannot complete yet, so scripts written today will work when a region opens.

> This command exits non-zero with `no funded region` today. That is the real state, not a bug to work around.

```
kraftify deploy --kind postgres --name app-db --region eu
```

```
kraftify deploy --kind minecraft --name survival-1 --region eu
```

## Kinds and versions

`--kind` takes `postgres`, `redis`, `minecraft` or `container`, and `--kind container --image your/image:tag` for anything else. Version defaults to the current stable release for the kind, and `--version` pins it explicitly so a target does not change under you after a restart.

```
kraftify deploy --kind postgres --version 17
```

## Size

`--size` takes `small`, `medium` or `large`. What the size means depends on the kind: databases are sized by disk, game servers by cores and memory. The rates are published per target per month and readable by the agent before it acts.

| Size | Compute | Disk | Monthly |
| --- | --- | --- | --- |
| small | 2 cores, 4 GB | 10 GB | USD 7 |
| medium | 4 cores, 8 GB | 40 GB | USD 14 |
| large | 8 cores, 16 GB | 160 GB | USD 28 |

## The ceiling will refuse you

A deploy that would take the account past its monthly ceiling is refused, not queued. The refusal names the number that stopped it.

```
kraftify ceiling
kraftify deploy --kind postgres --size large --region eu
```

> This is a hard stop, not a warning, and it is not advisory to the agent. Nothing in the CLI or the MCP surface can raise it. See Billing.

## Detach and reattach

The log is a stream, not a stored file. `Ctrl+C` detaches and leaves the target running, which is the point: you can close the terminal and come back.

```
kraftify logs <id>
kraftify stop <id>
kraftify start <id>
```
