Ejectable Apps
Traditional desktop software was great in terms of data ownership and longevity. You could copy a program, along with its data files, to another computer and continue working —even years later. This worked so well that even today we can pretty much copy DOOM.EXE or NOTEPAD.EXE, run it, and continue with a saved game or document from the nineties.
Modern apps, on the other hand, rely on cloud-based components, such as backend sync servers, to enable features users now expect: seamless real-time collaboration, automatic backups, and cross-device syncing—all accessible from anywhere, often by simply opening a browser tab.
Unfortunately, cloud-based apps lack the longevity and data ownership guarantees that their traditional counterparts provided. The benefits come at the price of being locked in with all the obvious drawbacks to end users: risk of enshittification of future versions, bait-and-switch pricing, arbitrary account suspensions, apps shutting down at some point in their incredible journey, or breaches of privacy agreements.
But we can have our cake and eat it too by making our cloud-based apps ejectable. Ejectable apps make the backend sync server available for local self-hosting. It allows you to leave the cloud with all your data (or return!) and still work with your data as before even after the original provider ceases operation.
Ejectable goes beyond the basic export some apps offer, which typically provides a partial data dump that's unusable in practice. It can complement a local-first approach (for offline use, end-to-end encryption, and local data copies) by ensuring features like collaboration remain possible even if the service provider disappears. A truly ejectable app provides:
- Complete export: users can download a file containing all their data, such as workspace.zip. This data is complete, not some subset of what the cloud service stores. This means you could restore your entire account or workspace with just the data in that file. Ideally the output is well-documented so alternative apps can also work on the same data.
- Self-hostable option: Users can also download a binary, such as server.exe/.bin, to self-host the app's syncing server. They can even choose their preferred app version.
- Continuity: Using the workspace.zip and server.bin (potentially bundled together), users can resume working with the app and their data just as they did when the app was cloud-hosted. The ejection process should be straightforward. Just click a button or two, download some files; it should not be a 100-step process.
- Reversibility: The ejection is fully reversible and works both ways. When you have the freedom to leave but never come back, that would still be a hurdle to use it. Users should be able to export from their self-hosted version, sign up for the cloud version again, and re-import their data.
With ejectable apps, we can enjoy the benefits and features of a cloud-based service but reclaim control over our data. They ensure that what we create with our modern tools today remains accessible and functional far into the future.
We're building Thymer as an ejectable app, and we hope to see many more ejectable apps in the future.