flypod
Guides

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.

Point flypod at a directory of static files:

npx flypod ./dist

flypod zips the folder, POSTs it to the server, and prints a live URL:

https://ab12cd34.flypod.dev

Open it. The site is live. You can also deploy a single file:

npx flypod ./index.html

Let flypod find the folder

Run with no path and flypod auto-detects a build directory: the first of these that contains an index.html:

dist/  build/  out/  .output/public  .vercel/output/static  public/  _site/
npx flypod

Auto-detection only matches a directory that actually contains an index.html. If none do, pass the path explicitly.

What the output looks like

In a terminal (TTY), flypod shows a banner, a spinner, and post-deploy hints. The split never changes:

  • The live URL goes to stdout.
  • The banner, spinner, and hints go to stderr.

So URL=$(npx flypod ./dist) captures just the URL. When stdout is not a TTY (a pipe, a CI job, an agent), flypod auto-detects it and strips the animation. No flag needed.

Machine-readable output

For structured output, use --json and parse stdout:

npx flypod ./dist --json
{
  "ok": true,
  "url": "https://ab12cd34.flypod.dev",
  "site_id": "ab12cd34",
  "version_id": "v_...",
  "expires_at": "2026-07-02T00:00:00.000Z",
  "manage_token": "...",
  "claim_token": "...",
  "owner_account_id": null,
  "source": "./dist",
  "files": 12,
  "bytes": 48211,
  "elapsed_ms": 734
}

For the bare minimum, use --quiet. The URL is the only thing on stdout, and the manage_token is printed to stderr:

URL=$(npx flypod ./dist --quiet)

Owned vs anonymous

If you are logged in, the deploy is owned and permanent. If not, it is anonymous and expires after 14 days. Running flypod login later automatically claims every anonymous site this CLI remembers — no tokens to copy. The JSON output also includes a claim_token for the rare case where you need to claim a site from a different machine. See Accounts & claiming.

After a successful deploy, flypod records a link between the current folder and the site it deployed to. This lets flypod update, flypod versions, and flypod rollback work without an ID. The link lives in a per-user config directory (not in your repo), and recording it is best-effort: if it fails, the deploy still succeeds.

Flags

FlagEffect
--jsonEmit a JSON object on stdout.
-q, --quietURL on stdout, manage_token on stderr.
-h, --helpPrint usage.
-v, --versionPrint the flypod version.

Next steps

On this page