Yesterday, Ben Holmes from the Astro team posted on X saying:
Alright, finally looked into local-first web apps.
I get it. This is the future.
While I don't think local-first is a one-size-fits-all way to build apps, I think they'll become ubiquitous. And a lot more developers are going to build local-first features into their apps.
I've been learning more and more about local-first over the past few weeks. I've also been rebuilding Aurelius as a local-first app. One of the reasons that I didn't cover in my post about rebuilding Aurelius is that I'm getting tired of cloud-native apps. Particularly, the B2C kind. Specifically, it's the comapnies behind those apps.
Companies behind cloud-native are susceptible to get acquired. When this happens, they do one of three things:
- The app lives. The company that acquired it, keeps the app as is and lets the team keep working on it, most often under a new brand/name. Example: Notion acquired Cron and rebranded it as Notion Calendar. Users get to keep using the product and have access to their data as though nothing changed. While this is the ideal scenario for a user, it's also temporary. Users have no idea when this will change.
- The app gets integrated into the app/service of the company that acquired it. Users can choose to sign up for this new service just so they can keep access to their data whether or not all the other features of the parent makes sense to them. While this is not ideal, at the very least, users get to keep using the app and keep their data. This also is temporary and we have no idea when this will change.
- The app stops working because for whatever reason the company that acquired our beloved app decided to shut it down. The app developers write a blog post about their incredible journey and the users are left looking for an alternative. If we're lucky we get to export our data as a
JSON
file. But there's nowhere to take this data and import it. I was recently in this situation with an app that I used everyday.
So what is the solution? At first, I thought maybe open-source software could be the solution. That's why I titled an earlier post as "The Ephemeral Nature of Closed-Source Software". If the company was acquired or shut down their servers, you could always fork and self-host the software, right? While it's a solution, it's not great. As a software engineer, I have the knowledge to self-host apps. As someone who gets paid well, I also have the means to self-host apps on cloud platforms. At the moment, I'm self-hosting 4 open-source projects that I'm using. These are not trivial apps either so the cost is not something that can be ignored. Not everyone can to do that.
Local-only software is also a solution but it's not complete. When all the data lives on our device, we get privacy and ownership. But we give up on important stuff like collaboration, data backups, etc. P2P will seem like it solves these problems but it's not easy to implement from what I understand about it. We definitely need servers to handle these features. These servers are essentially sync engines. They keep data from multiple clients in sync without overwriting each others' changes. But we also want those services to live longer than the companies that build and host those services.
During the recent local-first conference, Martin Kleppman talked about the past, present, and future of local-first software. In this he talks about generic sync engines that can handle the sync for different types of applications and can use different algorithms based on the kind of data that is being synced. These kind of generic sync engines can be hosted by anyone (think AWS, Azure, etc) and clients (different apps from different developers) can use these sync engines. Users can then have control over which of the sync engines they want to use.
This seems like a future that I could get behind. And I believe we can even bring over a version of the SaaS-like monetization to this new paradigm of apps. To that end, I'm going to push the boundaries of what is possible with local-first software and build as many as local-first apps that I possibly can. And hopefully make meaningful contributions to this future. I think with enough people building local-first apps, we could make this possible.