Skip to content
flypod
Concepts

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 days

When you deploy with an account session, it sets:

expires_at = null   // permanent

So 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:

flypod login    # approve this machine in your browser
flypod ./dist   # owned, expires_at = null

Already 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.

On this page