Hosting
The whole stack in the EU, part by part.
Agents, services, static sites and managed databases share one region, one egress policy, one trace and one bill. This page is the detail behind that sentence.
Agents
On a schedule, on a webhook, or always on.
Every model call and tool call is recorded by the gateway, so the step is there whether or not your code logged it.
Turn checkpoints on and a run that failed halfway resumes from its last one instead of starting at step one. Every plan has a wall-clock ceiling the executor enforces and a reaper that fails orphaned runs, so a stuck agent never bills forever.
keel run invoice-reconciler --followIncluded in every plan
Services and APIs
Always-on containers with public HTTPS.
A new revision is rolled out one replica at a time, and a replica that fails its health check is replaced while the others keep serving.
A Node, Python or Go API, a Telegram bot, a worker. Keel keeps it up, restarts a crashed replica with exponential backoff, and holds the whole service after five consecutive crashes instead of hammering it.
keel deployAgents and bots 49 EUR, app services 19 EUR per replica-month
Static sites
Your frontend, served from Frankfurt on your own domain.
Every deployment is immutable, so rolling back switches a pointer and the previous bytes come back exactly as they were.
Upload a build directory and it is live in seconds. Hashed assets are served immutable, HTML is revalidated, text is compressed, and certificates are issued and renewed for you.
keel sites deploy ./distIncluded on Business and Enterprise
Databases
Managed Postgres and Valkey, one command each.
Neither has a public port. They answer only on the internal agent network, which is why database traffic never touches the egress gateway.
Creating one writes the connection URL into your organization's secrets, and the next deploy injects it as an environment variable. Backups run nightly and a deleted store is kept for seven days before it is purged.
keel db create mainPostgres 19 EUR, Valkey 9 EUR per month
A second way to author an agent is being built. The Agent Builder will let you describe one in the dashboard instead of shipping a repository or an image, in the same region, behind the same allowlist, with the same trace. It is not available yet and it has no date; what it will do is on the home page.
What the three commands do
keel init, keel deploy, keel domains add.
The same three for an agent, an API or a site. What follows is what the platform does after you press enter.
keel initDescribe the app
Pick a template or let Keel read the project. It writes a keel.yaml naming the app, its resources, its secrets and the hosts it may talk to.
keel deployBuild and ship
The image is built in Frankfurt, a revision is created, and the service answers on its platform hostname with egress locked to the allowlist. A project without a Dockerfile gets one generated for the build.
keel domains add api.example.comPut it on your domain
Create the TXT and CNAME records the command prints. The certificate is issued on the first request and renewed for you, and traffic moves over with no restart.
And this is a rollout, in order.
The build runs in Frankfurt
Your Dockerfile is used as it is. A project without one gets a multi-stage Dockerfile rendered from the runtime that was detected, and keel deploy --print-dockerfile shows you that file before anything is built.
A revision freezes the whole shape
The image, the CPU and memory, the egress hosts and the secrets the app may read are frozen together and never edited. Changing any of them creates the next revision, so the thing that ran last night is still on record exactly as it ran.
One replica at a time
For a service, one replica of the new revision starts first. Only once it reports ready is the old replica at that index drained and stopped, and only then does the next index start.
Ready means answerable
A replica counts as ready when its health check passes and, for a service with a hostname, its tunnel is connected, so the router never hands a request to a replica that cannot answer it yet.
Draining takes up to 30 seconds
A replica on its way out stops receiving new requests and is given up to thirty seconds to finish the ones in flight. If they finish sooner, it stops sooner.
A bad revision does not take the service down
A new replica that never becomes ready inside its window is stopped, the old replicas keep serving, and the rollout is not attempted again until you deploy a new revision or restart the service.
The numbers
Every limit, written down.
These are the ceilings the platform actually enforces, not guidance. A request that would cross one is refused with the limit named in the error.
| Limit | Starter | Business | Enterprise |
|---|---|---|---|
| Agents | 3 | 15 | Unlimited |
| Runs included per month | 5,000 | 50,000 | 250,000 |
| Run-minutes included per month | 10,000 | 150,000 | 750,000 |
| Longest single run | 15 minutes | 2 hours | 24 hours |
| Runs at the same time | 2 | 10 | 50 |
| Always-on services | None | 15 | Unlimited |
| Replicas per service | 1 | 3 | 10 |
| CPU and memory per run | 0.5 vCPU, 1 GB | 2 vCPU, 8 GB | 4 vCPU, 30 GB |
| Managed data stores | None | 10, 10 GB each | Unlimited, 50 GB each |
| Static sites | None | 10 | Unlimited |
| Custom domains | None | 10 | Unlimited |
| Persistent workspace per agent | 1 GB | 5 GB | 50 GB |
| Trace retention | 7 days | 30 days | 90 days |
Agents
- Starter
- 3
- Business
- 15
- Enterprise
- Unlimited
Runs included per month
- Starter
- 5,000
- Business
- 50,000
- Enterprise
- 250,000
Run-minutes included per month
- Starter
- 10,000
- Business
- 150,000
- Enterprise
- 750,000
Longest single run
- Starter
- 15 minutes
- Business
- 2 hours
- Enterprise
- 24 hours
Runs at the same time
- Starter
- 2
- Business
- 10
- Enterprise
- 50
Always-on services
- Starter
- None
- Business
- 15
- Enterprise
- Unlimited
Replicas per service
- Starter
- 1
- Business
- 3
- Enterprise
- 10
CPU and memory per run
- Starter
- 0.5 vCPU, 1 GB
- Business
- 2 vCPU, 8 GB
- Enterprise
- 4 vCPU, 30 GB
Managed data stores
- Starter
- None
- Business
- 10, 10 GB each
- Enterprise
- Unlimited, 50 GB each
Static sites
- Starter
- None
- Business
- 10
- Enterprise
- Unlimited
Custom domains
- Starter
- None
- Business
- 10
- Enterprise
- Unlimited
Persistent workspace per agent
- Starter
- 1 GB
- Business
- 5 GB
- Enterprise
- 50 GB
Trace retention
- Starter
- 7 days
- Business
- 30 days
- Enterprise
- 90 days
Container logs are searchable for seven days on every plan, and a site deployment may be up to 250 MB across 10,000 files, also on every plan. The prices that sit next to these limits are on the pricing section.
Against a generic host
Where it differs, and where it does not.
Deploys, logs and a hostname work the way you already expect. The four rows below are the parts a generic host leaves to you.
| Criterion | Generic host | Keel |
|---|---|---|
| Residency | A region picker. Logs, backups and support tooling often live elsewhere. | One region, eu-central-1, for compute, data, logs and traces. Enforced by policy, not by a checkbox. |
| Egress control | Open internet by default. Outbound allowlists are an enterprise add-on or a firewall you run yourself. | Deny by default on every plan. Hosts are declared per app and enforced at the network layer. |
| Traces | stdout and metrics. Model and tool calls need your own instrumentation. | Every model call and tool call is a step with its payload, for agents and services alike. |
| Pricing | Per vCPU-second, per GB of egress, per seat, plus a premium for the compliance tier. | Agents and bots 49 EUR per replica-month, app services 19 EUR per replica-month, Postgres 19, Valkey 9, sites and custom domains included on Business and Enterprise. No egress fees. |
Residency
- Generic host
- A region picker. Logs, backups and support tooling often live elsewhere.
- Keel
- One region, eu-central-1, for compute, data, logs and traces. Enforced by policy, not by a checkbox.
Egress control
- Generic host
- Open internet by default. Outbound allowlists are an enterprise add-on or a firewall you run yourself.
- Keel
- Deny by default on every plan. Hosts are declared per app and enforced at the network layer.
Traces
- Generic host
- stdout and metrics. Model and tool calls need your own instrumentation.
- Keel
- Every model call and tool call is a step with its payload, for agents and services alike.
Pricing
- Generic host
- Per vCPU-second, per GB of egress, per seat, plus a premium for the compliance tier.
- Keel
- Agents and bots 49 EUR per replica-month, app services 19 EUR per replica-month, Postgres 19, Valkey 9, sites and custom domains included on Business and Enterprise. No egress fees.