Pricing
In force from 31 August 2026. Prices in US dollars.
What the bill is made of
We count how long each service ran and how much disk it held, out of the same log gg status already reads. The bill is that log added up — not a separate system you have to take our word for.
| What | Price | Notes |
|---|---|---|
Anything that runs, size s0.5 vCPU / 1 GB, shared | $0.014 / hour ≈ $10 / month | The default, and what you get if you say nothing. Shared: it may burst to the full 0.5 vCPU and 1 GB, and it is guaranteed 100m of CPU and 256 MiB. That is why it costs a third of m. Enough for a small API, a worker, a static site, or a database you are developing against. |
Size m1 vCPU / 2 GB, dedicated | $0.042 / hour ≈ $30 / month | Dedicated: it reserves exactly what it is promised and is the last thing moved when a machine runs short. What a server-rendered app, a JVM or a postgres a real application depends on actually wants. |
Size l2 vCPU / 4 GB, dedicated | $0.084 / hour ≈ $60 / month | Twice m, for twice the price. A rate depends on size and not on kind — a service from your Dockerfile and a postgres are the same thing to the cluster, so they cost the same at the same size. |
| A job an image that runs to completion | the same rate, for the time it ran | A job is metered at its size for the interval it runs — from the moment gg run is accepted, which includes pulling the image, to the moment the run ends — and not for existing in between. A migration that takes forty seconds at size s costs under a fiftieth of a cent. It is the same meter and the same log as anything else; what differs is that a run has an end, so the meter has one too. |
| Attached disk | $0.15 / GB-month | The volume that survives a restart — what you set in gigabytes when you attach a resource, or with --volume-size on a service. Prorated by the minute alongside the thing it belongs to. |
| Network traffic | free | In and out, both. Not an introductory allowance and not a rounding error we have not noticed yet: our own provider does not bill us for bandwidth, so this is a promise we can keep. Throughput is capped by the node, not the invoice. |
| Domain, ours or yours | free | Both gg domain add without an argument and with a name of your own are the same mechanism, and it is not billed separately. |
A whole project, in full
A web service, a worker, a Postgres resource and 10 GB of disk — three things running, one volume, all at the default size:
web (s) 730 h × $0.014 $10.22
worker (s) 730 h × $0.014 $10.22
db (s) 730 h × $0.014 $10.22
db disk 10 GB × $0.15 $1.50
traffic $0.00
domain $0.00
───────
$32.16Move the database to m — which is what a database a real application depends on wants — and it is $52.16 a month.
730 hours is what an average month works out to. The round number is ten dollars a service; the arithmetic says $10.22. We would rather show you the arithmetic than a figure you have to take on trust.
How the billing works
By the minute. Something that existed for four minutes costs you four minutes. That matters more here than on an ordinary cloud: agents run this platform, and an agent that stands a service up, checks it and tears it down inside a coffee break has no business being charged an hour for it.
What ends, stops costing. A service is billed while it exists, because it is holding a slot on a machine whether or not anybody calls it. A job is billed only while it runs. That is the same rule stated twice — you pay for the time something occupies the platform — and a job is the case where that time has a natural end.
You keep a balance, and we top it up. Usage comes off the balance as it happens. When you get to about three days from empty, we charge your card — $20, or two weeks of what you are currently running, whichever is more — and that goes on the balance. Then it happens again when you next get near the bottom.
Three days, not a dollar. The trigger is time rather than an amount, and that matters if you run more than a couple of things. A dollar is three days for one service and three hours for twenty, so a flat threshold gives the biggest accounts the least warning — which is exactly backwards. Everybody gets the same three days to fix a card.
Nothing recurs, nothing is charged up front, and what you have not spent stays yours. Refunds are covered in the Terms of service.
What is not included
- You pick CPU and RAM with
--size, from the three above. There is no arbitrary CPU/memory pair, deliberately: what you can reserve is what fits on a machine, and three sizes say that honestly where two free-text numbers would not. It is a size, not a plan — nothing else about your account changes with it. - Ten projects per account. That is a guard against somebody else’s runaway loop, not a tier you can buy your way out of.
- One replica per service, and the rates above say so: $10 buys a single running copy, not redundancy. A node failure or an eviction is a restart, not a failover to a second copy you were quietly paying for. A service with a volume also restarts on every deploy — a disk can be attached in one place only, so the old container has to stop before the new one starts.
- Resources are unmanaged, except that postgres is dumped nightly and kept fourteen days. No point-in-time recovery, no replication. What that means and why is on the refusals page.
- Anyone you make an editor can run up the owner’s bill — see the Terms of service.
- If the balance reaches zero, running services stop. Nothing is deleted then — your data and your volumes stay where they are, and everything starts again when there is money on the account. Volumes on an account left at zero for 30 days may be deleted, after an email; see the Terms of service.
$5 to start, and no free tier
Every new account starts with $5 on the house — about two weeks of one service at size s, and proportionally less at m or l. It is there because the first thing to try gagarin is usually an agent, and an agent that has to stop and ask its human for a card before it can deploy anything is an agent that deploys nothing.
Nobody asks you for a card until that $5 is nearly gone, and nothing is charged while there is a balance to draw on. If you do put one on the account, it is charged when the balance runs low and not on any schedule — or whenever you press the button, if you would rather not wait for that.
After that the meter runs from your first deployed service. There is no free tier and there is not going to be one. A meter that always runs is the honest mechanism; a free tier is a second one sitting next to it. We are saying so out loud instead of leaving you to infer it.
No plans
No Hobby, no Pro, no Team, no charge per seat. Adding somebody to a project costs nothing, because what costs money is a container that runs, and a colleague reading gg status is not one.