@iii-dev/helpers package, names were aligned across Node,
Python, and Rust, observability moved into helpers, and the rest of the root
surface was grouped into submodules.
0.20.0 is a clean break: the old root import paths are removed, not kept as
deprecated aliases. Your app will not compile until every step below is applied.
Two backward-compatible exceptions need no migration:
EnqueueResult(all languages) andTriggerActionVoid(Python) stay exported from the root SDK as companions toTriggerAction.- The standalone
iii-observabilitypackages remain published as deprecated shims. Migrate those at your own pace (Step 5).
For the rationale behind each change, see the 0.20.0 changelog.
Step 1: Add the new packages
Install the helpers package alongside the bumped SDK.- Node / TypeScript
- Python
- Rust
iii-observability (deprecated shim) for now or migrate it in Step 5.
Step 2: Rename the client handle
RenameISdk (Node) and III (Rust) to IIIClient. Python already used IIIClient. In the same pass, rename the Rust telemetry config WorkerTelemetryMeta to TelemetryOptions.
- Node / TypeScript
- Python
- Rust
Step 3: Update HTTP request/response types
Rename the bufferedApiRequest / ApiResponse types to HttpRequest / HttpResponse. They now live in the helpers http submodule, along with HttpAuthConfig and HttpInvocationConfig.
- Node / TypeScript
- Python
- Rust
Only the buffered
Api* types moved and were renamed. The streaming
StreamRequest / StreamResponse types stay in the root SDK. Do not change them.Step 4: Move shared types into @iii-dev/helpers
Shared types are grouped into four helpers submodules.| Group | Node | Python | Rust |
|---|---|---|---|
| http | @iii-dev/helpers/http | iii_helpers.http | iii_helpers::http |
| queue | @iii-dev/helpers/queue | iii_helpers.queue | iii_helpers::queue |
| stream | @iii-dev/helpers/stream | iii_helpers.stream | iii_helpers::stream |
| worker-connection-manager | @iii-dev/helpers/worker-connection-manager | iii_helpers.worker_connection_manager | iii_helpers::worker_connection_manager |
UpdateOp, UpdateOpError, MergePath, UpdateSet, and UpdateMerge now live in the stream submodule; MergePath is a named export.
- Node / TypeScript
- Python
- Rust
EnqueueResult is the exception in the queue submodule. Its canonical home is
@iii-dev/helpers/queue (iii_helpers.queue / iii_helpers::queue), but it is
also re-exported from the root SDK (iii-sdk / iii / iii_sdk) as the
companion to TriggerAction.Enqueue. Do not migrate EnqueueResult.For the complete list of moved symbols per submodule, see the
Helpers reference.
Step 5: Update observability imports
Move observability imports into the helpersobservability submodule.
- Node / TypeScript
- Python
- Rust
The standalone
iii-observability packages remain published as deprecated
shims, so this is the one step you can defer. The internal-only Node entry
@iii-dev/observability/internal moved to @iii-dev/helpers/observability/internal
with no shim.Step 6: Update error types and handling
RenameIIIInvocationError to InvocationError (Node iii-sdk/errors, Python iii.errors) and the Rust IIIError to Error (iii_sdk::errors::Error). The old names are removed from the root with no deprecated alias.
- Node / TypeScript
- Python
- Rust
IIIForbiddenError and IIITimeoutError (Python) are removed. Branch on err.code instead, matching Node and Rust.
Step 7: Adopt submodule paths (engine / protocol / internal / utils)
The root exports for these groups are removed with no alias. In Rust,IIIConnectionState moves to iii_sdk::runtime.
- Node / TypeScript
- Python
- Rust
TriggerActionVoid (Python) is also grouped under iii.trigger, but it stays
exported from the package root as the companion to TriggerActionEnqueue. It
is reachable from both iii and iii.trigger. No migration needed.Step 8: Adopt the errors / channel / trigger / runtime submodules
The old root paths for these four groups are also removed in 0.20.0. Import each type from its submodule.- Node / TypeScript
- Python
- Rust
Step 9: Replace removed APIs
A few APIs were removed outright:- Rust
UpdateBuilder→ useUpdateSet/UpdateMergedirectly. - Rust
FieldPath→ the retainedMergePathis the merge/append path argument. - Rust
Valuere-export removed → depend onserde_jsondirectly. - Node
TriggerActionTypealias removed → use theTriggerActionvalue.
- Node / TypeScript
- Python
- Rust
Migration checklist
- Add
@iii-dev/helpersand bumpiii-sdkto 0.20.x - Rename
ISdk/III→IIIClient - Move buffered
Api*→Http*from@iii-dev/helpers/http - Move shared types to helpers submodules
- Move observability imports (deferrable)
- Rename
III*Error→InvocationError/Error - Adopt
engine/protocol/internal/utilspaths - Adopt
errors/channel/trigger/runtimepaths - Replace removed Rust/Node APIs
Result
The worker builds againstiii-sdk 0.20.x with shared types imported from
@iii-dev/helpers, aligned names across the three languages, and submodule
import paths throughout. Only the iii-observability shim still emits a
deprecation signal until Step 5 is applied.