Skip to main content
Floo has two config files:
  • floo.service.toml for a single service
  • floo.app.toml for multi-service apps, app-level overrides, and managed services

App Resolution Order

When you run a command without --app, the CLI walks up from the current directory and resolves the app in this order:
  1. --app <name> if you passed it
  2. the nearest floo.service.toml
  3. the nearest floo.app.toml
If both config files exist in the same directory, floo.service.toml wins for app resolution.

Service Discovery Modes

Floo currently resolves services in three shapes:

Single-service

Use one root floo.service.toml:
[app]
name = "my-app"

[service]
name = "web"
type = "web"
port = 3000

Single-service with managed services

If one deployable service also needs managed Postgres, Redis, or Storage, prefer a root floo.app.toml:
[app]
name = "my-app"

[postgres]
enabled = true

[services.web]
type = "web"
path = "."
port = 3000

Inline multi-service

Put deployable services directly in floo.app.toml with type, path, and port:
[app]
name = "my-app"

[services.web]
type = "web"
path = "./web"
port = 3000

[services.api]
type = "api"
path = "./api"
port = 8080
ingress = "public"

Delegated multi-service

Declare service paths in floo.app.toml, then keep the service details inside each service directory’s floo.service.toml:
[app]
name = "my-app"

[services.web]
path = "./web"

[services.api]
path = "./api"

Override Rules

The shipped CLI applies these precedence rules today:
  • --app overrides app name inference from disk
  • per-service resources override global [resources] in floo.app.toml
  • in delegated mode, floo.app.toml can override ingress and domain from a sub-service file
  • for deploy access mode, [environments.dev].access_mode wins over [app].access_mode, which wins over floo.service.toml

Resource Limits

You can set shared defaults in floo.app.toml and override them per service:
[resources]
cpu = "1"
memory = "512Mi"
max_instances = 10

[services.api]
type = "api"
path = "./api"
port = 8080
cpu = "2"
memory = "2Gi"

What Floo Requires

The CLI will fail preflight if:
  • service names are duplicated
  • a service port is invalid
  • an inline app also keeps a conflicting subdirectory floo.service.toml
  • a multi-service app has no public service
Managed infrastructure entries do not count as deployable public services. Keep Postgres, Redis, and Storage in floo.app.toml, not floo.service.toml.

When To Reach For --app

Use --app when:
  • you are running commands outside the repo
  • the working directory has multiple Floo configs above it
  • you want to target an existing app regardless of local config