Browse resources

Run your instance

Usage and costs

What knotel costs on Cloudflare, how it's metered, and where the limits are.

knotel runs on your Cloudflare bill, with no per-seat or per-event pricing of its own. For a small team it usually costs only the Workers Paid plan.

What Cloudflare charges

The Workers Paid plan is $5/month per account and includes monthly amounts shared by all your Workers. Above them:

ProductItemIncluded per monthAbove that
WorkersRequests10M$0.3 per million
WorkersCPU time30M ms$0.02 per million ms
PipelinesReceiving spansUnlimitedFree
PipelinesWriting spans to Iceberg50 GB$0.06 per GB
R2 SQLData scanned10 GB$0.0025 per GB, minimum 10 MB per query
R2Storage10 GB$0.015 per GB-month
D1Rows read25B$0.001 per million
D1Rows written50M$1 per million
D1Storage5 GB$0.75 per GB-month
KVReads10M$0.5 per million
KVWrites and deletes1M each$5 per million

Prices were checked on 2026-09-16. Cloudflare's pricing pages are the source of truth.

The Usage page

knotel meters itself as it runs and shows the month on the Usage page: Worker requests, spans ingested and filtered, data written to the span store, R2 SQL queries, D1 rows read and written (from D1's own counters, including index updates), KV operations and hot-cache size, priced against the allowances above, with a projection to month end and a breakdown per project.

What it can't see
CPU time isn't measurable from inside a Worker. Two lines are estimates: Parquet compression makes the real Pipelines figure smaller than the bytes received, and R2 SQL is billed on data scanned, which its API doesn't report back, so each query is counted at its 10 MB minimum. Your other Workers also share the same allowances.

A worked estimate

For 200,000 spans a month:

  • Requests: the SDKs batch spans (up to 50 per request from browsers, one request per Worker invocation), so ingest is well under 200,000 requests, against 10 million included.
  • Span storage: roughly 0.4 GB of JSON received, which compresses further as Parquet: inside the 50 GB Pipelines allowance and the 10 GB R2 free tier for the first months.
  • R2 SQL: a dashboard load beyond the hot window is a handful of queries; thousands of them a month still sit inside the 10 GB scanned allowance.
  • D1: only the hot window, so about 0.1 GB and a couple of million rows written a month, against 5 GB and 50 million.

Total: about $5 a month. Costs grow with retained history (R2 storage) and with how much you query it (R2 SQL), both of which are cheap per unit.

Retention is the cost dial

Short retention is the cheapest change you can make
Every line in this page that grows without bound — Pipelines GB written, R2 GB-months stored, R2 SQL GB scanned — is a function of how much history you keep. A project set to 1 day isn't just billed less for those three: it stops touching them at all.

The reason is the rule in per-project retention: spans are written to the long-term store only for a project that keeps more than HOT_WINDOW_DAYS (default 7). Below that line D1 already holds everything the project will ever be asked for, so streaming a second copy to R2 to keep for ever would be paying to store data you've said you don't want. Those projects are never streamed.

So a project kept at a day or a week costs, on the metered lines:

LineKept 1 dayKept 90 days
Pipelines, written to IcebergNothing — never streamed$0.06 per GB past 50 GB
R2 storageNothing — nothing is written$0.015 per GB-month, and it accumulates
R2 SQL scannedNothing — every query lands in D1$0.0025 per GB past 10 GB
D1 storage1/90th of the rows$0.75 per GB-month past 5 GB

The catch is that nothing is free: D1 prunes each project to its window nightly, and deleting a row is billed like writing one. A short window pays that delete every night instead of paying R2 to hold the row — much the better trade at any real volume, but it is why a short window is a choice rather than the default. Turning retention down also only stops future writes: history already in R2 stays, because R2 SQL has no DELETE.

The usual shape is a mixed instance — staging, internal tools and noisy side services at 1 day to 7 days, and the one or two production services you actually investigate at 30 days or more. That keeps the R2 bill proportional to the traces worth keeping instead of to everything you emit. Filters are the other half of the same idea: retention shortens what you keep, filters stop it being ingested in the first place.

Scaling limits

  • The Iceberg table has no fixed size limit; R2 storage is billed per GB-month.
  • The D1 hot cache is capped at 10 GB. If a busy instance approaches it, lower HOT_WINDOW_DAYS, shorten one project's retention, or filter noisy spans.
  • A Pipelines stream accepts up to 5 MB/s and 5 MB per request. Beyond that, ask Cloudflare to raise the limit.