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.

View original on X