What it costs to run

The bill is yours, and this page is about which meters each capability turns.

Cloudflare’s own pricing pages are the authority. When this page and Cloudflare disagree, Cloudflare is right. What is here is how the kit’s shapes map onto their meters, and which numbers you can actually change.

The honest summary

What a waiting queue costs is the one line item worth modeling separately, Durable Objects is why, and is Pithy for you? is the decision this feeds.

For most apps, single-digit dollars a month. Workers, D1 and KV at ordinary application volumes are cheap, and several capabilities cost nothing at all until somebody uses them.

Two things scale in ways worth understanding before you ship: a waiting matchmaking queue, and AI inference. Both are covered below.

What costs nothing until it is used

auth · secrets · audit · turnstile · i18n · leaderboard · rating · ledger

All of them are rows in a database you already have, plus requests you were already serving. No standing charge, no idle cost.

i18n and turnstile have no durable storage at all.

What has a standing cost

A capability that owns Workflows ships a deployed host Worker. Email, media, storage’s sweep, payments’ reconciliation, the closed-test daily pass. Each is a Worker sitting there, and a scheduled one wakes on its cadence whether or not there is work.

A daily pass is a daily cost, and it is a small one. An every-minute scheduler is sixty times that and still small.

R2 storage bills for what is stored, which is the one meter that only goes up unless something removes things.

Two platform facts every Durable Object inherits

WebSocket messages bill at a 20-to-1 ratio — a message is a fifth of a request rather than a request.

Duration bills the full memory allocation, and only while an object is awake. That second clause is what the whole presence design rests on.

The presence socket is nearly free, and here is why

Presence holds every online player’s connection through the Hibernation API. A hibernating object bills no duration — so a thousand players sitting in a menu with the app open cost nothing to hold. You pay for the events that actually flow, discounted.

That is only true because of what the object refuses to do. It keeps no in-memory connection registry, stashes identity through the platform’s own attachment mechanism rather than in a field, and never sets a timer.

A single interval anywhere in it would pin it in memory and bill duration continuously — for every player online, forever.

Worth knowing if you write your own: hibernation is not a flag, it is a discipline.

The queue’s sweep is the dial

The open queue is one Durable Object per game, and it is the only thing here that wakes on its own.

While anybody is waiting, an alarm is armed. It wakes, re-attempts pairing, widens every waiting player’s skill band, and re-arms.

Sweep intervalWakes per waiting minute, per gameWhat it buys
1s60Bands widen almost continuously
5s (default)12A player waits at most five seconds past the moment their band grew wide enough
15s4A fifth of the default’s wakes. Noticeable on a thin queue

An empty queue clears its alarm. The last player to leave deletes it — so a game nobody is queueing for wakes zero times and bills nothing, whatever the interval says.

That is why it is a per-waiting-minute rate rather than a standing charge.

Two things do not change with it. A match forms the moment an opponent is already waiting, without waiting for a sweep — the sweep exists to widen bands rather than to pair. And storage is read fresh per handler by design: holding state in memory to avoid a read would cost the hibernation that makes the object cheap.

One object per game. Ten games are ten coordinators, each idle one billing nothing — and that is also the sharding: a game expecting more throughput than one object carries wants splitting into region- or bracket-keyed games rather than a longer sweep.

AI runs on your binding, on your bill

Media’s alt text, transcription and text extraction. Support’s classification.

That is the point — your users’ files and mail never leave your infrastructure to be processed — and it is also the meter most likely to surprise you, because inference is priced per unit of work rather than per request.

All of it is opt-in. Enrichment is off unless you ask for it, and nothing costs anything until a file of that type arrives.

Vectorize is the one with no free local path

Cloudflare ships no local emulation, so a dev search reaches a real remote index and costs a real query.

Embeddings are inference. Re-embedding a corpus after a model change is a bulk operation with a bulk cost, which is worth knowing before you change the model casually.

The meters, by capability

CapabilityTurns
auth, audit, ledger, rating, leaderboardD1 reads and writes
secretsD1, plus a manager Worker per environment
emailD1, a host Worker, an every-minute scheduler, and outbound mail
storage, mediaR2 storage and operations, plus a host Worker; media adds AI when enabled
vectorVectorize, plus AI for embeddings. Remote even in dev
multiplayerDurable Object requests and duration
matchmakingDurable Objects — the sweep is the dial — plus KV for room codes
paymentsD1, plus a nightly reconciliation pass
supportD1, R2 for attachments, and AI for classification
testersD1, plus a daily pass

Keeping it down

Sample your logs under heavy traffic. The rate is a config key.

Set a storage quota before somebody discovers your upload endpoint. Without a considered value, the first person to find it decides how much R2 you buy.

Turn enrichment on per type, not wholesale.

Read the queue costs page before shipping a game with an open queue.

Let the sweeps do their job. Storage’s daily reconciliation and email’s suppression handling exist partly to stop orphans accumulating.

ESC