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:
| Product | Item | Included per month | Above that |
|---|---|---|---|
| Workers | Requests | 10M | $0.3 per million |
| Workers | CPU time | 30M ms | $0.02 per million ms |
| Pipelines | Receiving spans | Unlimited | Free |
| Pipelines | Writing spans to Iceberg | 50 GB | $0.06 per GB |
| R2 SQL | Data scanned | 10 GB | $0.0025 per GB, minimum 10 MB per query |
| R2 | Storage | 10 GB | $0.015 per GB-month |
| D1 | Rows read | 25B | $0.001 per million |
| D1 | Rows written | 50M | $1 per million |
| D1 | Storage | 5 GB | $0.75 per GB-month |
| KV | Reads | 10M | $0.5 per million |
| KV | Writes and deletes | 1M 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.
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
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:
| Line | Kept 1 day | Kept 90 days |
|---|---|---|
| Pipelines, written to Iceberg | Nothing — never streamed | $0.06 per GB past 50 GB |
| R2 storage | Nothing — nothing is written | $0.015 per GB-month, and it accumulates |
| R2 SQL scanned | Nothing — every query lands in D1 | $0.0025 per GB past 10 GB |
| D1 storage | 1/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.