Documentation Index
Fetch the complete documentation index at: https://motiadev-docs-verdict-review-plan.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Migrating from Motia
Breaking. The Motia framework is deprecated in favor of usingiii-sdk directly. Moving to the SDK unlocks multi-worker orchestration, browser connectivity via iii-browser-sdk with RBAC, and a direct understanding of iii’s three primitives — Workers, Functions, and Triggers. Your existing Motia project becomes one worker in a larger iii deployment instead of a standalone monolith.Node / TypeScript migration guide → · Python migration guide →SDK discovery wrappers removed
Breaking. The convenience discovery wrappers were removed from the Node, browser, Rust, and Python SDKs:listFunctions/list_functions/list_functions_asynclistWorkers/list_workers/list_workers_asynclistTriggers/list_triggers/list_triggers_asynclistTriggerTypes/list_trigger_types/list_trigger_types_asynconFunctionsAvailable/on_functions_available
trigger() against the built-in engine functions and register engine::functions-available like any other trigger type. This keeps the SDK surfaces aligned with the engine’s “use the primitives directly” design.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 core primitives as the Node SDK — registerFunction, trigger, registerTrigger, and createChannel 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 add ./my-project registers a local directory as a first-class managed worker that runs inside a lightweight microVM with auto-detected runtimes, dependency caching, and full lifecycle support (start, stop, list, remove) — no Dockerfiles needed. Requires macOS Apple Silicon or Linux with KVM.Managing Container Workers → · Developing Sandbox Workers →iii worker exec
A new iii worker exec <name> -- <cmd> command runs arbitrary commands inside a running worker’s microVM — think docker exec for iii workers. stdin/stdout/stderr flow through, exit codes pass back, Ctrl-C delivers SIGINT (twice for SIGKILL). TTY mode auto-detects when both stdin and stdout are terminals, so iii worker exec my-worker -- sh in a terminal gives you a real interactive shell with line editing and job control. Pass --timeout 30s to bound runaway commands (exit 124 matches coreutils).Exec into a running worker →Reproducible worker installs
Registry-managed workers can now be pinned iniii.lock. iii worker add writes the resolved worker graph when the registry provides one, binary workers can record artifacts for multiple platform targets, iii worker verify checks that config.yaml is represented in the lockfile, and iii worker update [worker] refreshes locked pins intentionally.Reproduce Worker Installs →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.