Cloudflare Workers KV
- Free allowance
- 100,000 reads per day; 1,000 writes per day; 1 GB per account; 1,000 namespaces
- Verdict
- caveatusable, with a named limit or an unprobed read path
- Cost
- free tier
- Identity
- emailno card, no phone
- Binding limit
- request-rate1,000 writes per day to different keys; 1 write per second to the same key
- Evidence
- documented1 source; a first-party page was read and the sentence quoted
- Freshness
- stale on 2026-11-23checked 2026-10-23 (live); stale on 2026-11-23
| Free tier | 100,000 reads per day; 1,000 writes per day; 1 GB per account; 1,000 namespaces unit requests; metered on request-count |
|---|---|
| Price | none stated |
| Limits |
100,000 reads per day are unlimited on the paid plan; the minimum cacheTtl is 30 seconds |
| Identity | email a Cloudflare account |
| Egress | reads are counted, not metered by byte; no egress charge on any plan |
| Per-object cap | 25 MiB per value; 512 bytes per key |
| Retention | no expiry on a stored key unless the write sets one; the free tier does not delete |
| Interface | rest, cli a REST API and a Worker binding; access through wrangler |
| Tooling | wrangler kv; the Cloudflare API; a Worker binding in code |
| Composes with | a read cache in front of a free database: 100,000 reads a day is 100 times the write budget, which is the ratio that makes it a cache and not a store |
| Reliability | no reliability event recorded |
| Notes | The asymmetry is the finding: reads are plentiful and writes are not, by two orders of magnitude. Any design that treats KV as the store hits 1,000 writes a day and stops. |
| Evidence note | documented the limits page was read; no namespace was created. |
| Parsed numbers |
|
Evidence 1
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | developers.cloudflare.com/kv/platform/limits/ | Free column: 100,000 reads/day, 1,000 writes/day to different keys, 1 write/second to the same key, 1,000 namespaces, 1 GB/account, 1 GB/namespace, 512-byte keys, 25 MiB values, 30-second minimum cacheTtl |
Unknown values 1
$.reliability_notenothing of this kind was observed