Technology
SQLite on the edge: a practical case for local-first software
The thread wants local-first to win. It just doesn’t believe the difficult parts have disappeared.
Hacker News
Edition
Technology
The thread wants local-first to win. It just doesn’t believe the difficult parts have disappeared.
The front-page brief
Local-first software can make applications faster, more resilient, and more respectful of user ownership by keeping primary data on the device and treating the network as a sync layer—not a permanent dependency.
The article argues that SQLite is ready to be the practical foundation for this shift. Its reliability, portability, and familiar query model can replace sprawling client caches while newer replication tools bridge local databases and shared cloud state.
The author does not call the architecture effortless. Instead, she makes a narrower case: for many collaborative products, the user experience and operating-cost gains now justify tackling synchronization directly.
Three currents
Topics ranked by share of substantive discussion
38% OF DISCUSSION
+08Readers agree a local database simplifies reads and offline behavior. Conflict resolution, schema changes, permissions, and partial replication are the bill that arrives later.
“SQLite is not the controversial bit. The distributed system you quietly built around it is.”
31% OF DISCUSSION
+81Instant launch, offline work, and fewer loading states are repeatedly described as a meaningful product advantage—not merely an implementation preference.
“You notice local-first the same way you notice good plumbing: only when you go back to something worse.”
19% OF DISCUSSION
+57Data ownership earns principled support, while founders focus on a more immediate benefit: fewer round trips and dramatically lower read infrastructure.
“The philosophical case sold our users. The cloud bill sold the board.”
Also on the desk
Security & device loss 7% Tooling maturity 3% SQLite limitations 2%Names in the margins
Authors, builders, and domain experts identified from public profiles and thread context.
Defends the architecture as a trade rather than a shortcut; directly answers implementation questions in 14 replies.
“The claim is not ‘no servers.’ It’s that your server no longer sits in every interaction.”
Offers the thread’s strongest technical counterargument on causal ordering and multi-tenant permission changes.
“Once authorization is state, stale clients become a security problem—not only a sync problem.”
Shares production numbers from a 22,000-user local-first deployment, shifting the cost discussion toward operations.
“Reads fell 84%. Support tickets about lost work almost vanished. Sync tickets did not.”
i Roles are inferred from linked public profiles and may be incomplete. All people and comments shown here are mock data.
From the floor
6 of 418 shown · selected for relevance, expertise, and representation—not points alone.
Next edition
The article treats authorization as if it were a filter over sync. In a multi-tenant system, revocation has to beat an offline client back to the data. That’s not an edge case; it’s a property the whole design has to carry.
Completely fair. We use short-lived capabilities and do not allow every collection offline. “Local-first” has to be a product-by-product boundary, not a blanket promise.
We switched a field app from API-first to local-first last year. The surprising result wasn’t offline support—it was how much product code disappeared once every view stopped modeling loading, retry, and half-failure.
This is the part benchmarks miss. “No loading state” becomes a design primitive and the product team starts making very different choices.
Production anecdote: 22k active accounts, four years in. Reads against our cloud database fell by 84%. Support tickets about lost work almost vanished. Sync tickets did not—but they are diagnosable in a way “the page ate my work” never was.
How much of the read reduction became egress or replication cost? Genuinely curious about the full bill.
What does the migration path look like for an existing SaaS product? The greenfield examples are good, but dual-writing an API-backed system while introducing client authority sounds like the highest-risk phase.
We migrated one bounded workflow at a time and kept the server authoritative until reconciliation telemetry was boring. I’d strongly advise against a flag-day switch.
“Just sync SQLite” compresses a remarkable number of product decisions into three words. Who wins a conflict? What can be forgotten? Which device is trusted? Those answers become your real data model.
Agreed, though the API-first version still makes those decisions. It often hides them behind last-write-wins and a support inbox.
Data ownership is the headline, but latency is what users feel every day. A 30ms database call still becomes 300ms after a mobile radio, TLS, the API, and the trip back. Local is a different class of interaction.
And a different failure mode. I’d like to see more products honestly expose whether the local state is fully synced.