Pricing
Last updated 29 October 2026
Estimate what your databases will cost before you build: the prices, three worked examples that show which designs cost less, and what happens when the balance runs out.
Databases and streams share one price list, and the number of databases does not change it.
| Item | Price |
|---|---|
| Writes | $1.50 per million write units, which the rest of these pages call writes. A write unit is up to 10 KiB (10,240 bytes) of a commit’s compressed frame, the pages it changed as the package sends them. Every commit costs at least one unit, and a larger frame one unit per 10 KiB. Creating a database, and each open that makes a process its writer, count one unit each. Deleting a database costs nothing. |
| Storage | $0.05 per GiB-month (30 days) of what each database keeps, in compressed bytes as the package sends them: its latest snapshot, and its commits since the snapshot before it. Earlier snapshots are not counted. It is charged for the time it is kept: Tonbo measures it every five minutes, so a database kept for 7 days pays for 7 days, and data written and deleted between two measurements costs nothing. |
| Reads | Free, under fair use. |
Usage is drawn from your account’s monthly allowance of $5 first, which the Usage & billing page lists as Monthly allowance, and then from credit you buy there. When none is left, writes pause.
How much a database keeps
The process that writes a database takes a snapshot once the commits since the latest one pass the database’s size or 8 MiB, whichever is larger (see Snapshots and S3). So the commits a database keeps cover at most its last two such stretches: a database under 8 MiB keeps at most about 16 MiB of compressed commits beside its snapshot, and one that never wrote 8 MiB of commits keeps only those commits.
Worked examples
Each example builds the same thing two ways. Each price is one 30-day month at list price, with what is stored held all month, before the $5 of free usage and after it. An open that makes a process the writer counts one write, which the last example includes and the others leave out. The Rules for databases turn them into what to write.
A database per agent
1,000 agents each keep 10 MiB in a database of their own. 100 of them are busy, each committing 5,000 times a day, every commit under 10 KiB; the rest are idle this month.
| Case | Writes | Writes cost | Storage | Month | After the free $5 |
|---|---|---|---|---|---|
| All 1,000 databases | 15,000,000 | $22.50 | $0.49 | $22.99 | $17.99 |
| The 900 idle ones alone | 0 | $0.00 | $0.44 | $0.44 | $0.00 |
The idle databases add $0.44 of the $22.99: an idle database costs only what it stores, and the number of databases costs nothing. Give each agent, task or tenant its own; what you pay for is writes.
Batch a step into one transaction
100 agents each take 500 steps a day and write 20 rows a step, and each database keeps 50 MiB. The step’s rows are assumed to fit in 8 KiB of compressed pages.
| Case | Writes | Writes cost | Storage | Month | After the free $5 |
|---|---|---|---|---|---|
| One commit per row | 30,000,000 | $45.00 | $0.24 | $45.24 | $40.24 |
| One transaction per step | 1,500,000 | $2.25 | $0.24 | $2.49 | $0.00 |
The same rows cost $45.24 committed one by one and $2.49 in one transaction per step: every commit costs at least one write, however small it is.
Write what changed, not the whole state
50 agents each take 2,000 turns a day, and each database keeps 20 MiB. One design rewrites the whole conversation, stored as one value, every turn, assumed to change 80 KiB of compressed pages; the other inserts the turn as a row of 2 KiB.
| Case | Writes | Writes cost | Storage | Month | After the free $5 |
|---|---|---|---|---|---|
| Rewrite the conversation each turn | 24,000,000 | $36.00 | $0.05 | $36.05 | $31.05 |
| Insert one row each turn | 3,000,000 | $4.50 | $0.05 | $4.55 | $0.00 |
$36.05 against $4.55 for the same turns: a commit costs one write per 10 KiB of the pages it changes, so keep what changes in rows of its own.
A short-lived database per run
1,000 agent runs a day, each with a database of its own: created, opened once by its sandbox, written 200 times under 10 KiB a write, keeping at most 10 MiB, and deleted afterwards. The creation and the open count one write each, and deleting costs nothing.
| Case | Writes | Writes cost | Storage | Month | After the free $5 |
|---|---|---|---|---|---|
| Each deleted after 7 days | 6,060,000 | $9.09 | $3.42 | $12.51 | $7.51 |
| Each deleted the next day | 6,060,000 | $9.09 | $0.49 | $9.58 | $4.58 |
$12.51 with each database kept a week and $9.58 with each deleted the next day: storage is charged for the days it is kept, and the runs’ writes are the rest. Kept a week, about 7,000 databases live at once, under the account’s 10,000, and databases being deleted count until the deletion completes; never deleted, the runs fill the account in 10 days.
When the balance runs out
When your balance reaches zero, Tonbo pauses writes: it refuses them with 402 and the code PAYMENT_REQUIRED. Reads continue. Your application keeps committing on its host meanwhile:
- Commits wait on the host,
synced()waits, anddb.status().replication.conditionispayment_required. - Once 64 MiB of compressed commits wait (the
maxPendingBytesoption ofopen), writes fail withUrsulaWriteRefusedErrorand the kindbacklog_full, and commit nothing. The database stays open and readable. - Within about 15 seconds of a top-up, Tonbo takes writes again, the waiting commits reach it and
synced()resolves. - An
openwhile writes are paused cannot make its process the writer. It fails when its signal fires, after 30 seconds by default, withUrsulaUnavailableErrorand the kindpayment_required. - Creating a database answers
402.