Update & rollback
Ship a new version to a site, list its history, and roll back. The day-to-day loop, with no IDs to remember.
After the first deploy, you rarely type a site ID again. flypod links the current folder to its site, so the loop is: edit → update → check → roll back.
Ship a change
Edit your files, then push a new version to the same site:
flypod update ✓ Updated · version 8f1a0c2e is live
https://a3f1c2d4e5b60789.flypod.page
undo flypod rollback puts the previous version back
expires 19 Oct 2026 in 14 days
keep it flypod login free · removes the expiryThe new version is uploaded and goes live immediately. Each version is
immutable. Plain flypod in the same folder does the same thing; to make a
separate site from this folder instead, run flypod --new.
Versions are content-addressed: the version id is the hash of the files. Re-running
flypod update with byte-for-byte identical content gives you back the same version
id and adds nothing to the history. The bytes are still uploaded, and the CLI reports
the version as live rather than printing a "no changes" message.
List history
flypod versionsOutput is newest-first, with the live version marked:
8f1a0c2e44b7d913 18 Jun 2026 14:22 UTC ● live
7c0d19e2a4b35f18 17 Jun 2026 09:11 UTC
5a92c3d1e07b4a66 15 Jun 2026 18:40 UTCPiped, the same list is tab-separated rows on stdout (version id, timestamp,
and live on the live one), with the expiry date on stderr.
Versions that are not live are kept for 7 days, then deleted. The live version is never collected, however old it is, but you can only roll back to a version from the last week.
Roll back
With no argument, flypod rolls back to the previous version:
flypod rollback ✓ Rolled back · version 7c0d19e2 is live
https://a3f1c2d4e5b60789.flypod.pageTo target an exact version, pass its id or an unambiguous prefix:
flypod rollback 7c0d19e2a4b35f18
flypod rollback 7c0dWith no argument, flypod refuses to roll back if the site has only one
version, or if the live version is already the oldest (no_such_version).
Passing an id also works in the other direction: it makes a newer version live
again after a rollback. A prefix that matches more than one version is a usage
error; pass a longer one.
Multiple projects
If a folder isn't linked, or you're targeting a different site, pass --site:
flypod update --site a3f1c2d4e5b60789
flypod versions --site a3f1c2d4e5b60789
flypod rollback --site a3f1c2d4e5b60789For an anonymous site on a machine that doesn't remember it, authorize the
action with that deploy's manage_token — reveal it with
flypod token on the machine that does:
flypod update --site a3f1c2d4e5b60789 --token <manage_token>
flypod rollback --site a3f1c2d4e5b60789 --token <manage_token>--token needs --site here: a machine that doesn't remember the site has no
folder link to find it by.
On your own machine you need none of this: the token is already stored with the
folder link. And if the site is yours, flypod login on the second machine
beats moving a token around.
Self-heal on a stale link
If flypod update gets a 404 (the linked site no longer exists), flypod drops
the stale folder link and fails with site_gone, telling you to run flypod to
deploy fresh. A 401 or 403 fails with unauthorized; pass --token or log
in. In a folder with no link and no --site, the commands fail with no_site
before doing anything.
JSON & quiet
update, versions, and rollback all accept --json. update also accepts
-q/--quiet (the URL on stdout, nothing else). When stdout is not a
terminal, update and rollback print the URL on stdout anyway.
flypod update --json
flypod versions --json
flypod rollback --jsonupdatereturnssite_id,version_id,url,expires_at,healed,warningsandnext, the same shape as a first deploy.versionsreturnslive_version_id,versions(each withversion_idandcreated_atin epoch ms),expires_at, andtimeline.rollbackreturnssite_id,live_version_idandurl.
Version history for visitors
flypod rollback changes the site for everyone. To let reviewers look at
earlier versions without changing what is live, turn on the timeline:
flypod update --timeline # ship a change and turn it on
flypod versions --timeline # turn it on without deploying
flypod versions --no-timeline # turn it off againWith it on, the site's pages show a History chip that opens earlier
versions, each version is served at its own address
(https://<site>--<version>.flypod.page), and
https://<site>.flypod.page/_flypod/history compares two side by side. The
--json output adds timeline: true and a history_url, and each entry in
flypod versions --json gets a url. It is off by default because it makes
replaced versions public; the live site is served the same either way.
flypod ./dist --timeline turns it on at the first deploy. --history and
--no-history are accepted as aliases.
Flags
| Command | Flags |
|---|---|
flypod update [path] | --site <id>, --token <manage_token>, --timeline, --no-timeline, --json, --verbose, -q |
flypod versions | --site <id>, --token <manage_token>, --timeline, --no-timeline, --json |
flypod rollback [version] | --site <id>, --token <manage_token>, --json |
Next steps
Deploy a site
Deploy a folder or a single file to a live URL, with auto-detection of common build directories and machine-readable output for scripts.
Render Markdown to a docs site
Deploy a folder of Markdown files with no index.html and flypod renders them into a styled docs site with a sidebar and home page.