Two related, but separate ideas: 1
Two related, but separate ideas:
1. Local-first: An app that stores data locally, and works offline.
2. Sync-engine: Automatically syncing data between a web UI and a DB.
These two ideas are often discussed under the umbrella term of "local-first". But that's unfortunate, because it conflates two separate ideas.
You can implement a local-first app without a sync-engine.
And you can use a sync-engine without supporting local-first.
They're separate decisions.
Local-first is rarely useful, and hard to do well.
Sync-engines are broadly useful, and easy to do well (many libraries and services exist).
To clarify, building your own sync-engine is NOT easy. Services like @convex_dev, @ElectricSQL, @zero__ms make it easy because they solved the hard problems in sync.
In contrast, there's no silver bullet service or library for local-first. Sure, there are Conflict Free Replicated Data Type (CRDT) libraries, but using them well isn't easy, and they don't magically resolve all types of conflicts.
Resolving conflicts is a fundamentally hard problem, and each app has to choose conflict resolution strategies based on their unique business rules, data structures, and user expectations.