
If youāre building an app for someone else and theyāre going to run it themselves on Fly.io, youāve got two good options. You can either start development inside their Fly.io organization, or build it in yours and move it over later. Hereās how both paths work, and what can get messy during the move.
Option 1: Build in the customerās org from day one
The cleanest handoff is no handoff at all. Have the customer create their own Fly.io organization before you start building.- They create the organization and add a payment method. Basic stuff. This is what Fly.io bills against.
- They invite your devs to their org. They can do this in the dashboard under āTeam ā Invite Member.ā You now have access to deploy apps directly into their account.
- You build inside their org. Fly.io treats organizations as isolated namespaces, so thereās no awkward boundary crossing here. Itās just your team shipping code, in their environment.
- They remove you when itās over. Or notāyou can stick around for maintenance if thatās part of the deal.
- What can get messy. Make sure that the invited developer is not the only admin user in your customerās org. Double-check that your customer has at least two admins in their org.
Option 2: Build in your org, then move the app to theirs
Sometimes itās easier to get going inside your own orgāespecially if youāve got infra and tooling already set up. When the app is ready, you move it. Hereās how that works:- Build as usual in your organization.
- Have the customer invite one of your devs to their org. This person needs to be in both orgs to do the move.
- Transfer the app: Use the CLI command
fly apps move <app-name> --org <target-organization-name>, or go to the App Settings page in your Dashboard, click Move app, pick the new organization, and wait for the deployment to finish.

- Be aware: the move causes a couple minutes of downtime. Itās a good idea to schedule this when traffic is low, and inform your users of a maintenance window.
- What moves automatically:
- Machines and volumes (data included)
- Secrets and environment variables
- Certificates and domain names
- LiteFS databases (as long as youāre using
$FLY_APP_NAMEfor the Consul key)
- What doesnāt move automatically:
- Postgres (unmanaged and managed): Moving Postgres databases across orgs is not supported. Youāll need to spin up a new Fly Postgres app in the target org and restore from a volume snapshot. Or you can use
pgloaderto migrate the data. - Upstash Redis: This is tied to an orgās private network. Youāll need to provision a new DB in the new org.
- Tigris buckets: Youāll have to delete the old Tigris bucket, recreate it in the new org, and copy the data over (try
s3sync). Donāt forget to reset your appās secrets.
- Postgres (unmanaged and managed): Moving Postgres databases across orgs is not supported. Youāll need to spin up a new Fly Postgres app in the target org and restore from a volume snapshot. Or you can use