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, no files are re-stored, and
flypod versionsdoes not grow. flypod updatestill uploads and still reports the version as live. There is no "nothing changed" message — the deduplication happens server-side, on the hash, and is invisible from the command line.
This makes flypod update safe to call on every iteration of a loop: a run
that changes nothing costs an upload and produces no new version.
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
a version with that content hash already exists — in which case that version is
reused.
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.