Skip to main content
Every new capability in an iii system is added by creating a Worker.

Workers are the services

A Worker is the service. When you need new behaviour, you write a new Worker (or install an existing one from the registry); you do not patch the Engine, add a plugin to it, or fork it. The Engine is a fixed coordinator, it routes invocations between Workers and maintains the live registry of what each Worker provides.
For the mental model behind Workers, Functions, Observers, and the Engine, see Understanding iii / Overview. To build Workers continue with this section.

Build on existing Workers

Most Workers you create use one or more existing Workers for their basic functionality. Use what already exists before you write your own. The ones you reach for most often are documented here under Common Workers:
  • Database, run SQL against PostgreSQL, MySQL, or SQLite.
  • HTTP, expose Functions as HTTP endpoints.
  • Queues, async job processing with retries and a dead-letter queue.
  • Observability, traces, metrics, and logs across Workers.
  • Sandboxes, run untrusted or short-lived code in an isolated microVM.
  • Access Control, accept untrusted connections through RBAC-gated listeners.
The full catalog of Workers is published at workers.iii.dev. If you need common functionality for your Worker, look in these two places first.

What’s in this section

Workers

Connect a Worker to the Engine and deploy it.

Functions

Register the Functions a Worker contributes.

Observable functions

Decide what happens when your Functions are observed.

Worker manifest

Provision and start a Worker from iii.worker.yaml.

Channels

Stream large or binary payloads between Workers.