In theory, I love the local-first mode of building. It aligns well with “small tech” philosophy where privacy and data ownership are fundamental.
In practice, it’s hard! You’re effectively responsible for building a sync engine, handling conflict resolution, managing schema migration, etc.
This said, tools for local-first software development seem to have improved in the past couple years. I keep my eye on jazz.tools, electric-sql, and Rocicorp’s Zero. Are there others?
Do you know that website? https://www.localfirst.fm
EDIT: actually I wanted to point to the "landscape" link (in the top menu) but that URL is quite unergonomic.
I've been using instantdb in anger for the past month or so for a side project of mine. I'm building a personal budget app.
I should probably write a blog post, but I will say that I investigated power sync, electricSQL, livestore and powersync before. I briefly looked at jazz tools but wanted something a bit more structured.
I'm pretty impressed this far. I've actually been writing it with Vue and a community library. Permissions were a bit tricky, but once I figured it out it was simple. And I like their magic email login. And I like their dashboard/reply, but there are a few big changes I would make there to make it less fiddly.
I love that it's open source, and that if I want to, I could self host it.
As for the other options:
- jazz wasn't structured enough
- livestore came off as too fiddly with the event store, but it was appealing. That the dev tools are payealled was disappointing, but understandable
- electriSQL really only provided half a solution (read, not the write model
- couchDB / pouchDB wasn't structured enough for me, and I wanted better cross document support than was obvious / baked in.
- did not investigate zero really
I think I saw someone point out automerge not long ago:
Rust and JavaScript implementations, a handful of network strategies. It doesn't come with the free or paid offering that jazz.tools does, but it's pretty nice.
Along with the others mentioned, it's worth highlighting Yjs. It's an incredible CRDT toolkit that enables many of the realtime and async collaborative editing experience you want from local-first software.
I use local software and sync files using git or sometimes fossil (both work fine in Android with termux for instance, for stuff In want to access on my phone). I don't host servers or use any special software that requires syncing data in special ways.
There are a bunch and quite a breadth of different solutions/takes on the problem.
Here is a good recap of the current players. https://www.localfirst.fm/landscape
There's also PowerSync: https://www.powersync.com/
It's also open source and has bindings for Dart, JS, Swift, C#, Kotlin, etc
This site also has a directory of devtools: https://lofi.so/
CouchDB on the server and PouchDB on the client was an attempt at making such an environment:
- https://couchdb.apache.org/
- https://pouchdb.com/
Also some more pondering on local-first application development from a "few" (~10) years back can be found here: https://unhosted.org/