First published 2024.04.18
Last updated 2024.10.26
The Persistence of Memory
Ross Wintle recently wrote about static web apps. These are small, simple, purpose-oriented apps that just run by themselves in the client. I’ve written a couple of these myself – Joseki Party for peer-to-peer games of Go, Dicegraph for calculating complex dice rolling odds, and a PDF imposer for making zines and books. Even Mastodon clients are a really good example of this kind of app - they run on their own, and don’t need to persist any data other than on local device storage.
Wintle has an adjacent article about “static databases” – that is, a way for these simple little apps to persist data somewhere other than local storage. I imagine that this would work basically like IndexedDB, but if a user was authenticated then the data can persist to a server and be accessed across devices.
The trick then, is how to create a client-side application that can store data on a server without needing to run a server itself.
A Database-as-a-Service like Firestore or Supabase can do this – they provide an auth solution and a data store that you can access, all from the client side. But this isn’t really a client-side-only app at this point – this is a frontend app with a backend that you’re renting. As a developer, you’re still on the hook for paying for the storage and bandwidth. You’re on the hook for user data privacy, GDPR compliance, and all the rest. All this data gets persisted under your account credentials after all.
In order to run a simple, free, static, tiny as possible application, you need a persistence solution that the user is responsible for.
An example of this is how IA Writer – which Im writing this on now, from my phone and laptop – uses iCloud to sync across my devices. They don’t need, as an app, to be responsible for any of my data. As long as I’m authenticated with iCloud, the app can rely on iCloud just as it can rely on on-device storage. Small Victories used to generate static websites out of a Dropbox folder. Google Drive is the Android version of iCloud.
A small, focused, and useful web app could really use an operating system agnostic, interoperable solution to rely on for persisting its data. Something client side only that doesn’t need any developer accounts – and therefor hosting bills – that add up over time and maybe cause you a big problem if you get popular.