Build1 distinct publisher3 min readPublished
The mechanism is RxDB holding a working copy on the device and R2 holding periodic snapshots, so a first sync is one download plus a small delta. Whether it transfers depends on who may hold every row.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The checkpoint carries this design. A snapshot in R2 is a checkpoint number, a createdAt timestamp and a record set, and the client stores that checkpoint after importing the data [12]. It then asks the sync layer for everything after it [6]. That holds only if the snapshot job and the sync endpoint agree on what the number counts, because one coordinate is doing two jobs: marking where the bulk import stopped and where the incremental pull starts [12]. Misalign them and you write gaps or duplicates into the local database your reports are computed from.
The arithmetic in the post is illustrative, and worth doing anyway. A snapshot at checkpoint 98,000 against 100,000 records means 98 percent of the history arrives as one object from R2 and 2 percent arrives as a delta [11][1]. The example rate, 100 transactions a day for 1,000 days, is about two and three quarter years of accumulation [10][2]. The real application takes hundreds a day [1], so at 300 a day the same 100,000 rows land in roughly 333 days [3], and a weekly snapshot leaves about 2,100 records for the first incremental sync to walk [4]. Snapshot frequency, not RxDB, sets first-load cost.
It sets read cost too, in the direction people forget. The post does not state the cadence or how the snapshot is produced [16]. If it is produced by reading current state out of D1, then under rows-read billing [4] the full scan you deleted from every report has become a full scan on a schedule, and the bill tracks cadence [5]. That is a good trade when many users run many reports over the same history, and a bad one if you snapshot hourly for three people.
The conditions for transfer are narrow. Every client has to be entitled to the entire reporting dataset, since the snapshot shown is a bare record array with no per-user filtering described [17]. Devices have to store and query that dataset, which the author treats as reasonable precisely because the application is internal with few users [15][13]. And your reads, not your writes, have to be the thing that hurts [2]; D1 was fine for the transactional side [1].
The part worth stealing is the discipline of one checkpoint. The snapshot is not a parallel export with its own semantics; it is the sync stream materialized at a point the sync protocol already understands [12], which is why bootstrapping a new device is a download plus a delta instead of a special code path. RxDB supplies local persistence, reactive queries and synchronization [9]. The interesting engineering is in the coordinate the two paths share.
Ranked by verification strength, evidence, and original report placement.
The application is an internal business application receiving hundreds of transactions every day, and Cloudflare D1 handled the writes without difficulty.
The author states the problem was not writing data but reading large amounts of data repeatedly.
A report calculating balances from transaction history might return only about 20 rows while the database reads thousands of transaction rows to produce them.
According to the post, D1 usage is billed on rows read rather than simply on the number of queries, which made repeated large analytical queries unattractive.
The final architecture uses D1 as the source of truth, Workers for the API and synchronization, RxDB as a local copy that runs reports locally, and R2 for periodic snapshots that speed initial synchronization.
New clients download a snapshot, import it into RxDB, tell the sync layer which checkpoint they are at, and then pull only the changes recorded after that checkpoint.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 30, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
A $5-a-month monitoring SaaS on Workers, Turso and R2 is a cost datapoint, not a blueprint1 distinct publisher
build
Once the question needs a cube, you own the parser1 distinct publisher
build
Four REST calls became one query: the sidecar pattern, minus the marketing1 distinct publisher
build
Cloudflare's own researchers broke the Spectre defense it shipped in 20211 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One builder's account of his own system
Everything traces to a single dev.to post by the person who made the decision. The architecture description is detailed and the arithmetic in the worked example holds up, which keeps this from scoring lower — but the SQL and the snapshot type are labelled conceptual, there is no code to inspect, and even the pricing mechanic that motivates the whole redesign is asserted rather than shown. Internal coherence is not corroboration.
A single internal app, self-reported
One application, one author, and no sign that anyone else is running snapshot-plus-checkpoint bootstrapping this way. dev.to's post names no company, gives no user count beyond 'relatively small', and does not say how long the design has been in production — so what we have is an existence proof, not traction.
Modest for the genre, short on numbers
This post argues against its own headline more than most: it names the trade-off, rejects the server-side alternative on its merits, and concedes the design works because the app is internal. The overstatement is by omission. 'Much faster' and 'far fewer reads' are carrying the conclusion with no figure behind either, and framing metered reads as avoided skips what it costs to keep cutting snapshots out of the same metered database.
Authorial stake, no visible vendor tie
The pressure here is reputational rather than commercial: a first-person post whose thesis is that the author's own architectural call was the right one, on a platform where such posts build a developer's standing. Nothing in it discloses a relationship with Cloudflare or RxDB and nothing hints at one — but there is also no employer, client or bill named that a reader could hold the story against.
Clear on what was built, thin on whether it worked
We can be reasonably sure what this system looks like and why it was shaped that way, because someone is describing his own work in specifics. What stays unresolved is whether the gains are real at the size claimed, and whether the pattern survives contact with an app where not every user may hold every row — which is the half a reader is deciding on.