Notes from Local-First Conf 2026
Back in Berlin, first time since JSConf EU 2019.
After a week in the US, a long flight back with two layovers (Chicago and Frankfurt) and a dozen micro naps, I finally reached Berlin for Local-First Conf at Festsaal Kreuzberg. The last time I was here for a conference was JSConf EU in 2019.

I came across the concept of local-first software by accident, while living and working in Munich a while ago. At the time, I didn’t know there was a whole movement forming around the concept. We had to build software that was supposed to be a low-latency, high-throughput, offline-first experience and to keep working without a connection, then sync the data back and fetch updates once wifi was available again. We didn’t tick all the local-first boxes back then, but that’s fine, you don’t have to tick all of them.
Local-first is not a new term for DevSeed. If we take the definition from the conference website (“software that prioritizes data ownership, user agency, and empowering end users to do more with their digital tools”), then most of the software we build publicly is aligned with many of the local-first principles, including:
- Fast: most of the analytics happens locally, on the user’s own machine, with no network roundtrips in the critical path
- Longevity: users should be able to change where the data lives, using different storage backends and the app should still work
- Privacy: the data analysis does not have to leave your device

I’m sharing a brief summary of a few selected talks as I comb through the many notes I took. The notes are mine and so is any mistake or slight misrepresentation of what the speakers tried to say:
Martin Kleppmann opened with 1989 (the fall of the Berlin Wall and the year Tim Berners-Lee wrote his information management proposal) and argued that the era of stability is over. Cloud dependencies that used to feel safe now feel less safe. His answer is not “get rid of cloud services” but decentralize at every level and make dependencies easy to replace

Martin Kleppmann's opening talk Jeffrey Heer on Mosaic (obviously, I’m a fan of Mosaic). Visualization components publish declarative queries to a coordinator that consolidates, caches and pre-aggregates instead of operating over the full raw dataset every time. This is probably the shape serious browser-based data apps need to have going forward
Seph Gentle on stable schemas. If we store data in files, what should that data actually be? The ideal format is self-describing, statically typed, compatible over the long now, preserves foreign data and supports network sync. Nobody thinks much about schemas until you need files to survive across versions, apps, sync systems and years of software bloat
Jari Jalkanen (Mozilla) on the File System Access API. It lets web apps work with the user’s real filesystem and he covered why browsers are so cautious about it (a bug can corrupt user data, read access is a rich fingerprinting surface). The best line of the day was that we spent 30 minutes talking about homomorphic encryption to avoid giving a browser the same power people are casually giving chatbots
Armin Ronacher & Colin Daymond Hanna on cloud and local hybrid machine entities (pi.dev, Lefos). The harness often runs locally while the entity still uses global/cloud state, so these systems are already hybrid whether we admit it or not. I need to read more from their blogs on small local models because the talk felt like it had more underneath it than I managed to write down
Rachel Lee Nabors on getting frontier-LLM results from small language models, on device. The recipe is right-sizing: prove the task is possible with the largest cloud model, collect a golden dataset with concrete success criteria, test from small to large until you match the big model and select the smallest one that passes. Then set up regression evals. Most of the analytics happening on your own machine applies to inference too
Ricardo Signes (Fastmail) on JMAP, the IMAP replacement. A really good, enjoyable talk. Explicit state, “tell me what changed since state so-and-so” sync semantics, tombstones for destroyed records. Very local-first adjacent

My takeaway from the three days is that local-first has expanded way beyond CRDTs and sync. It is just as much about making dependencies easy to replace and letting more of the work happen on the user’s machine. I left with a long reading list and a few things I want to prototype on the train ride back.
