floo.service.toml for single-service apps and floo.app.toml for multi-service apps or apps with managed services.
floo init creates these files. This page is the full reference.
Config shapes
| Shape | Files | When to use |
|---|---|---|
| Single service | floo.service.toml | One service, no managed services |
| Single service + managed | floo.app.toml | One service with Postgres, Redis, or Storage |
| Inline multi-service | floo.app.toml | All services defined in one file |
| Delegated multi-service | floo.app.toml + per-service floo.service.toml | Service config lives alongside service code |
Single service
Single service with managed services
Inline multi-service
type and port in floo.app.toml, do not also place a floo.service.toml in that service’s directory. The CLI rejects this during preflight.
Delegated multi-service
Rootfloo.app.toml:
web/floo.service.toml:
api/floo.service.toml:
Field reference
[app]
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | App name (DNS-safe) |
access_mode | string | "public" | public, password, accounts, sso |
[service] (floo.service.toml only)
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | Service name (DNS-safe, 2-21 chars) |
type | string | required | web, api, worker |
port | integer | required | Port the service listens on |
ingress | string | "public" | public or internal |
env_file | string | none | Relative path to env file synced on deploy |
[services.<name>] (floo.app.toml)
Same fields as [service] above, plus:
| Field | Type | Default | Description |
|---|---|---|---|
path | string | required | Relative path to service directory |
dev_command | string | none | Shell command run by floo dev to start the service locally. Example: "npm run dev" |
migrate_command | string | none | Shell command run before floo dev starts the service (and after each deploy). Example: "alembic upgrade head" |
domain | string | none | Custom domain for this service. Example: "api.example.com" |
[resources]
| Field | Type | Default | Description |
|---|---|---|---|
cpu | string | "1" | vCPU allocation |
memory | string | "512Mi" | Memory allocation |
max_instances | integer | 10 | Max instance count |
[resources] section.
[postgres], [redis], [storage]
| Field | Type | Default | Description |
|---|---|---|---|
tier | string | "basic" | basic, standard, performance |
floo.app.toml. They are not placed under [services.*].
[auth]
| Field | Type | Default | Description |
|---|---|---|---|
redirect_uris | array | none | OAuth callback URLs for accounts mode |
[environments.<name>]
| Field | Type | Default | Description |
|---|---|---|---|
access_mode | string | none | Override access mode per environment |
Precedence
When you run a command without--app, the CLI resolves the app in this order:
--app <name>flag- Nearest
floo.service.toml - Nearest
floo.app.toml
[environments.dev].access_mode[app].access_modeinfloo.app.toml[app].access_modeinfloo.service.toml
[resources].
Validation
- service names are duplicated
- a service port is invalid
- an inline service also has a
floo.service.tomlin its directory - a multi-service app has no public service
- managed service sections are placed in
floo.service.tomlinstead offloo.app.toml