Local-First Conf Recap posted Wednesday, June 4, 2025 by The Neighbourhoodie Team newsoffline-firsteventstutorial
The Neighbourhoodie team attended the 2025 edition of the local-first conference and community day in Berlin and we are very happy we did.
We met a ton of nice people, got inspired by new ideas and learned a lot about the local-first community. Alex ran a well-reviewed PouchDB Workshop at the community event & Jan gave a well-received talk at the conference.
offline-first đ€ local-first
First and foremost, we were not sure if this was an event for us. Our work has been focussed on offline-capable applications since our founding in 2014. We even coined the term Offline First, adjectivised as offline-first. Local-first started its life as a manifesto in 2019 and we just were not sure if we would be perceived as out-of-date or wrong-headed in our approach.
It turned out, very quickly, that the 450 people at the conference are (mostly) enthusiastic about the same topics we are, that we share values, and we share technical goals. Even the writers of the manifesto credit us as an inspiration. When we started Offline First, it was sometimes hard to find folks who would share our vision for computer programs that just worked better in the real world. At local-first conf, we found our people.
Workshop Day
The first day was a workshop day with ~200 people strewn across an atrium and various breakout rooms for impromptu sessions formed in an unconference format at the TODO campus in Neukölln. Topics ranged from the UX of local-first to discussing options for identity in distributed systems. We got to meet some old and many new friends by just hanging around and talking about various topics.
UX of local-first
This session absolutely packed the small room we were in, and started off with a survey of personal experiences the attendees had with the collaborative + local-first combo. We quickly reached the conclusion that solving both collaboration and offline capability with any degree of universality, even within a single app, is both extremely difficult to build and to use. This is mainly due to the fact that conflicts accumulate over time and become unmanageable, and that most users donât have a learned mental model for conflict resolution. Our most potent takeaways of the ensuing discussion were:
- From a UI perspective, collaboration and offline capability exist on a spectrum, and trade-offs need to be made.
- If possible, lean on existing mental models your users have when dealing with sync and conflicts. This could mean:
- Donât force instant resolution of conflicts as they occur. Users are generally accustomed to things occasionally being in an unexpected state (decades of experiencing âlast-write-winsâ systems), but they can use help 1. Highlighting these occurrences and 2. Then being provided the other conflicts as options.
- Re-using known UI elements: instead of providing a new conflict resolution UI, systems that already have a suggestion mode, like Google Docs for example, can re-use that. In the end, a conflicting edit is very much like an edit suggestion by another user, and can be resolved in the same way.
- In some extreme cases, a button with âStart a video call with your colleagues to sort out this messâ might be the most appropriate option.
- In some work environments, collaborative modes are effectively surveillance tools to see who is actually working. This angle was quite unexpected for us, but it does make a lot of sense: higher-ups might misunderstand collaborative tools as opportunities for over-the-shoulder hovering and scanning for signs of busyness, employees might fear exactly that sort of behaviour and fret over every minute they spend thinking instead of doing.
The notes taken by the session leader are available online.
Partial Data Fetching on Initial Load
This session was less of a discussion of the abstract problem and more of a âhereâs how we do thisâ overview of techniques from a bunch of different people, which was very illuminating. Most notable to our minds was that some attendees seemed to be on the quest to find a generalistic approach that would work on the level of the sync library, where our experience has been that deciding on what to load onto the client when is very much custom, and determined by the individual use-cases: what problem does the app solve, what expectations to users of various roles have in various contexts, what can the connection and the client device actually handle?
For example, weâd generally opt for directly loading whatever data is necessary to render the userâs current view, and then, once they have something to look at, sync whatever else we want in the background. This would generally be what is most relevant to the user depending on a variety of factors: usually freshness of data, but also where they are in the app, or what their role is. From there, weâd sync data of decreasing importance.
Our Workshop
Our workshop came last. Alex showed off how easy it is to get going with PouchDB by writing a sync demo entirely in the browser console of pouchdb.com. He ran into some technical difficulties, but handled them gracefully and captivated the audience who later joined in with a lively discussion. A video that covers the workshop content is available on our YouTube channel: Getting started with PouchDB: basics, replication, offline data, conflicts and queries.
The Conference
The conference proper was at the pleasant nHow hotel right by the river Spree in Berlin which acted as a nice and relaxing backdrop to a busy two days. Day one was peppered with implementation deep-dives into various pieces of local-first technology. For us, it was great to see alternative approaches to the work weâve been doing for a long time. We also were happy to see that we have already solved a great number of problems that this new generation of solutions is yet to encounter đ.
Most interesting was the panel discussion about who is or is not part of the local-first community. Is it only strict adherents to the manifesto or is anyone who uses local-first technology welcome? We were very happy to see the consensus settle on a large tent definition that welcomes more people.
Day two was focussed more on the why than the how of local-first and Jan was lucky to kick-off the day with a brief overview of our three most impactful projects:
- Ebola Epidemic Contact Tracing & Clinical Vaccine Trial
- the case study is due to release in a few weeks
- COVID Vaccine Logistics for Bavaria
- Humanitarian Convoy Planning App
We were very happy to see that the talk was very well received. A full recording will be published along with all talks from this conference edition in the coming days.
Directly after, Seph introduced a mind-boggling concept for a local-first desktop operating system that weâll definitely have a closer look at in the future. And right after that Eileen shared her research into local-first user-experience design. Some of the problems we were facing in 2014 are still under active discussion, but it was fantastic to see that the computing landscape has since moved considerably and that there are new methodologies and best-practices that folks building real apps can rely on that were just not available back then.
All in all this was a very inspiring couple of days and weâre looking forward to being part of this new-to-us community. Thanks all for welcoming us so wholeheartedly.
« Back to the blog post overview