Compatibility matrix
mvmforge is the host CLI; mvm-sdk is the language-binding library you
import from your decorated app; mvm is the upstream substrate. The
three move on independent release cadences but ship in coordinated
combinations. Use a row from this table rather than mixing
versions ad-hoc.
The source-of-truth is compatibility.toml
in the repo root. The CI lane just compatibility-check (wired into
just ci) refuses to merge any version bump that doesn’t add a new
row, so this page can’t lag the workspace.
Tested combinations
| mvmforge | mvm-sdk (Python) | mvm-sdk (TypeScript) | mvm | Status | Notes |
|---|---|---|---|---|---|
0.1.0 | 0.1.2 | 0.1.2 | b2137b0 | current | Initial alpha. Function-call entrypoints, deny-default network, deterministic source bundle. Real-VM boot validated against mvm@b2137b0 for both x86_64-linux and aarch64-linux. Pre-W3/W4 transition (factories live in mvmforge; tarball artifacts not yet supported by mvmctl). |
Reading the table
- mvmforge — Rust workspace version (
Cargo.toml[workspace.package] version). Same value for themvmforgehost CLI and themvmforge-ir/mvmforge-runtimecrates. - mvm-sdk (Python) —
sdks/python/pyproject.tomlversion. Published to PyPI asmvm-sdk(the import path staysimport mvm). - mvm-sdk (TypeScript) —
sdks/typescript/package.jsonversion. Published to npm asmvm-sdk. - mvm — short-hash of the
mvmflake revision pinned incrates/mvmforge/src/mvm_pin.rs::MVM_REV. Override per-developer withMVMFORGE_MVM_FLAKE_URLfor local checkouts. - Status — one of
current(recommended),supported(older combination still tested in CI), ordeprecated(no further validation; upgrade).
Bumping a pinned version
When you bump any of the four pinned values:
- Update the manifest (
Cargo.toml,pyproject.toml,package.json, ormvm_pin.rs). - Append a new
[[combination]]row tocompatibility.tomlwith the new value(s).just compatibility-checkwill fail until you do — the failure message tells you exactly which row to add. - Update this page’s “Tested combinations” table to reflect the new
row (and mark the previous row as
supportedordeprecatedas appropriate). - Re-run
just ciand commit all four changes together.
Mixing across rows (“mvmforge 0.1.5 with mvm-sdk 0.1.2 because we
haven’t released the new SDK yet”) is unsupported — schema and
wire-format invariants only hold within a single combination.
Why not auto-resolve?
A pure dependency-resolution graph (e.g. SemVer ranges in Cargo.toml)
covers the same surface for code, but the substrate boundary
(mvm ↔ wrappers ↔ wire contract) lives outside Cargo’s view. The
table is the explicit cross-repo truth-set; CI checks it programmatically.
See also
- Releasing — the workflow that produces a new combination.
compatibility.toml— machine-readable source of truth.scripts/compatibility_check.py— the CI gate.