Local-First & Ejectable
An important requirement to ensure you can fully access your data in cloud apps forever is making the backend sync server available for local self-hosting. That's what EJECTABLE apps are about.
Local-first allows users to enjoy all the benefits cloud apps bring (like seamless real-time collaboration, syncing, auto backups) while keeping the data ownership aspect from traditional desktop software.
The problem is that's just the data part. What about the longevity of the service, the app itself, to use the data with? With traditional desktop software the full set of features remains available when a company shuts down. When a cloud app shuts down, or enshittifies, or you simply want to leave, you're left with the data (hopefully) but no good way to use it. All the functionality that's part of the cloud part of the app, features like syncing or collaboration are gone.
An ejectable app allows users to "eject" at any time and switch to self-hosting (or vice versa) by:
- Saving a workspace.zip, which contains all their state.
- Downloading a server.exe/.bin to self-host the backend sync server (possibly even picking their favorite version of the app).
- Being able to run the server executable locally. This should allow you to simply open the workspace data and continue where you left off.
- Making the ejection fully reversible, because the freedom to leave the cloud version with no way back is still a hurdle to using it. Eject from the self-hosted version, sign up for the cloud version and import again.
Making apps local-first and ejectable should give us the best of both worlds: the convenience and features of cloud-based apps while being as future proof as DOOM.EXE or NOTEPAD.EXE from decades ago. They ensure that what we create with our modern tools today remains accessible and functional far into the future (of course we're building Thymer as an ejectable app, too).