nixfredFLY.IOFIELD GUIDE · BY NIX UNOFFICIAL
EXECUTE / POC AND DEMO SCRIPTS

POC and demo scripts

Five demos a customer can run on a short call or in a day. Every command is copied from Fly.io’s docs, so the syntax is real, and the expected output is whatever the docs show. Do a dry run the day before, because flags and output change.

This page is drawn from https://fly.io/docs/getting-started/launch-demo/, https://fly.io/docs/launch/autostop-autostart/, https://fly.io/docs/reference/fly-proxy-autostop-autostart/, https://fly.io/docs/launch/volume-storage/, https://fly.io/docs/volumes/overview/, https://fly.io/docs/blueprints/private-applications-flycast/, https://fly.io/docs/networking/flycast/, https://fly.io/docs/networking/private-networking/, https://fly.io/docs/sprites/quickstart/, https://fly.io/docs/sprites/concepts/checkpoints/, https://fly.io/docs/about/free-trial/, https://fly.io/sprites and https://docs.sprites.dev (which served the Sprites docs when fetched 2026-11-04).

Before you start

POC success criteria (agree on these first)

#CriterionHow to show it
1A real app is live on a fly.dev HTTPS URL in minutesDemo 1
2An idle app costs close to nothing and wakes on a requestDemo 2
3Data survives a restartDemo 3
4An internal service is reachable only from the org networkDemo 4
5An agent sandbox can be saved and rolled backDemo 5

Demo 1: zero to a live app with fly launch (5 minutes)

fly launch --image flyio/hellofly:latest
fly status
fly apps open /fred
fly deploy
fly apps destroy

Demo 2: scale to zero with autostop and autostart (5 minutes plus a wait)

fly launch writes these settings by default (https://fly.io/docs/launch/autostop-autostart/):

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = "stop"
  auto_start_machines = true
  min_machines_running = 0
fly status
fly machine suspend <machine-id>
fly machine status <machine-id>
fly machine start <machine-id>

Demo 3: attach a volume and survive a restart (8 minutes)

fly launch --no-deploy
# add to fly.toml:  [mounts]  source = "myapp_data"  destination = "/data"
fly volumes create myapp_data -r <region code>
fly deploy
fly volumes list
fly ssh console -s -C df
fly machine restart <machine id>

Demo 4: private service over Flycast (10 minutes)

fly launch --image nginxdemos/hello --flycast --internal-port 80 --no-deploy
# set force_https = false in [http_service], then:
fly deploy
fly ips list
fly machine run --shell --vm-memory 1024 ubuntu
# inside the shell: apt update && apt install -y curl iputils-ping dnsutils
nslookup <app>.flycast
curl http://<app>.flycast

Demo 5: a Sprite with checkpoint and restore (8 minutes)

# install and create commands: https://fly.io/docs/sprites/quickstart/
# checkpoint and restore commands: https://fly.io/docs/sprites/concepts/checkpoints/
curl -fsSL https://sprites.dev/install.sh | sh
sprite login
sprite create my-first-sprite
sprite use my-first-sprite
sprite exec -- bash -c 'echo Hello from my persistent Sprite! > /home/sprite/greeting.txt'
sprite checkpoint create --comment "demo baseline"
sprite exec -- rm /home/sprite/greeting.txt
sprite restore <checkpoint-id>   # the ID printed by the create step, or from: sprite checkpoint list
sprite exec -- cat /home/sprite/greeting.txt
sprite destroy -s my-first-sprite

POC close-out checklist

← Competitive positioning · FAQ quickfire →