The III SDK provides a distributed function execution platform that connects multiple workers (services) through a central III Engine. Workers communicate with the Engine via WebSocket connections, enabling real-time function invocation, bidirectional streaming, and event-driven architectures.
The SDK manages WebSocket connections with automatic reconnection:
// Connection statestype IIIConnectionState = | 'disconnected' // Initial state or after shutdown | 'connecting' // Attempting initial connection | 'connected' // Active WebSocket connection | 'reconnecting' // Retrying after disconnect | 'failed' // Max retries exceeded
The SDK automatically reconnects with exponential backoff (default: 1s initial delay, 30s max delay, infinite retries). Functions and triggers are re-registered on reconnection.
The SDK implements resilient reconnection with configurable backoff:
interface IIIReconnectionConfig { initialDelayMs: number // Starting delay (default: 1000ms) maxDelayMs: number // Maximum delay cap (default: 30000ms) backoffMultiplier: number // Exponential factor (default: 2) jitterFactor: number // Random jitter 0-1 (default: 0.3) maxRetries: number // Max attempts, -1 for infinite (default: -1)}
Reconnection behavior:
1
Connection Lost
WebSocket close event detected, state changes to reconnecting
The architecture supports W3C Trace Context for end-to-end observability:
Every function invocation automatically propagates traceparent and baggage headers, enabling distributed tracing across workers without manual instrumentation.
The III SDK is available in three runtimes with consistent APIs:
Node.js
Python
Rust
import { init } from 'iii-sdk'const iii = init('ws://localhost:8080', { workerName: 'my-service', enableMetricsReporting: true, invocationTimeoutMs: 30000})
Location: packages/node/iii/src/iii.ts
from iii import III, InitOptionsiii = III('ws://localhost:8080', InitOptions( worker_name='my-service', enable_metrics_reporting=True, invocation_timeout_ms=30000))await iii.connect()
Location: packages/python/iii/src/iii/iii.py
use iii::{III, InitOptions};let iii = III::init("ws://localhost:8080", InitOptions { worker_name: Some("my-service".into()), enable_metrics_reporting: true, invocation_timeout_ms: 30000, ..Default::default()}).await?;