A curiosity journal of math, physics, programming, astronomy, and more.

Local-only versus local-first software

Last week I wrote about a few local-only web apps I've made recently. Since I don't have a server to persist data in the cloud, they're all static sites that can export and import YAML data. A downloaded YAML file can be reloaded later to restore the app's state, or you can transfer a file to another device and load it up there. Exploring this local-centric model of state management led me to the term Local-first Software.

Local-first software is distinct from local-only software. My local-only apps require the user to transfer state between devices, but local-first software is local first, replication second. As far as I've learned so far, that typically means having a server that can relay state changes, often using CRDTs. I've started listening to the localfirst.fm podcast to learn more. There's also a Local-First Conf and the website lofi.so. A related term I like is "LEAF computing", which stands for Local Execution, Autonomous, and Federated (I've also heard Local, Encrypted, Autonomous, and Federated). The term "LEAF computing" stands in contrast with "cloudy computing".

I treasure the values of the local-first software movement, specifically giving users ownership of their data, the ability to run software fully offline, much lower UI latency, and using local compute resources rather than servers in a data center. It's not the right architecture for many types of software, among them e-commerce and social media platforms. The former needs stronger authorization controls than local-first software can guarantee, and the latter operates at larger scales than can easily run locally (though there is Scuttlebutt).

Given those constraints, much of the local-first software I see advertised appears to be note-taking software. Obsidian is the clearest example, used for managing images and Markdown notes. BrainFrame looks similar. Allume captures whiteboard-style notes. Somewhere I saw a recipe tracker. Those uses are great, but I'm more interested in how local-first software can go beyond the zettelkasten. The best examples I know are Actual Budget, which tracks home finances, and some music players.

Do you use local-first software? Anything you'd recommend, either for using directly or for learning from? If so, email me!