Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when working with iii SDK APIs across Node.js, browser, Python, or Rust: package installation, worker initialization, function/trigger registration, invocation, channels, logging, OpenTelemetry, and language-specific caveats.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-21 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 185% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 6% | 0% |
Use this skill for language-specific SDK details. Use iii-core-primitives for the common model and iii-error-handling for exception handling.
bash# TypeScript / Node.js npm install iii-sdk # Browser apps npm install iii-browser-sdk # Python pip install iii-sdk # Rust cargo add iii-sdk
| SDK | Package | Best for | Important caveat | | --- | --- | --- | --- | | Node.js | iii-sdk | Server-side TypeScript/JavaScript workers | Supports custom headers, Logger, OpenTelemetry, HTTP-invoked functions | | Browser | iii-browser-sdk | Web apps and interactive UI callbacks | Connect through an RBAC-protected listener; keep secrets server-side | | Python | iii-sdk | Sync or async Python workers | Use trigger_async inside async handlers | | Rust | iii-sdk | High-performance tokio workers | Handler error type should map into iii_sdk::Error |
Logger/OpenTelemetry, HTTP request/response types, stream, queue, and worker-connection types live in the helpers package — @iii-dev/helpers (Node, with submodules like /observability and /http) or iii-helpers (Python iii_helpers.*, Rust iii_helpers::*) — installed alongside the SDK.
| Capability | Node | Python | Rust | | --- | --- | --- | --- | | Connect worker | registerWorker(url, options?) | register_worker(address, options?) | register_worker(url, InitOptions) | | Register local function | registerFunction(id, handler, options?) | register_function(id, handler, **options) | register_function(RegisterFunction::new(...)) | | Register trigger | registerTrigger({ type, function_id, config }) | register_trigger({...}) | register_trigger(RegisterTriggerInput { ... }) | | Invoke function | trigger({ function_id, payload }) | trigger(request) / trigger_async(request) | trigger(TriggerRequest) | | Durable enqueue | TriggerAction.Enqueue({ queue }) | {"type": "enqueue", "queue": name} | TriggerAction::Enqueue { queue } | | Channels | createChannel() | create_channel() / create_channel_async() | create_channel(None).await |
typescriptimport { registerWorker } from "iii-sdk"; import { Logger } from "@iii-dev/helpers/observability"; const iii = registerWorker("ws://localhost:49134", { workerName: "node-worker", invocationTimeoutMs: 30000, }); iii.registerFunction("users::lookup", async (input) => { new Logger().info("looking up user", { userId: input.userId }); return { userId: input.userId, name: "Ada" }; });
Node supports custom WebSocket headers, Logger, OpenTelemetry options, HTTP-invoked function registration, trigger metadata, channels, and custom trigger types.
typescriptimport { registerWorker, TriggerAction } from "iii-browser-sdk"; const iii = registerWorker("wss://api.example.com/worker?token=session-token"); const result = await iii.trigger({ function_id: "backend::get-user", payload: { userId: "123" }, }); await iii.trigger({ function_id: "analytics::track", payload: { event: "page_view" }, action: TriggerAction.Void(), });
Do not expose the private engine worker port to untrusted browsers. Browser workers cannot send custom WebSocket headers and must not hold backend secrets.
pythonfrom iii import InitOptions, register_worker from iii_helpers.observability import Logger iii = register_worker( address="ws://localhost:49134", options=InitOptions(worker_name="python-worker"), ) def lookup_user(data): Logger().info("looking up user", {"userId": data["userId"]}) return {"userId": data["userId"], "name": "Ada"} iii.register_function("users::lookup", lookup_user)
Python handlers may be sync or async. Use await iii.trigger_async(request) inside async handlers, and iii.trigger(request) in sync contexts. HttpResponse (from iii_helpers.http) uses camelCase statusCode.
rustuse iii_sdk::{register_worker, InitOptions, RegisterFunction}; use serde_json::json; let iii = register_worker("ws://127.0.0.1:49134", InitOptions::default()); iii.register_function( RegisterFunction::new("users::lookup", |input: serde_json::Value| { Ok(json!({ "userId": input["userId"], "name": "Ada" })) }).description("Look up a user"), )?;
Rust supports typed handlers and schema extraction when input/output types derive schemars::JsonSchema. Add the otel feature when using OpenTelemetry helpers.
readerRef or writerRef through a function payload.channel API details, and language-specific syntax.
architecture.
invocation mode decisions, use iii-core-primitives.
iii-engine-config.
iii-error-handling.Other measured skills in the registry, with their headline benchmark lift.