Responsibilities
Ports
Engine and SDK patch versions can differ. Keep them on the same minor version line, for example
0.11.x, unless a release note says otherwise.trigger() calls to the correct Worker — regardless of language, location, or runtime.
Responsibilities
Configuration
The Engine is configured viaiii-config.yaml at the root of your project.
Ports
The Engine uses two separate ports:Discovery
The Engine exposes built-in functions for querying the current system state:Worker Disconnect Cleanup
When a Worker disconnects — whether cleanly or due to a crash — the Engine automatically:- Removes all functions the Worker registered
- Cancels all in-flight invocations routed to that Worker
- Unregisters all triggers bound to that Worker’s functions
- Fires the
engine::workers-availabletrigger to notify other Workers
registerFunction and registerTrigger calls are re-sent automatically.
Config Hot-Reload
The Engine watches its config file for changes and automatically reloads when the file is modified. Only workers whoseWorkerEntry actually changed are touched — unchanged workers keep running without interruption.
If the new config is valid, the reload applies atomically. If the new config is invalid, the engine exits with an error showing exactly what is wrong — the operator must fix the config and restart. This prevents running with a stale config unknowingly.
Unchanged workers keep running through the reload — no blip, no dropped invocations. Only workers whose config entries genuinely changed are destroyed and recreated.
Every reload cycle emits a
reload: log line sequence that operators can grep for:
reload: FATAL: ... with the specific error (including file path, line/column for parse errors, and worker name for validation errors) and then exit the engine process.
When the engine is started with
--use-default-config there is no file to watch, so hot-reload is disabled. In-flight invocations on changed or removed workers are not drained — they are dropped when the old worker is destroyed. A bad config causes the engine to exit — configure your process supervisor to NOT auto-restart on this exit code.Architecture Agnostic
iii makes no distinction between cloud providers, colocated servers, serverless functions, or different languages. A Function registered on Worker A cantrigger() a Function on Worker B without knowing where Worker B is running.
For deployment options and production configuration, see Deployment.