iii

Examples

Real-world code examples for every trigger type and pattern — shown in TypeScript, Python, and Rust.

Each example uses the iii SDK directly. Every page shows the same pattern in three languages so you can pick whichever fits your stack.

SDK model

All three SDKs share the same concepts with language-idiomatic initialization:

  • TypeScript: registerWorker(url) — named function, connection is automatic
  • Python: register_worker(address=url, options?) — creates the client and auto-starts connection
  • Rust: register_worker(url, InitOptions::default())? — creates the client and auto-starts connection
ConceptTypeScriptPythonRust
InitregisterWorker(url)register_worker(url, options?)register_worker(url, InitOptions::default())?
ConnectAuto on registerWorker()Auto on register_worker()Auto on register_worker()
Register functioniii.registerFunction({ id }, handler)iii.register_function({"id": ...}, handler)iii.register_function(RegisterFunctionMessage { id, .. }, |input| ...)
Register triggeriii.registerTrigger({ type, function_id, config })iii.register_trigger({"type": ..., "function_id": ..., "config": ...})iii.register_trigger(RegisterTriggerInput { type_, function_id, config, .. })?
Contextnew Logger()Logger()iii_sdk::Logger()
Trigger (sync)await iii.trigger({ function_id, payload })iii.trigger({'function_id': id, 'payload': data})iii.trigger(TriggerRequest::new(id, data)).await?
Trigger (fire-and-forget)iii.trigger({ function_id, payload, action: TriggerAction.Void() })iii.trigger({'function_id': id, 'payload': data, 'action': TriggerAction.Void()})iii.trigger(TriggerRequest::new(id, data).action(TriggerAction::void())).await?
Publish eventiii.trigger({ function_id: 'enqueue', payload: { topic, data }, action: TriggerAction.Void() })iii.trigger({'function_id': 'enqueue', 'payload': {...}, 'action': TriggerAction.Void()})iii.trigger(TriggerRequest::new("enqueue", json!({...})).action(TriggerAction::void())).await?
State writeiii.trigger({ function_id: 'state::set', payload: { scope, key, value }, action: TriggerAction.Void() })iii.trigger({'function_id': 'state::set', 'payload': {...}, 'action': TriggerAction.Void()})iii.trigger(TriggerRequest::new("state::set", json!({...})).action(TriggerAction::void())).await?
Stream writeiii.trigger({ function_id: 'stream::set', payload: {...} })iii.trigger({'function_id': 'stream::set', 'payload': {...}})streams.update(key, ops).await?

No framework required

These examples use the iii SDK directly, with no Motia framework layer. There are no auto-discovered step files. Each worker is a plain application that connects, registers its functions and triggers, then enters an event loop.

On this page