Github|...

Plans & billing

Pay as you go on Cloudflare or a VM plan, what is included, the spend cap, and how to see the month so far.

Every project is on one plan. Pay as you go is the default: the project runs on Cloudflare (Workers and a Durable Object for sync) with a database of its own, and costs a monthly base fee that already includes some usage. Starter and Pro run the project on VMs for a fixed price.

# Pay as you go (the default): runs on Cloudflare
spky project create --slug my-app

# A VM plan instead
spky project create --slug my-app --plan pro

The plan is chosen when the project is created and paid for in a Stripe checkout before the first deploy. There is no free plan and no free trial. A project cannot move between Cloudflare and VM hosting later: create a new project instead.

Pay as you go

$10 a month per project, billed monthly. That includes:

Included every monthBeyond it
A dedicated SurrealDB, size S (1 GiB RAM), daily backupssize M (2 GiB) +$8 a month, L (4 GiB) +$20 a month
5 million requests (web, sync and backends)$0.50 per million
300 sync hours (the time the sync engine is awake, by the minute)$0.01 per hour
10 million CPU-ms (the project’s Worker and its sync engine)$0.05 per million CPU-ms
5 GB database storage$0.10 per GB-month
5 GB file storage$0.05 per GB-month

The sync engine stays awake for 5 minutes after the last request while clients hold live queries, so sync hours follow the hours your app has people on it. A project with someone connected around the clock uses about 720 hours a month: the 300 included plus $4.20.

Usage beyond the included amounts is added to the next month’s invoice, so you pay once a month. A size add-on is charged for the share of the month the database had that size.

Database size

The database size is set in sp00ky.yml and applied on the next deploy:

sp00ky.yml
surrealdb:
  size: M   # S (default), M or L

A project with its own database (surrealdb.endpoint) has no managed database and no size. See config reference.

SurrealDB version

A new pay-as-you-go database runs SurrealDB 4 (v4.0.0-beta.1, a beta) on SurrealKV, its only storage engine. A database created before that keeps its SurrealDB 3 until you upgrade it. spky db upgrade does that with a few seconds of refused writes and a way back that loses nothing, and is what to use on a database with data in it. The older way takes the database down for the whole conversion:

spky deploy --upgrade

The deploy first takes a backup (listed by spky backup list like any other), then starts SurrealDB 4 on the same data, which converts it in place. If the backup fails, the database is left as it was. The conversion is one way: the database never goes back to SurrealDB 3, not even when a deployment is rolled back. If something breaks, restore the backup taken before the upgrade; it restores into SurrealDB 4, like any backup from SurrealDB 3. Signed-in users stay signed in. The move does not depend on version, which only governs the SSP and Scheduler.

spky dev keeps running SurrealDB 3 locally, because the local scheduler and SSP use the SurrealDB Rust SDK 3, which refuses a version 4 server. Two differences can show between the two: SurrealDB 4 answers an error, not an empty result, for a table that was never defined, and rows come back in no defined order unless the query has ORDER BY, even with LIMIT or START.

The month so far

Run this in the project’s directory:

spky billing usage
  Pay as you go, my-app, 2026-10 so far

                                           USED   INCLUDED      COST
  Requests              2.10 million requests          5     $0.00
  Sync hours                       412.50 hours        300     $1.13
  CPU time                3.40 million CPU-ms         10     $0.00
  Database storage                1.20 GB-months         5     $0.00
  File storage                    0.40 GB-months         5     $0.00
  Base fee                                                    $10.00

  Total so far $11.13 of a $25.00 spend cap (change it: spky billing cap <dollars>).

Usage is read from Cloudflare every 10 minutes and arrives a few minutes late, so the last half hour can still grow. The quantities are the month so far; the included amounts are always a full month’s, also for a project created mid-month. In a VM project, or outside a project directory, spky billing usage lists the tenant’s metered usage instead.

Spend cap

Every pay-as-you-go project has a monthly spend cap on its whole bill, base fee included. It is $25 until you set another:

# At most $50 a month, base fee included
spky billing cap 50

# Nothing beyond the included amounts
spky billing cap 10

The cap is between $10 and $100,000. The base fee alone never counts against it, so a cap of $10 means “nothing beyond the included amounts”.

The project’s owner gets an email at 50%, 80% and 100% of the cap. At the cap the project stops serving:

  • its web hostname answers 402 Payment Required with a page that names the cap, and its sync hostname ({slug}.db.…, the one the client connects to) the same as JSON;
  • its database is stopped. Its data is kept;
  • deploys are refused with spend_cap_reached, and scheduled backups pause.

It serves again within about 10 minutes of raising the cap above the month’s bill, or when the next month starts.

Note

The cap is checked every 10 minutes, so a sudden burst can pass it by up to ten minutes of usage before the project stops. What was used is billed.

Warning

A stopped project is down for everyone, including signed-in users. If your app must not go dark, set a cap well above your usual month and watch the 80% email.

Starter and Pro

Starter takes no new projects for now, so a new VM project starts on Pro. A project already on Starter keeps it.

A Pro project runs on two VMs of its own, a project host and a database VM, and the infrastructure is included in the Pro price. Your own VMs has the machine types and how the project host is upgraded. The volumes of a destroyed project are kept for 7 days.

The VM plans have a fixed monthly or yearly price, with add-ons on the pricing page. They have no spend cap; their metered extras (bucket storage, build minutes, seats) are on the same monthly invoice.

# Invoices, card and cancellation (opens the Stripe portal)
spky billing

# Change a VM project's plan or billing interval
spky billing plan

Next steps