Ephemerality & TTL
Anonymous deploys expire 14 days after deploy and are swept by a garbage collector within minutes; deploying while logged in or claiming a site makes it permanent.
flypod deploys are ephemeral by default. An anonymous deploy gets a 14-day time-to-live and is then deleted. Ownership removes the expiry entirely; an owned site is permanent.
The 14-day TTL
When you deploy without authenticating, flypod sets:
expires_at = now + 14 daysWhen you deploy with an account session, it sets:
expires_at = null // permanentSo the TTL is a property of ownership, not of the content. The same files expire if deployed anonymously and live forever if deployed by an account.
One exception shortens it: an anonymous deploy (or update) that the content screen scores as suspicious, but not bad enough to refuse, is still published, with its expiry cut to 24 hours from then instead of 14 days. An owned deploy keeps its permanent life either way.
A credential that is sent but not accepted never falls back to an anonymous,
expiring deploy: the deploy fails with token_rejected instead.
Expiry and the garbage collector
Expiry is enforced on every request: from the moment expires_at passes, the
site answers 410 Gone (see status codes),
and a browser gets a short "This preview has expired" page.
A garbage collector then deletes expired sites, both their files and their
metadata. On the hosted Worker it runs every 5 minutes, so an expired site
is removed within minutes. After that its address is simply unknown: it
answers 404, and a browser gets a page saying that preview links last 14 days
unless their owner keeps them. The data is gone.
The same sweep also deletes versions that are not live once they are more than 7 days old, on every site, owned or not (see Versioning).
Treat anonymous deploys as disposable. If a URL needs to outlive 14 days, make the site owned before it expires. There is no recovery after GC sweeps it.
How to persist a site
There are two ways to get a permanent (expires_at = null) site:
Deploy while owned
flypod login then deploy. The site is permanent from the start.
Claim an existing deploy
Attach an already-deployed anonymous site to your account.
flypod login # approve this machine in your browser
flypod ./dist # owned, expires_at = nullAlready deployed anonymously? Just run flypod login. The CLI auto-claims every
anonymous site it remembers locally, sending each site's stored manage_token to
POST /account/bulk-attach — no copy-paste, no tokens on the terminal. For the
browser, the equivalent bulk-claim runs on sign-up: every site you deployed
from that browser session re-points to your new account in one step. A site
published from a chat app (the MCP endpoint) comes with a keep_url: open it,
sign in, and press one button. See
Tokens & ownership for the details.
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.
Tokens & ownership
Understand flypod account sessions, per-site manage tokens, claim tokens, and how each credential changes ownership and expiry.