Skip to main content
The iii engine is the runtime that connects workers, stores registrations, and routes invocations.

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.
The Engine is the central orchestrator of a iii system. It maintains a registry of every connected Worker and every registered Function, and routes trigger() calls to the correct Worker — regardless of language, location, or runtime.

Responsibilities

Configuration

The Engine is configured via iii-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-available trigger to notify other Workers
Workers reconnect automatically via the SDK’s built-in reconnection logic. On reconnect, all 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 whose WorkerEntry 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:
Failure paths log 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 can trigger() a Function on Worker B without knowing where Worker B is running.
For deployment options and production configuration, see Deployment.