Skip to main content

What changed

The user-facing types that the three SDKs share with the engine move out of the root SDK into a new package, @iii-dev/helpers (npm), iii-helpers (crate and PyPI, import iii_helpers). The package is organized into four submodules. This is a breaking change: the moved symbols are removed from the root SDK and are importable only from the helpers package.

Moved symbols

What stays in the root SDK

Types that reference core-only types stay in the root SDK in all three languages, because moving them would create a dependency cycle from the helpers package back into the core SDK: IStream, the streaming StreamRequest and StreamResponse, MiddlewareFunctionInput, and TriggerActionEnqueue. The root SDK depends on iii-helpers and imports the moved types from the submodules internally where its own code needs them. EnqueueResult is the exception in the queue submodule: its canonical home is iii_helpers::queue, but it is also re-exported from the root SDK as the return companion to TriggerAction.Enqueue, so it remains importable from iii-sdk / iii / iii_sdk without a migration.

Migration

Import the moved types from the helpers package. Node:
Python:
Rust:

Why

These types are part of the shared contract between the SDKs and the engine. Housing them in one separately versioned package gives a single source of truth, lets consumers depend on only the surface they need, and keeps the root SDK focused on the worker and runtime API. It follows the @iii-dev/observability precedent. The helpers package has no dependency on the root SDK, so the dependency direction stays one way.