Versioning
Semantic versioning for the three SDKs, the deprecation window, and how to read the SDK version at runtime.
The Python package (mubit-sdk), the JavaScript package (@mubit-ai/sdk) and the Rust crate (mubit-sdk) are generated from one contract and released in lockstep: the same version number means the same operations, the same names per language, and the same wire behaviour.
Semantic versioning
Releases follow MAJOR.MINOR.PATCH:
| Part | Changes |
|---|---|
MAJOR | Removes names that were deprecated in the previous minor releases; may change defaults |
MINOR | Adds operations, options, types and namespaces; marks names as deprecated; never removes |
PATCH | Fixes; no surface change |
The packages generally follow SemVer conventions, though certain backwards-incompatible changes may be released as minor versions:
- Changes that only affect static types, without breaking runtime behavior.
- Changes to library internals which are technically public but not intended or documented for external use. (Please open a GitHub issue to let us know if you are relying on such internals.)
- Changes that we do not expect to impact the vast majority of users in practice.
Everything else that removes or changes a documented name waits for the next major.
Deprecation window
A deprecated name warns for one minor and is removed in the next major. In practice: a name deprecated in 0.14 keeps working through every 0.14.x release and is removed in 1.0. Every deprecation is listed in Migration with its replacement.
Each deprecated call site prints one line naming the replacement and the removal version:
mubit: client.query() is deprecated and will be removed in mubit-sdk 1.0; use client.raw.invoke("control.query") — https://docs.mubit.ai/sdk/migration#query| Language | Mechanism | Strict mode (fail on any use) |
|---|---|---|
| Python | MubitDeprecationWarning (a DeprecationWarning) once per call site, attributed to your code, plus one logger.warning on first emission | python -W error::mubit.MubitDeprecationWarning |
| JavaScript | console.warn once per call site; the .d.ts marks the member @deprecated so editors strike it through | MUBIT_DEPRECATIONS=error throws instead of warning |
| Rust | #[deprecated(since = "0.14.0", note = "...")] on the item | #![deny(deprecated)] in your crate |
mubit doctor prints the number of distinct deprecation warnings emitted in the current process.
Reading the version at runtime
The SDK also reports the server it talks to: mubit.capabilities() returns mode (loop_v1, legacy, unreachable) and server_version, and mubit doctor prints both on its mode: line. A legacy server accepts every 0.14 call, but run-level outcomes are ignored and run end reflects synchronously; upgrade the instance to get the loop.
Pinning
| Package | Recommended pin |
|---|---|
| Python | pip install "mubit-sdk>=0.14,<1" |
| JavaScript | npm install @mubit-ai/sdk@^0.14 |
| Rust | mubit-sdk = "0.14" in Cargo.toml |
Framework integration packages (mubit-crewai, mubit-langgraph, @mubit-ai/langgraph, @mubit-ai/ai-sdk, …) declare the SDK range they were built against; a mismatched upgrade fails at install time rather than at runtime. The Changelog lists the matching integration versions for each SDK release.
Documentation per major
This site documents the current major. When a new major ships, a read-only snapshot of the last docs for the previous major stays available and is linked from the Changelog, so code written against 0.14 can still be read against the docs it was written from.