Versioning
Every deploy is an immutable version identified by a hash of its content; a single live pointer selects which version a site serves, moved by update and rollback.
Every deploy produces a version: an immutable snapshot of the site's content. A site has one live pointer that selects which version it serves. Deploying, updating, and rolling back are all just operations on versions and that pointer.
Content-hashed version ids
A version_id is the first 16 hex characters of the SHA-256 hash of the
deploy's content. The id is derived entirely from what you uploaded, which
makes deploys idempotent:
- Identical content always produces the identical version id.
- A redeploy of unchanged content stores no duplicate. The existing version is reused.
flypod updatewith no changes reportsNo changesand does nothing.
flypod update
# No changes (already live)Versions are immutable
Once stored, a version never changes. There is no "edit a version"; you only
ever create new ones. Every deploy and every update creates a version (unless
the content already exists, per above).
The live pointer
A site serves exactly one version at a time: the one its live pointer references. The serve plane reads this pointer to pick which files to return, and embeds the live version id in the ETag.
Two commands move the pointer:
| Command | Moves the live pointer to |
|---|---|
flypod update | The newest version (deploying first if content changed) |
flypod rollback | Any prior version in history |
Update vs rollback
flypod update ships forward: it deploys the current folder as a new version
(or reuses an existing one) and points the site at it.
flypod rollback moves the live pointer back to an earlier version. Nothing
is deleted. The versions you rolled past still exist, so you can roll forward
again at any time. List the full history, newest first, with
flypod versions.
Because rollback only moves a pointer, it is instant and reversible. The version you're "leaving" is not removed; rolling forward re-points the site to it.
How it works
flypod has two planes. A deploy pipeline ingests a zip into an immutable version, and a serve plane routes a subdomain to that version's files.
Ephemerality & TTL
Anonymous deploys expire 14 days after deploy and are swept by a garbage collector; deploying while logged in or claiming a site makes it permanent.