Worker RBAC
The iii-worker-manager now supports role-based access control. Configure auth functions that validate WebSocket upgrade requests, attach per-session allow/deny lists for functions, control trigger registration, and auto-prefix function IDs for namespace isolation. An optional middleware function lets you intercept every invocation for audit logging, rate limiting, or payload enrichment.Read the Worker RBAC guide →Trigger format, validation, and metadata
Trigger types now accepttrigger_request_format and call_request_format fields (JSON Schema) so the engine can validate trigger configs and call payloads at registration time. Triggers also support an arbitrary metadata field for tagging and filtering.Define request/response formats → · Trigger architecture →Browser SDK
Your browser is now a first-class iii worker. The newiii-browser-sdk package connects to the engine over a single WebSocket and exposes the same ISdk interface as the Node SDK — registerFunction, trigger, registerTrigger, and onFunctionsAvailable all work identically. Build real-time dashboards, collaborative apps, and bi-directional frontends without REST endpoints or polling.Use iii in the browser →Sandbox and Container Workers
Workers can now run as container workers or sandbox workers. Container workers are OCI images managed through theiii worker CLI — add an image, configure it in config.yaml, and the engine pulls, extracts, and runs it in an isolated sandbox. For local development, iii worker dev boots your project inside a lightweight microVM with auto-detected runtimes, dependency caching, and fast restarts — no Dockerfiles needed. Requires macOS Apple Silicon or Linux with KVM.Managing Container Workers → · Developing Sandbox Workers →Topic-based fan-out queues
Breaking. The topic-based queue API has been renamed. The trigger type changes fromqueue to durable:subscriber, and the publish function changes from enqueue to iii::durable::publish:condition_function_id lets you filter messages server-side before they reach the handler.Use topic-based queues →Node SDK: registerFunction signature change
Breaking. The registerFunction API now takes the function ID as a plain string instead of an options object:Everything is a worker
Breaking. We simplified iii down to three primitives: Workers, Functions, and Triggers. Modules were always workers in disguise — they connect to the engine, register functions, and react to triggers just like SDK workers do. Now the naming reflects that.- Config YAML —
modules:top-level key renamed toworkers:,class:field renamed toname:with short identifiers. - Rust API —
Moduletrait →Worker,register_module!→register_worker!,EngineBuilder::add_module()→add_worker(). - Adapter IDs — changed from long Rust-style paths to short names:
kv,redis,builtin,rabbitmq,local,bridge.