https://<app>.getfloo.app, with managed Postgres, signed-in users, and your own domain.
New to floo? Start with the Quickstart.
1. Add a Dockerfile
This example usesrequirements.txt with fastapi and uvicorn. Export locked dependencies first if your project uses another package manager. The application entry point is app/main.py with an app instance.
Dockerfile
2. Initialize the floo config
Install the CLI and sign in:curl -fsSL https://getfloo.com/install.sh | bash, then floo auth login. An agent can run the same journey over the HTTP API instead, starting from getfloo.com/agents.md.
floo.app.toml
migrate_command = "alembic upgrade head" under [services.web] if you use Alembic. Include Alembic and its migrations in the image. It runs as a one-off job with the new
image before traffic moves to it. A failed migration stops the deploy. Use
expand-then-contract migrations
to keep the schema compatible with both old and new code.
3. Connect the repo and deploy
floo builds from GitHub, not local files, so push first.floo apps github connect needs the floo GitHub App on the account that owns the repository, and opens a browser to install it if it is missing.
Your FastAPI app is live at
https://my-fastapi-app-dev.getfloo.app.Every git push origin main ships to dev. floo releases promote --app my-fastapi-app publishes to https://my-fastapi-app.getfloo.app.4. Add a Postgres database
floo.app.toml
DATABASE_URL is injected into the runtime. With SQLAlchemy 2 and asyncpg installed, preserve TLS verification while converting the URL for the async driver:
app/db.py
migrate_command, the next deploy runs alembic upgrade head against the new database. Dev and prod each get a separate Postgres database and credentials, with no shared state.
File storage
Add[managed.uploads] with type = "storage", attach storage:uploads, and deploy. Configure boto3 in your FastAPI app; see Cloud storage for paygo restrictions and file operations.
5. Add per-user auth
Setaccess_mode = "accounts" and floo handles sign-in:
floo.app.toml
- Redirects unauthenticated requests to a hosted login page.
- Validates the session cookie on every request.
- Injects identity headers into every request that reaches your FastAPI app.
app/main.py
app/auth.py
floo dev --fixture-user (see section 7) or send the headers yourself with curl -H 'X-Floo-User-Email: you@example.com' .... Access modes and identity headers in full: Auth.
6. Add a custom domain
Declare the domain infloo.app.toml:
show prints, then watch
activation:
Host and X-Forwarded-Host from the request, so it needs no extra config. DNS setup and troubleshooting: Custom domains.
7. Local development with dev credentials
dev_command locally with DATABASE_URL and readable env vars from the app’s dev environment: a real connection to your dev Postgres, with no credentials in your shell history. Write-only secrets are withheld; supply separate local values when needed. Prod credentials never reach a local session.
To test signed-in flows, add --fixture-user:
floo dev then puts a proxy in front of each accounts-mode service that injects the same X-Floo-User-* headers floo’s gateway adds in production. The output table shows the raw service URL and the auth-proxied URL; use the auth-proxied one for any path that reads identity headers.
Common gotchas
/healthzis reserved. floo’s edge intercepts that exact path. Use/healthor/livez.- Bind to
0.0.0.0. floo cannot reach127.0.0.1. - Async DB drivers. Use
asyncpgfor async SQLAlchemy. Usepsycopg2-binaryfor sync. Don’t mix. X-Forwarded-Proto. floo’s edge terminates TLS and forwardsX-Forwarded-Proto: https. Build absolute URLs from the forwarded scheme, notrequest.url.scheme.
What’s next
Auth, full reference
Identity headers, access policies, and access modes in detail.
Managed services
Postgres, Redis, Storage: what they cost and how isolation works.
Multi-service routing
Deploy a React or Next.js frontend alongside FastAPI with shared origin.
Environments
Dev vs prod, promotion, env overrides.