Own Data, Own Software

wrxd1 pts0 comments

Own Data, Own Software

In this article, I talk about "local-first", a paradigm for building software<br>that runs on your device, stores data locally, and syncs across devices<br>without depending on cloud servers. I contrast it with the "cloud-first"<br>approach we're all accustomed to, highlighting the benefits of local-first for<br>the user.

I then share my vision for Superego, a product I'm developing that combines a<br>personal, general-purpose database with a platform for building local-first<br>apps, aiming to create an ecosystem that champions the ideals of data and<br>software ownership.

For the past couple of years I’ve been keeping an eye on a software trend that I<br>find very inspiring: local-first software.

The essay that coined the term is a<br>lengthy-but-worthy read, but, in essence, it characterizes a piece of software<br>as local-first when:

It runs entirely on your device, where it stores the data it operates on<br>(i.e., your data).

It syncs that data with your other devices.

It allows real-time collaboration (where it makes sense).

It’s yours forever: you’ll be able to use it in 20-years time, even if its<br>developers are no longer around.

This contrasts the most common form of software we’re accustomed to nowadays -<br>cloud software - which mostly runs on some company’s servers, keeps your data<br>there, and is inextricably tied to that company.

I’m excited by the local-first approach, in particular by the idea to own and<br>control my data and the apps that operate on it; they stay on my device and I<br>always have access to them.

I’m a software developer, an obsessive tracker, and a nerd for stats. I very<br>often wish that the data from the various apps that I use were somewhere on my<br>computer, easily accessible, so I could write all sorts of scripts to prod it<br>and reveal some curious hidden trend in my life.

Additionally, from a privacy point of view, thinking that my data is currently<br>in the hands of so many companies makes me uncomfortable. It’s also preposterous<br>that so many of them make me jump through hoops just to get a copy of it. Not to<br>mention that, if one of those companies goes out of business, poof - my data<br>with them is essentially gone, as - even if I do have a copy - I can’t do much<br>with it without the company’s software.

A Local-First Uchronia

Since I first heard about the concept, I’ve been mulling over the idea of a<br>local-first software world: what would it have looked like had cloud apps never<br>taken off in the mid‑2000s and had everything been local‑first instead?

Take my Garmin watch as an example. It continuously tracks my heart rate, my<br>sleep, and I use it to record all my workouts. The watch connects to the Garmin<br>mobile app on my phone, which gets the data out of the watch and uploads it to<br>Garmin’s servers. When I want to look at this data, I must use the Garmin app<br>(or their web app), which requests it every time from those servers. Of course I<br>must also have an internet connection to do so.

In my local-first alternate timeline, instead, the Garmin app - after getting<br>the data out of the watch - saves it in a standardized local data store that<br>syncs with my other devices through some encrypted cloud service of my choice.<br>When I look at the data, the mobile app (or the web app) fetches it from that<br>local store. No Garmin server is ever involved.

In this scenario, Garmin’s mobile and web apps are local-first: in order to work<br>they only need access to the local store. They don’t need me to “log in”; they<br>don’t phone home to check if I can use them. I can always use them, as long as I<br>have them installed. Even if Garmin shut up shop, my workflow would be<br>unaffected.

Furthermore, since that local data store is standardized, it’s easy for me to<br>access its data if I want to do something else with it. Say I want to check<br>whether, during my daily run, my heart rate stays lower on those days where I<br>got lots of sleep. It’s easy for me to write a script to run some stats. Maybe,<br>since Garmin’s data format is - necessarily - publicly known, some other<br>developer has already written an app to do that.

Designing *My* Local-First Uchronia

A few months back I started envisioning a product that could make my local-first<br>dream a reality. Or at least a smaller, personal version of it.

I emphasize personal. The local-first crowd is very focused on real-time<br>collaboration, but I actually don’t care that much about it; for most apps that<br>I use in my private life, outside of work, I rarely need to collaborate with<br>anyone. What I do sorely need (well, want) is that standardized store I was<br>imagining where I can keep all my data. It could support collaboration, I<br>guess, but if that feature adds a lot of complexity, I can do without it.

I identified six essential desiderata for my product:

I want a local database, where I can put any data I want, in a transparent<br>format that I can control.

That data should be automatically synced between my devices and automatically<br>backed up.

The product should allow me...

data local first software garmin apps

Related Articles