Skip to main content
Start all services in a floo app locally, with credentials from your floo-provisioned managed services injected automatically.
Run it from the project tree containing floo.app.toml. The command does not accept a path argument.

Flags

The --fixture-* flags only take effect for apps with access_mode = "accounts"; against any other mode floo dev warns and skips the proxy. See Add User Auth → Local development for the full walkthrough.

What happens

  1. Resolve, reads floo.app.toml and collects all services with a dev_command
  2. Session, creates a dev session via the floo API
  3. Postgres auth, if the app has managed Postgres, your public IP is authorized for direct connections
  4. Env injection, global + per-service env vars are decrypted and injected into each service process. Managed service credentials follow the same env.managed attachment plan as deploy; DATABASE_URL is rewritten to point to the managed Postgres public IP when Postgres access is authorized.
  5. Migrations, if migrate_command is set for a service, it runs before that service starts
  6. Start, each service’s dev_command is spawned in its path directory with a colored prefix in the terminal
  7. Cleanup, on Ctrl+C, all child processes are terminated and the dev session is deleted

Requirements

  • floo.app.toml must exist in the project directory
  • At least one service must declare dev_command; services without one are skipped
  • Every service floo dev starts must have path and port set
  • Each service must use a unique port

Example

Terminal output:

Discovery vars

Each service receives env vars pointing to the other services running locally: For example, a web service in a web + api app receives API_URL=http://localhost:8000 and NEXT_PUBLIC_API_URL=http://localhost:8000.

JSON output

floo dev --json redacts secret-shaped values by default and sets contains_secrets: true so agent harnesses can reject the payload. Use --reveal-secrets only when you control the destination, such as a local file outside agent context. The child processes still receive the real values.
Startup emits a single JSON object:
Log lines stream as newline-delimited JSON events:
Session end:

Errors