{"_self":{"principle":"Self-explaining payload — no external context required. This _self block describes what you are reading and where to look next.","widget":"article_topology","feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","contains":"claims, sources, anecdotes, question_graph slice","slug":"cloudflare-os-kv","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-kv/topology"},"how_to_use":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","write":null,"imessage":null,"router_tag":null,"proof_chain":[{"step":1,"claim":"Articles are voxel graphs of tiered claims, not prose blobs.","verify":"https://miscsubjects.com/api/articles/constitution"},{"step":2,"claim":"Claims link to hash-chained sources via source_ids.","verify":"https://miscsubjects.com/api/articles/cloudflare-os-kv/sources"},{"step":3,"claim":"Ask reads topology; ingest/claim append to ledger.","verify":"https://miscsubjects.com/api/protocol"},{"step":4,"claim":"Models queue growth: populate → collaborate → repair → reflex.","verify":"https://miscsubjects.com/api/protocol/grow"},{"step":5,"claim":"Graph proves its own shape (reflex) and $/claim (yield).","verify":"https://miscsubjects.com/graph.html?layer=reflex"},{"step":6,"claim":"Full feature index + _explain on every API response.","verify":"https://miscsubjects.com/api/articles/system-map"}],"related_features":[{"id":"ask","name":"Ask protocol","what":"Answer only from topology; creates question_node with gaps and ingest_hint.","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-kv/prompts","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"graph_topology","name":"Cross-article graph","what":"Merged claims/sources across condition+stack slugs for one question.","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-kv/graph-topology?question=..."}},{"id":"question_graph","name":"Question graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output).","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-kv/question-graph","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"voxels","name":"Voxel graph","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance.","urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-kv/voxels","write":"https://miscsubjects.com/api/protocol/claim"}}],"system_map":"https://miscsubjects.com/api/articles/system-map","system_map_markdown":"https://miscsubjects.com/api/articles/system-map?format=markdown","not_medical_advice":true},"_explain":{"feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","why":"Every feature is auditable collective intelligence","how":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","model":null,"verifies":null,"urls":{"read":"https://miscsubjects.com/api/articles/cloudflare-os-kv/topology"},"imessage":null,"router":null,"related":[{"id":"ask","what":"Answer only from topology; creates question_node with gaps and ingest_hint."},{"id":"graph_topology","what":"Merged claims/sources across condition+stack slugs for one question."},{"id":"question_graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output)."},{"id":"voxels","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance."}],"not_medical_advice":true},"slug":"cloudflare-os-kv","title":"Workers KV makes reads fast by making writes slow and consistency optional","register":"essay","tags":["cloudflare","architecture","kv","cloudflare-os","workers-kv","cache","eventual-consistency","durable-objects","pricing"],"updated_at":"2026-07-26T05:49:25.362Z","body_excerpt":"Workers KV is a key-value store with one central copy of your data and a cache of that copy in every Cloudflare location that has recently asked for it. Reads from a location that already holds the key are the fastest storage read on the platform. Writes go to the centre and take their time getting everywhere else. Every decision on this page follows from that one asymmetry.\n\nThe short answer to \"should this state live in KV\": if losing sixty seconds of freshness in another continent is survivable, yes. If two requests might write the same key at the same time and the result has to be correct, no.\n\n## Evidence status\n\n**Observed** marks first-party measurements or runtime receipts from the named environment.\n**Derived** marks arithmetic calculated from cited inputs. **Specified** marks vendor or standards\ndocumentation. **Implemented** and **deployed** name code and live-state evidence, respectively.\n**Reproduced** means the stated procedure was rerun. **Externally attested** marks operator reports;\nthose reports show that an experience occurred, not that it is universal.\n\n## Cloudflare's own Workers lead calls the database use a misuse\n\nKenton Varda, who leads the Workers team, answered a developer who had adopted KV as their datastore:\n\n> KV is not a distributed database and is really not intended as a database alternative at all. It's more meant for distributing bits of config globally. Cost aside, writes are way too slow for database-ish use\n\nHe pointed at Durable Object SQLite storage and at Hyperdrive instead. Take the sentence literally: **bits of config**. Flags, routing tables, rendered snapshots, allow-lists, prompt blocks. Not carts, not counters, not sessions that mutate, not anything two writers touch.\n\n[[widget:0]]\n\n## Eventual consistency, in the exact words of the reference\n\nThe Workers Binding API reference states the write behaviour without softening it:\n\n> Due to the eventually consistent nature of KV, concurrent writes to the same key can end up overwriting one another.\n\nand\n\n> Writes are immediately visible to other requests in the same global network location, but can take up to 60 seconds (or the value of the `cacheTtl` parameter of the `get()` or `getWithMetadata()` methods) to be visible in other parts of the world.\n\nThe read reference is equally blunt: `get()` and `getWithMetadata()` \"may return stale values\". The concepts page adds the trap most people miss — **a miss is cached too**:\n\n> Negative lookups indicating that the key does not exist are also cached, so the same delay exists noticing a value is created as when a value is changed.\n\nSo a location that asked for `flag:new_checkout` before you created it will keep answering `null` for up to sixty seconds after the key exists. Nothing retries on your behalf.\n\n### What a reader in another region actually sees after a write\n\n| Moment after the write | Same location as the writer | A location that has never read the key | A location that read the key (or its absence) recently |\n| --- | --- | --- | --- |\n| 0–1 s | New value, usually | New value — nothing cached to serve instead | Old value, or `null` |\n| 1–60 s | New value | New value | Old value, or `null`, until the cached copy times out |\n| After 60 s | New value | New value | New value |\n| With `cacheTtl: 3600` set on the read | New value | New value | Old value for up to an hour |\n\n\"Usually\" is the documentation's word, not a hedge added here: *\"At the Cloudflare global network location at which changes are made, these changes are usually immediately visible. However, this is not guaranteed and therefore it is not advised to rely on this behaviour.\"* There is no read-after-write guarantee anywhere in KV, including at the writing location.\n\n### The safety rule, applied to real states\n\n| State | Safe in KV | Why |\n| --- | --- | --- |\n| Rendered page snapshot | Yes | A stale page is a slightly old page. The next render replaces it. |\n| Feature flag, kill switch | Yes | Rollout is a minute, not a mi","ranking":"safety-first (interaction_risk/limitations), then quote-gated effective_weight","claims":[{"id":"c12","text":"An operator uses KV for replicated project flags while keeping everything else in D1.","tier":"anecdotal","section":"The topology teams settle on: authority elsewhere, KV as the replicated read copy","interaction_risk":false,"status":"active","source_ids":["p6"],"why_material":"It is a positive report aligned with KV's consistency model.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c13","text":"Another operator describes the latency tradeoff between eventual KV reads and waiting for an external authoritative database.","tier":"anecdotal","section":"The topology teams settle on: authority elsewhere, KV as the replicated read copy","interaction_risk":false,"status":"active","source_ids":["p4"],"why_material":"It explains why teams misuse KV despite understanding the consistency cost.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c14","text":"A cache-fronted share-link design bounds each key to at most 24 cache misses per day with a one-hour max-age.","tier":"anecdotal","section":"Bounding writes by putting the edge cache in front of KV","interaction_risk":false,"status":"active","source_ids":["p5"],"why_material":"It is a positive operator pattern with explicit economics and staleness.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c1","text":"Workers KV is a globally cached key-value read layer with eventual propagation, not a transactional distributed database.","tier":"system","section":"Cloudflare's own Workers lead calls the database use a misuse","interaction_risk":false,"status":"active","source_ids":["p1","s1"],"why_material":"This is the governing architecture constraint.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c2","text":"A recently read value or missing key can remain stale in another location for up to 60 seconds or the configured cacheTtl.","tier":"fact","section":"Eventual consistency, in the exact words of the reference","interaction_risk":false,"status":"active","source_ids":["s1","s2"],"why_material":"Consumers must decide whether that freshness loss is survivable.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c3","text":"Concurrent writes to one KV key can overwrite one another without an atomic compare-and-set.","tier":"fact","section":"Eventual consistency, in the exact words of the reference","interaction_risk":false,"status":"active","source_ids":["r4","s3"],"why_material":"It rules out counters, locks and contended read-modify-write state.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c4","text":"KV writes cost $5 per million after the allowance while reads cost $0.50 per million.","tier":"fact","section":"The rates, and the one that is ten times the others","interaction_risk":false,"status":"active","source_ids":["p2","s5"],"why_material":"Writes cost ten times reads and dominate write-heavy workloads.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c5","text":"A missing-key read is billable even though it returns null or 404.","tier":"fact","section":"The rates, and the one that is ten times the others","interaction_risk":false,"status":"active","source_ids":["s5"],"why_material":"Cache-aside misses still consume the read meter.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c6","text":"The 2021 operator price comparison still matches the July 2026 KV read and write rates.","tier":"calculation","section":"kondro's 2021 arithmetic still prices out correctly in 2026","interaction_risk":false,"status":"active","source_ids":["p2","s5"],"why_material":"The historical warning remains economically current.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c7","text":"Putting caches.default before KV bounds refresh writes by cache expiry rather than request traffic.","tier":"system","section":"Bounding writes by putting the edge cache in front of KV","interaction_risk":false,"status":"active","source_ids":["p5","s6"],"why_material":"It converts an unbounded traffic-driven bill into a deliberate freshness tradeoff.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c8","text":"KV limits keys to 512 bytes, values to 25 MiB, metadata to 1024 bytes and same-key writes to one per second.","tier":"fact","section":"The per-key boundaries, and the error you get at each one","interaction_risk":false,"status":"active","source_ids":["s4"],"why_material":"These are schema and traffic boundaries, not tuning suggestions.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c9","text":"A merged vinext repair preserves short cache keys and hashes the overflow after reserving prefix space to avoid KV 414 failures.","tier":"repository","section":"The per-key boundaries, and the error you get at each one","interaction_risk":false,"status":"active","source_ids":["s9"],"why_material":"It is a concrete repair for a production key-shape failure.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c10","text":"KV get then put cannot implement a correct contended lock; D1 INSERT OR IGNORE or a Durable Object can.","tier":"system","section":"An eventually-consistent store cannot hold a lock, and this application's locks are only safe because nobody is racing","interaction_risk":false,"status":"active","source_ids":["r4","s3"],"why_material":"Silent double ownership is worse than an explicit lock failure.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c11","text":"The durable topology is transactional authority first, one propagation stream second and KV as the replicated read copy.","tier":"system","section":"The topology teams settle on: authority elsewhere, KV as the replicated read copy","interaction_risk":false,"status":"active","source_ids":["p3","p6","s7"],"why_material":"It gives KV one writer per key and keeps reconciliation against an authoritative store.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c15","text":"The seven-day account measurement recorded 899,100 reads, 85,620 writes, 740 deletes and 160 lists.","tier":"measurement","section":"Measured on this account today","interaction_risk":false,"status":"active","source_ids":["r2"],"why_material":"It supplies the actual operation mix behind the cost calculation.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c16","text":"In the measured week, writes were 8.7% of operations but 48.5% of gross list-rate cost.","tier":"calculation","section":"Measured on this account today","interaction_risk":false,"status":"active","source_ids":["r2","s5"],"why_material":"It shows why write control matters before total traffic looks large.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c17","text":"Two same-area visibility trials converged in 0.21 and 0.30 seconds, but neither establishes read-after-write consistency.","tier":"measurement","section":"Measured on this account today","interaction_risk":false,"status":"active","source_ids":["r3","s1"],"why_material":"Observed speed is separated from the documented guarantee.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c18","text":"The independent IAD benchmark used 150 samples per metric and measured KV hot reads at 2.6 ms p50 and writes at 171.8 ms p50.","tier":"independent","section":"Measured on this account today","interaction_risk":false,"status":"active","source_ids":["s11"],"why_material":"A disclosed competitor harness still captures the read-fast/write-slow asymmetry.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c19","text":"Cloudflare reports that its hottest 0.03% of keys serve over 40% of global KV requests and resolve in under one millisecond.","tier":"publisher_claim","section":"Measured on this account today","interaction_risk":false,"status":"active","source_ids":["s8"],"why_material":"It explains why hot edge reads can be exceptionally fast.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c20","text":"The fresh namespace list found 6,767 keys, including 6,568 regenerable lastgood snapshots.","tier":"measurement","section":"The next read-only inventory still shows snapshots dominating the namespace","interaction_risk":false,"status":"active","source_ids":["r1"],"why_material":"The live key mix matches the recommended read-copy role.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c21","text":"The longest live key name is 110 bytes, below the 512-byte hard limit.","tier":"measurement","section":"The next read-only inventory still shows snapshots dominating the namespace","interaction_risk":false,"status":"active","source_ids":["r1","s4"],"why_material":"It verifies current headroom against a known failure boundary.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c22","text":"Fresh list metadata covers 1,046 values totaling 175,859,336 recorded bytes; the largest is 2,140,072 bytes.","tier":"measurement","section":"The next read-only inventory still shows snapshots dominating the namespace","interaction_risk":false,"status":"active","source_ids":["r5"],"why_material":"It measures snapshot storage without fetching bodies.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c23","text":"Cloudflare's own documentation repository records explicit clarifications to the KV consistency contract.","tier":"repository","section":"Eventual consistency, in the exact words of the reference","interaction_risk":false,"status":"active","source_ids":["s10"],"why_material":"The public source history makes the contract auditable.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false}],"sources":[{"id":"s1","type":"specification","url":"https://developers.cloudflare.com/kv/concepts/how-kv-works/","title":"How Workers KV works","quote":"Negative lookups indicating that the key does not exist are also cached, so the same delay exists noticing a value is created as when a value is changed.","summary":"Normative consistency model: central storage, regional caches, stale values and cached misses.","claim_ids":["c1","c17","c2"],"hash":"25a663bdc376c779923fc6158fd7c65c5a0330f9dfe455a4f62dd4295c4cc55f"},{"id":"s2","type":"specification","url":"https://developers.cloudflare.com/kv/api/read-key-value-pairs/","title":"Read key-value pairs","quote":"get() and getWithMetadata() methods may return stale values.","summary":"Workers Binding API for reads, metadata and cacheTtl, including the stale-read warning.","claim_ids":["c2"],"hash":"bb2f0147961457bb720e1909a6859cfa58ca16927ceb54b0cc15b3e49382388a"},{"id":"s3","type":"specification","url":"https://developers.cloudflare.com/kv/api/write-key-value-pairs/","title":"Write key-value pairs","quote":"Due to the eventually consistent nature of KV, concurrent writes to the same key can end up overwriting one another.","summary":"Workers Binding API for put, metadata and expiry, including the concurrent-write warning.","claim_ids":["c10","c3"],"hash":"c43a365f1fdff1dc9df212c2d6be72787619ff5aa5787a0f8be900f384ea5a17"},{"id":"s4","type":"publisher_documentation","url":"https://developers.cloudflare.com/kv/platform/limits/","title":"Workers KV limits","quote":"Writes to same key","summary":"Hard per-key, per-value, metadata, namespace and invocation limits.","claim_ids":["c21","c8"],"hash":"124486035d659fc7ad02c66f3a714dc20efe2c93f19c512758c79b36b42589b8"},{"id":"s5","type":"publisher_documentation","url":"https://developers.cloudflare.com/kv/platform/pricing/","title":"Workers KV pricing","quote":"All operations incur charges, including fetches for non-existent keys that return a null (Workers API) or HTTP 404 (REST API).","summary":"Current read, write, delete, list and stored-data allowances and overage rates.","claim_ids":["c16","c4","c5","c6"],"hash":"cf304f6de8d11281754680e5926e7c0f099a6bc15e038afb207260c65092c523"},{"id":"s6","type":"publisher_documentation","url":"https://developers.cloudflare.com/workers/runtime-apis/cache/","title":"Workers Cache API","quote":"The Cache API is a programmatic interface for reading from and writing to Cloudflare's cache from inside a Worker.","summary":"Free per-location cache primitive used to absorb repeat reads before KV.","claim_ids":["c7"],"hash":"d28a8dcfd8fa323d1b306709e38970dcbbc775d051e97c1ca78874dade47c655"},{"id":"s7","type":"publisher_documentation","url":"https://developers.cloudflare.com/workers/platform/storage-options/","title":"Workers storage options","quote":"This guide describes the storage & database products available as part of Cloudflare Workers, including recommended use-cases and best practices.","summary":"Official comparison surface for KV, D1, Durable Objects, R2 and external databases.","claim_ids":["c11"],"hash":"747ec212aaf55769a366b77bd1d2bae1e4cd56bb81389a7c1343072e88133b44"},{"id":"s8","type":"publisher_documentation","url":"https://blog.cloudflare.com/faster-workers-kv/","title":"Cloudflare's Workers KV latency measurements","quote":"KV reads for these keys, which represent over 40% of Workers KV requests globally, resolve in under a millisecond.","summary":"Vendor measurement of the tiered cache architecture and hot-key latency distribution.","claim_ids":["c19"],"hash":"e2619fd67cada3f4e1be8bbe3a79151e07934b584ac919808c1d63a18f95f30b"},{"id":"s9","type":"repository","url":"https://github.com/cloudflare/vinext/pull/2606","title":"vinext fix for KV's 512-byte cache-key limit","quote":"When the assembled key exceeds Cloudflare KV's 512-byte key limit, `handler.get` throws a 414 **before** the wrapped function runs","summary":"Merged code repair: retain short keys and hash only overflow after reserving prefix space.","claim_ids":["c9"],"hash":"56f18f5cf6a2ed0ccab15b64cee7150cbbd8edbcda19de4bab11e372d20bb4d5"},{"id":"s10","type":"repository","url":"https://github.com/cloudflare/cloudflare-docs/pull/2678","title":"Cloudflare documentation clarification for KV consistency","quote":"Add KV clarifications","summary":"Public documentation change where stale reads, concurrent overwrites and cache behavior are visible in the source history.","claim_ids":["c23"],"hash":"b41d1481d70c92ba75a71d83dcd1ab40fcf19e66c6cdd388d438972d05a35eb0"},{"id":"s11","type":"independent_measurement","url":"https://upstash.com/blog/upstash-redis-vs-cloudflare-kv","title":"Upstash Redis versus Cloudflare KV benchmark","quote":"I deployed a Cloudflare Worker that calls KV through the binding and Upstash through the official @upstash/redis/cloudflare client (HTTPS REST), then ran four scenarios: 5 runs × 30 samples = 150 samples per metric, all served from Cloudflare's Washington DC data center (IAD).","summary":"Competitor-authored but reproducible harness: 150 samples per metric from one Worker and one location, with KV binding and Upstash HTTPS held side by side.","claim_ids":["c18"],"hash":"450ab2c6b14a727ea1637c26dd3b64ef51b25a4fbd8d80f0b94e3434b9707ae6"},{"id":"p1","type":"hn","url":"https://news.ycombinator.com/item?id=48672342","title":"OAuth for all","quote":"KV is not a distributed database and is really not intended as a database alternative at all. It's more meant for distributing bits of config globally. Cost aside, writes are way too slow for database-ish use","summary":"The Workers tech lead telling a user who had adopted KV as a datastore that this is a misuse: writes are too slow and eventual consistency is wrong for frequently-changing state, and to use Durable Objects SQLite or Hyperdrive instead. Negative on the common KV-as-database pattern.","claim_ids":["c1"],"hash":"c4bf1f054fc164522d3a721b6cf6d6b6af2482b5c49b6d6858fa3040495c48ec"},{"id":"p2","type":"hn","url":"https://news.ycombinator.com/item?id=28703233","title":"A bit of math around Cloudflare's R2 pricing model","quote":"Workers KV is also eventually-consistent with no guarantee of read-after-write, which is a pretty big limitation compared to alternatives (S3 even has immediately-consistent list operations now after write).","summary":"Cost and consistency breakdown: KV at $5/million writes and $0.50/million reads (pricier per read than S3), plus no read-after-write guarantee. Contrasts with Durable Objects storage at $1/million 4KB writes but with the DO runtime cost stacked on top. Negative.","claim_ids":["c4","c6"],"hash":"b0ae1f09af39d9b55b1a6b47f028c4753de7f3b91b508e0e8861a72c773ed75f"},{"id":"p3","type":"hn","url":"https://news.ycombinator.com/item?id=22644115","title":"Launch HN: Fly.io (YC W20) – Deploy app servers close to your users","quote":"Cloudflare Workers KV has the simplest model, with a central-db that transparently and eventually only replicates read-only, hot-data specific to a DC but writes continue to incur heavy penalty","summary":"Describes their actual production topology: DynamoDB as single-region source of truth, DynamoDB Streams pushing into Workers KV, reads served from KV at the edge. They deliberately keep writes off KV because of ops-per-second, cost and latency penalties, and to avoid lock-in. Mixed, leaning negative on KV writes.","claim_ids":["c11"],"hash":"7f95c19d457b58f3149a9083cfe1f4856c471b0d710f424cbc573bec36a703fa"},{"id":"p4","type":"hn","url":"https://news.ycombinator.com/item?id=28581040","title":"Reality Check for Cloudflare Wasm Workers and Rust","quote":"You can use KV, with its trade-off of eventual consistency, or use something like FaunaDB or Firebase, but that means that the request has to wait for the request to the backing service.","summary":"Frames the practical bind: Workers have no durable disk and no region control, so you either accept KV's eventual consistency or pay a round trip to an external database. Also finds Workers Unbound pricing opaque. Negative.","claim_ids":["c13"],"hash":"78ad489e86c3ad90c0059f457ef3c7606bd96641ed372ec9b9532609cf66302b"},{"id":"p5","type":"hn","url":"https://news.ycombinator.com/item?id=47917107","title":"Durable Object alarm loop: $34k in 8 days, zero users, no platform warning","quote":"The key property is that caches.default with Cache-Control: max-age=3600 becomes a natural throttle — at most 24 cache misses per day per key, so KV writes are bounded by (keys × 24) regardless of traffic.","summary":"Describes a running share-link backend that uses KV plus the edge cache with a sliding TTL specifically to bound KV write cost, instead of DO + alarms. Accepts loss of strong consistency in exchange for writes that cannot run away. Positive pattern, written in response to a runaway-cost postmortem.","claim_ids":["c14","c7"],"hash":"65e7428e4eb02639b7319f57bae36b11cbef8b9d2c2877105f8d59bab1cee439"},{"id":"p6","type":"hn","url":"https://news.ycombinator.com/item?id=42531229","title":"Show HN: An edge first feature flag implementation on Cloudflare","quote":"I mostly use KV for storing flags specific to each project (which gets replicated automatically). Everything else goes to D1 (replication isn't needed here).","summary":"Author of an edge feature-flag system: flags live in KV for its built-in geo replication, configuration lives in D1. Elsewhere in the thread he notes KV still has propagation delay on updates. Positive use of KV for exactly the flags/config case.","claim_ids":["c11","c12"],"hash":"e3d074248824ff45c22c316ff194fa3294248a3210c0e1fbf02cc7611770c3e1"},{"id":"r1","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/cloudflare-os-kv","title":"Fresh first-party KV namespace inventory","quote":"Keys in the production namespace | 6,767","summary":"Wrangler key-list inventory counted keys, prefixes, name bytes and metadata without reading values or mutating the namespace.","claim_ids":["c20","c21"],"hash":"550da79f541bf7d9a649e268837e7d93270d62abdbd5420fcf22e5dd5f39f47d"},{"id":"r2","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/cloudflare-os-kv","title":"First-party seven-day KV operations receipt","quote":"Seven days of real operations — 899,100 reads, 85,620 writes, 740 deletes, 160 lists.","summary":"Cloudflare GraphQL kvOperationsAdaptiveGroups measurement for 2026-07-19 through 2026-07-26, with the query published.","claim_ids":["c15","c16"],"hash":"26895d8e05017d4f90575d88122693083aad415cd1eb4526f27b8ad8f21e6a73"},{"id":"r3","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/cloudflare-os-kv","title":"First-party KV visibility probe","quote":"visible in 0.21 s and 0.30 s across two trials.","summary":"Two temporary-key trials, one after six cached 404s; both keys deleted and verified gone. Explicitly not evidence of a consistency guarantee.","claim_ids":["c17"],"hash":"bfcd1eac2af2e6fd532c4cd026093459cd8cd774b94f1e16e6e2f2df95ca3dc3"},{"id":"r4","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/cloudflare-os-kv","title":"First-party KV-lock code audit","quote":"KV get→fire→put races: parallel identical calls all miss, all fire.","summary":"Local code inspection contrasts advisory KV leases with D1 INSERT OR IGNORE for contended idempotency claims.","claim_ids":["c10","c3"],"hash":"ceb9958bc04bb709d389db07f3c0da9ae77c44a06456fe5e839ed2dd5dfe80a2"},{"id":"r5","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/cloudflare-os-kv","title":"First-party snapshot metadata inventory","quote":"Bytes recorded by that metadata | 175,859,336","summary":"Fresh KV list metadata counted snapshot values, recorded bytes and largest recorded value without fetching any stored body.","claim_ids":["c22"],"hash":"d9244be77cf814f51190b7da1d844a3969df9c043ee0d38fdf74447ad88a0b5a"}],"anecdotal_sources":[],"scientific_sources":[],"user_reports":[],"related_articles":[],"question_graph":{"slug":"cloudflare-os-kv","questions":[],"evidence":[],"edges":[],"counts":{"questions":0,"evidence":0,"edges":0}},"honesty":{"active_claims":23,"retracted_claims":0,"cut_claims":0,"challenges":0,"scrub_events":0,"note":"Retracted/cut claims stay on ledger but are excluded from ask unless ?include_inactive=1"},"counts":{"claims":23,"claims_total":23,"sources":22,"anecdotal":0,"scientific":0,"user_reports":0,"questions":0,"evidence_ingests":0}}