"Local-first" has become a marketing term. Every app claims it now. Most of them don't mean it.

Here's a clear definition: local-first software stores your data on your device first, and syncs to other places second. The app works fully offline. The data is yours whether or not the company behind the app exists next year.

The problem local-first solves

Most apps today are cloud-first by default. Your data lives on someone else's server. The app is essentially a UI for their API. When the service is down, or the company shuts down, or they change their pricing, you're stuck.

You've seen this happen. Evernote. Quip. Readmill. Dozens of others. The cloud giveth and the cloud taketh away.

What genuine local-first looks like

A truly local-first app has:

  1. Full offline functionality — not "read-only offline mode," but everything
  2. Files you can open elsewhere — your data isn't locked in a proprietary format
  3. Sync as a feature, not a requirement — the app works without it

Apps that actually qualify

Obsidian — your vault is a folder of markdown files. Works offline. Sync is optional and pluggable. The files exist regardless of Obsidian's future.

Logseq — same model. Graph-based, but everything is plain text underneath.

Heynote — a scratch pad that lives on your machine. No account, no sync, no cloud.

Zed — code editor. Local by definition, with optional collaboration built on CRDTs.

The CRDT connection

The reason more apps are going local-first now is CRDTs — Conflict-free Replicated Data Types. They make it possible to sync data between devices without a central server arbitrating conflicts. The technical barrier that made cloud-first the easy choice is slowly disappearing.

Local-first isn't a compromise. It's the better architecture. It just took the tooling a while to catch up.