This page covers iii.worker.yaml configuration options. iii.worker.yaml exists at a worker’s
root and tells iii how to provision the worker’s runtime, install its dependencies, start its
process, and pass through configuration. The engine reads it when starting a worker from
config.yaml and when the
iii worker CLI starts, stops, or restarts a managed worker.
For how to connect a worker into a project once its manifest exists, see
Creating Workers / Workers.
iii.worker.yaml is not needed to run a worker process directly (for example node ./myworker/src/index.js). A worker that connects to the engine with the SDK behaves identically
whether iii started it or not.
name
Required. Must satisfy the registry’s worker-name rules (the same validation the registry applies to
published names). A worker cannot list itself in dependencies.
runtime
Declares details about the worker’s environment.
base_image
Optional. Overrides the default OCI rootfs. Must be a valid OCI reference (alphanumerics plus
. _ - / : @ +, max 512 characters). Invalid references are dropped with a warning and the default
is used.
runtime:
base_image: oven/bun:1 # From docker.io
# Or a fully-qualified registry path, e.g. GitHub Container Registry:
# base_image: ghcr.io/astral-sh/uv:bookworm-slim
scripts
Explicit lifecycle scripts. These define how to initialize a worker’s base environment (setup),
install a worker’s dependencies (install), and run a worker whenever it is started or restarted
(start).
scripts:
setup: "apt-get update && apt-get install -y build-essential"
install: "npm install"
start: "npx tsx src/index.ts"
When scripts is omitted, the engine infers install and start from runtime.kind and
runtime.package_manager. The per-field examples below show common values for each language.
setup
Runs once when the sandbox is provisioned. Use it for system-level packages your dependencies need
to build.
scripts:
setup: "apt-get update && apt-get install -y build-essential"
install
Installs dependencies.
scripts:
install: "npm install"
start
Starts the worker process.
scripts:
start: "npx tsx watch src/index.ts"
env
Map of environment variables injected into the worker process. Keys and values must be strings. The
keys III_URL and III_ENGINE_URL are silently filtered out; the engine sets the connection URL
itself.
env:
LOG_LEVEL: info
MY_API_KEY: replace-me
dependencies
Map of <worker-name>: <semver range> declaring other workers this worker depends on, resolved
against the registry.
dependencies:
iii-http: "^0.19"
iii-state: "^0.19"
Rules:
- Each name must satisfy the registry’s worker-name validation.
- Each range must be a valid semver version requirement (for example
^1.2, ~0.5.0, >=2 <3).
- Duplicate keys are an error.
- A worker cannot depend on itself.
- Prerelease ranges are accepted syntactically, but the default registry resolver serves only stable
versions, so a prerelease range surfaces as
version_not_found at resolve time.
resources
Optional CPU and memory requests for the worker’s sandbox. Requests above the cap are clamped to the
cap. For bundle workers this emits a W182 BundleResourceClamped warning at install time.
resources:
cpus: 2
memory: 2048
cpus
Optional integer. Number of vCPUs. Defaults to 2, capped at 4.
memory
Optional integer. Memory in MiB. Defaults to 2048, capped at 4096.