The engine is the router
The engine receives function calls, routes them to connected workers, and routes results back to callers. Project workers have their own lifecycle under Compose;config.yaml is not a
general process manager.
Engine configuration
The engine readsconfig.yaml from the project root. Pass --config <path> to select another file.
When the file is missing, interactive sessions offer to create it and non-interactive sessions
create an empty one automatically.
configurationiii-worker-manageriii-http-functionsiii-streamiii-sandbox
iii-engine-functions, iii-telemetry, and iii-observability automatically;
do not declare them. Any other name makes initial startup or config reload fail with
UNSUPPORTED_CONFIG_WORKERS and a link to the manual migration
guide.
Project workers
HTTP, cron, queue, state, pubsub, bridge, application workers, and other registry workers belong inworker-compose.yaml. For the normal managed lifecycle, move the five engine configs into its
direct engine.workers map and start the single file:
config.yaml only when another supervisor owns the engine. In that case omit
engine: from the Compose file, run the processes separately, and connect with
--engine <ws-url> or III_URL.
See Workers for Compose lifecycle operations and Move workers from config.yaml to
Compose for existing projects.
Environment variable expansion
Values in directconfig.yaml and engine.workers support ${VAR:default}; the engine expands
them before typing the generated YAML. Compose-owned fields such as engine.url use
${VAR:-default}. config_override is likewise carried to the configuration worker without
Compose expanding it.
Default configuration
The generated file containsworkers: []. Mandatory engine services still start, but no project
worker does. Add project workers to worker-compose.yaml and use iii compose --up; do not add them
to the empty engine list.
Workers may also be started by another supervisor or on another machine. Any SDK process that
connects and registers is a worker, independent of Compose.