Lock-in is a product feature (for them)
Platforms love your content when leaving hurts. Proprietary blocks, opaque databases, export tools that “almost” work — that’s not an accident.
Portability as a design constraint
If the CMS is a folder + a SQLite file + uploads/, moving hosts is an afternoon, not a quarter.
Forma’s site packages lean into that:
manifest.json # format + schema versions
data.json # portable content
database/forma.db # the CMS
uploads/ # media
Future app versions can migrate using schema_version. Packages newer than the running app get rejected — better than silent corruption.
Practical ritual
- Before any brave deploy: download a site package
- Keep
database/anduploads/when you replace code - Test restore on a scratch vhost once, so you’re not learning under fire
Freedom isn’t ideological
It’s operational. Portable sites mean you can fire a host, fork a design, or hand a client their whole world on a USB stick without apologizing.