What Is Local-First Software?
The Vision of Local-First
Local-first software is a term coined by the research lab Ink & Switch in its 2019 manifesto essay. Ink & Switch’s rationale for local-first is to get the best of both worlds of stand-alone desktop apps (so-called “old-fashioned” software) and cloud software:“We would like both the convenient cross-device access and real-time collaboration provided by cloud apps, and also the personal ownership of your own data embodied by ‘old-fashioned’ software”.The manifesto proceeds to define local-first as software that:
“prioritizes the use of local storage (the disk built into your computer) and local networks (such as your home WiFi) over servers in remote data centers”.It also puts emphasis on the primacy of the local copy of data:
“In local-first applications […] we treat the copy of the data on your local device […] as the primary copy. Servers still exist, but they hold secondary copies of your data in order to assist with access from multiple devices.”Expanding on this, the manifesto identifies 7 ideals “to strive for in local-first software”, which we will explore further below. Much more theoretical research is still needed to practically build software that conforms to all of the ideals of local-first software as envisioned by Ink & Switch, since it will need a fully decentralized architecture and needs many complex requirements to be addressed (see here for more details). In the meantime, the manifesto essay does provide practical guidance on things you can do to bring your software closer to the ideals.
Local-First in Practice Today
Most implementations that are referred to as “local-first” today conform to only a subset of the local-first ideals envisioned by Ink & Switch. We argue that a practical definition of most local-first implementations today is the following:Local-first implementation today generally refers to apps that work with a local client database which syncs automatically with a backend database in the background. All reads and writes go to the local database first.This kind of architecture already enables large benefits for both end-users (speed, network resilience, real-time collaboration, offline usage) as well for developers (reduced backend complexity, simplified state management, etc.). Refer to References for more on this.