Skip to main content

iii: Backend Orchestration Simplified

iii (pronounced “three eye”) unifies your existing backend stack with a single engine and two primitives: Function and Trigger. No more gluing together separate tools for APIs, queues, cron, state, and real-time communication. iii gives you all of that out of the box.

Why iii?

Single Engine

One orchestration layer for HTTP APIs, queues, cron jobs, state management, and streaming

Two Primitives

Everything deconstructs into Functions (do work) and Triggers (cause work)

Any Language

Write functions in Node.js, Python, or Rust—or call any HTTP endpoint

WebSocket Protocol

Efficient, persistent connections for instant function invocation and discovery

Three Core Concepts

A function is anything that can be called to do work—it receives input and optionally returns output.Functions can:
  • Exist anywhere: locally, cloud, serverless, or as a 3rd party HTTP endpoint
  • Mutate state and invoke other functions
  • Be written in any language with an SDK (Node.js, Python, Rust)
  • Be automatically discovered and registered without configuration
All backend functionality deconstructs into the same function primitive.
A trigger causes a Function to run—either explicitly from code or automatically from an event source.Trigger types include:
  • HTTP: Route requests to functions via REST API
  • Queue: Publish/subscribe with Redis-backed job queues
  • Cron: Scheduled execution with distributed locking
  • Stream: Real-time state sync over WebSocket
  • State: React to state changes automatically
Triggers are registered dynamically via the WebSocket protocol.
Automatic registration and deregistration of functions and triggers without configuration files.When workers connect:
  • Functions are registered and become immediately available
  • Triggers are created and begin listening for events
  • All functionality is discoverable across the entire backend stack
When workers disconnect, their resources are automatically cleaned up.

Architecture Overview

iii uses a modular architecture where each concern is handled by a dedicated module:

HTTP Module

REST API with dynamic routing

Queue Module

Pub/sub job processing

Cron Module

Distributed scheduling

Stream Module

Real-time WebSocket sync

State Module

Key-value state storage

Observability

OpenTelemetry metrics & traces

Quick Example

Here’s how you create a function and expose it via HTTP:
import { init } from 'iii-sdk';

const iii = init('ws://localhost:49134');

iii.registerFunction({ id: 'math.add' }, async (input) => {
  return { sum: input.a + input.b };
});

iii.registerTrigger({
  type: 'http',
  function_id: 'math.add',
  config: { api_path: 'add', http_method: 'POST' },
});
Your function is now live at http://localhost:3111/add.

What’s Next?

Install the Engine

Get iii running on your system in under a minute

Build Your First Function

Create a working function with HTTP trigger in 5 minutes

Explore Modules

Learn about HTTP, Queue, Cron, Stream, and State modules

Read Core Concepts

Deep dive into Functions, Triggers, and Discovery
Open Source: iii is licensed under the Elastic License 2.0. Free for most use cases.

Build docs developers (and LLMs) love