trigger() calls to the correct Worker — regardless of language, location, or runtime.
Responsibilities
| Responsibility | Description |
|---|---|
| Function registry | Tracks all registerFunction calls across connected Workers |
| Worker registry | Tracks connected Workers, their status, and metadata |
| Trigger dispatch | Receives trigger() (sync or fire-and-forget via TriggerAction.Void()) and routes to the correct Worker |
| Module orchestration | Loads and initializes Modules from iii-config.yaml |
| Worker cleanup | When a Worker disconnects, automatically removes all its registered functions and triggers |
Configuration
The Engine is configured viaiii-config.yaml at the root of your project.
Ports
The Engine uses two separate ports:| Port | Default | Purpose |
|---|---|---|
| Engine WebSocket | 49134 | Workers connect here via the SDK |
| HTTP API | 3111 | HTTP endpoints registered by the HTTP module |
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.
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.