Repository navigation
MXC SDK v1.0.0 is the first stable release of the MXC SDK surface for Rust, .NET, and Node.js. It provides consistent APIs for creating and running containers, managing container lifecycles, selecting captured, piped, or terminal execution and discovering host support.
- NPM: https://www.npmjs.com/package/@microsoft/mxc-sdk/v/1.0.0
- NuGet: https://www.nuget.org/packages/Microsoft.Mxc.Sdk
- crates.io: https://crates.io/crates/mxc-sdk/1.0.0
See the Assets section for mxc-release-binaries.zip, which contains signed binaries that can be useful for testing.
What's New in v1.0.0
The V1 SDK is stable
The supported public SDK is now available through explicit V1 entrypoints:
- Rust:
mxc_sdk::v1 - .NET:
Microsoft.Mxc.Sdk.V1 - Node.js:
@microsoft/mxc-sdk/v1
The three SDKs share the same operation model and policy concepts while following the conventions of each language. V1 is the stable compatibility boundary for the 1.x release line. MXC will follow semver 2.0 for future changes.
Direct execution supports captured output, live pipes, and PTYs
Callers can choose the execution model that fits their application:
- Run to completion and receive captured stdout, stderr, warnings, metadata, and a typed outcome.
- Spawn with pipes and interact with separate stdin, stdout, and stderr streams through an SDK-owned process handle.
- Spawn with a PTY and interact through a caller-controlled terminal process, including initial terminal dimensions and runtime resize.
PTY support is available only when the selected backend can provide the requested terminal semantics.
Lifecycle managed APIs
The V1 lifecycle managed API supports:
- Provisioning a container and receiving an opaque
ContainerId. - Starting, stopping, and deprovisioning that container.
- Running, spawning, or opening a PTY-backed process inside an existing
container when supported.
Backend discovery, filesystem policy, and telemetry APIs
V1 includes typed APIs for:
- Discovering available backends and their capabilities.
- Building filesystem policy from host tool, user profile, and temporary-directory discovery.
- Querying and managing MXC telemetry consent.
Telemetry remains Windows-only, requires explicit user consent, and is subject to administrative restrictions.
Samples and SDK Reference
Start with the examples and language guides:
The V1 SDK reference compares operations, launch choices, types, fields, containment options, and cross-SDK behavior:
Breaking Changes and Migration Notes
- Import public APIs from the versioned V1 entrypoint for your language.
- Replace legacy sandbox request and lifecycle types with
ContainerRequest,ProvisionRequest,ExecutionRequest,ContainerId, and the corresponding operation-specific options. - Rebuild applications against the v1.0 SDK packages. Rust consumers must use the
mxc_sdk::v1module, .NET consumers must use theMicrosoft.Mxc.Sdk.V1namespace, and Node.js consumers must import from@microsoft/mxc-sdk/v1.
Changelog
- Fail unavailable guarded denial capture before sandbox creation by Richie Gomez (@richiemsft) in #1290
- fix(deps): bump fast-uri and anyhow to patch published CVEs by aeon (@aeonframework) in #1124
- [WSLC] Stop state-aware exec failures from corrupting the output they report on by Soham Das (@SohamDas2021) in #1308
- Fix Node SDK proc scan process-exit race by Gudge (@MGudgin) in #1295
- Fix LXC test temp directory collisions by Gudge (@MGudgin) in #1296
- Stabilize bwrap worker ordering test by Gudge (@MGudgin) in #1297
- [IsolationSession] Call the parentWindowId overloads when the host advertises them by adpa-ms in #1314
- chore(deps-dev): bump ip-address from 10.4.0 to 10.7.2 in /sdk/node by Dependabot (@dependabot)[bot] in #1315
- Bubblewrap tests no longer use invalid legacy networking combinations rejected by #1071 by Elliot (@theelliotm) in #1311
- Adding $schema to all Test and Example Configs by Elliot (@theelliotm) in #1319
- Bug fix: Telemetry fields w/o target_os = Windows would cause build.sh to fail on WSL by Elliot (@theelliotm) in #1320
- Reject an unmappable WSLc one-shot process.cwd by Gudge (@MGudgin) in #1300
- [LXC] RHEL setup is now correctly documented and supported in CI by Elliot (@theelliotm) in #1316
- [Isolation Session] State aware tests now correctly check stderr for malformed_id by Elliot (@theelliotm) in #1325
- [LXC] (1/5) Split run_internal into prepare/tear_down and capture /etc/hosts helper output by Soham Das (@SohamDas2021) in #1313
- Publish exact 1.0 and open 1.1 development by Gudge (@MGudgin) in #1270
- chore(deps): bump the github-actions group with 2 updates by Dependabot (@dependabot)[bot] in #1342
- chore(deps-dev): bump electron from 39.8.10 to 41.10.6 in /tests/playground by Dependabot (@dependabot)[bot] in #1346
- chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in /sdk/node by Dependabot (@dependabot)[bot] in #1344
- chore(deps-dev): bump brace-expansion from 1.1.18 to 1.1.21 in /tests/playground by Dependabot (@dependabot)[bot] in #1343
- chore(deps): bump fast-uri from 3.1.7 to 3.1.8 in /scripts/versioning by Dependabot (@dependabot)[bot] in #1347
- chore(deps-dev): bump undici from 6.28.0 to 6.29.0 in /tests/playground by Dependabot (@dependabot)[bot] in #1345
- [IsolationSession] Refuse process.env without inheritDefaultEnv by adpa-ms in #1339
- Normalize repository line endings by Jeff Whiteside (@jsidewhite) in #1334
- Build .NET SDK as AnyCPU by Branden Bonaby (@bbonaby) in #1340
- test(lxc): bump the LXC suite to schema 0.9, enable internet test, and make its DNS cases hermetic by Elliot (@theelliotm) in #1341
- [Bubblewrap] Skip IPv6 rules when the kernel has no IPv6 by Tim Rogers (@timrogers) in #1331
- [LXC] (2/5) Add an in-process streaming sandbox handle with container-scoped termination by Soham Das (@SohamDas2021) in #1326
- Add Node and .NET request probe APIs by Huzaifa Danish (@huzaifa-d) in #1276
- [IsolationSession] Run nightly isolation-session validation on 26H1 by adpa-ms in #1362
- Document and pin the default-deny ingress controls by Elliot (@theelliotm) in #1363
- Updates all backend tests to 1.0 (or highest supported ver.) by Elliot (@theelliotm) in #1360
- Replace terminology highlighted by PoliCheck by Richie Gomez (@richiemsft) in #1358
- [Process Container] Report policy rejections as exit 1 with a policy_validation code by Elliot (@theelliotm) in #1364
- Reject a blank ProcessContainer proxy peer by Gudge (@MGudgin) in #1348
- Unify Rust SHA-2 dependency version by Gudge (@MGudgin) in #1304
- [WSLC] Pull a missing image instead of failing the run by Soham Das (@SohamDas2021) in #1318
- Fix Hyperlight path overlap fallback by Huzaifa Danish (@huzaifa-d) in #1312
- Make the v1 SDKs own their contract version by Gudge (@MGudgin) in #1271
- [LXC] (3/5) Harden concurrency and cleanup by Soham Das (@SohamDas2021) in #1329
- [test] Fix clipboard UI policy validation by Jeff Whiteside (@jsidewhite) in #1338
- chore(deps-dev): bump brace-expansion from 5.0.9 to 5.0.12 in /sdk/node/tests/integration by Dependabot (@dependabot)[bot] in #1367
- [docs/test] Clarify
desktopSystemControlpolicy behavior by Jeff Whiteside (@jsidewhite) in #1368 - [LXC] (4/5) Turn on in-process streaming by Soham Das (@SohamDas2021) in #1333
- Modify System.Text.Json Usage to be AOT-Compatible by Dom Giandinoto (@daamenik) in #1361
- Move contract-mapped v1 SDK types into V1 namespaces by Gudge (@MGudgin) in #1355
- [Node] Spawn the native sandbox off the JavaScript thread by Soham Das (@SohamDas2021) in #1354
- [Hyperlight] Bump hyperlight-unikraft to v0.17.0 by Dan Chiarlone (@danbugs) in #1370
- [IsolationSession] Select the C# end-to-end test classes in any namespace by adpa-ms in #1371
- Make exact versioned JSON the only FFI configuration ingress by Gudge (@MGudgin) in #1349
- Switch Node to exact JSON FFI ingress by Gudge (@MGudgin) in #1350
- Switch .NET to exact JSON FFI ingress by Gudge (@MGudgin) in #1351
- Remove the binding request FFI exports by Gudge (@MGudgin) in #1352
- Move the SDK authoring types into mxc-sdk by Gudge (@MGudgin) in #1353
- Fix the Linux CI FFI routing test selector by Gudge (@MGudgin) in #1380
- Restore Rust SDK lifecycle mapper parity tests by Gudge (@MGudgin) in #1379
- [SDK] Add caller-controlled PTY process APIs by Branden Bonaby (@bbonaby) in #1377
- Align Rust, .NET, and Node SDKs around versioned container APIs by Branden Bonaby (@bbonaby) in #1385
- Retire pre-v0.9 schema contracts and migrate configurations by Gudge (@MGudgin) in #1382
- Normalize directional network input directly by Gudge (@MGudgin) in #1383
- [CI] Update stale class reference for isolation session by Elliot (@theelliotm) in #1394
- test(process-container): realign stale UI policy, captureDenials and clipboard probe tests by Elliot (@theelliotm) in #1393
- Add caller-controlled PTY support for unix based backends by Branden Bonaby (@bbonaby) in #1384
- Make Node V1 APIs idiomatic by Branden Bonaby (@bbonaby) in #1398
- Consolidate Rust SDK crates into one publishable package by Branden Bonaby (@bbonaby) in #1390
- Add Rust SDK crates.io release pipeline by Branden Bonaby (@bbonaby) in #1337
- Add ProcessContainer PTY support to Node SDK by Branden Bonaby (@bbonaby) in #1400
- Remove preview disclaimer from README by Anis Mohammed Khaja Mohideen (@kanismohammed) in #1388
- Update SDK packages to 1.0.0 and populate native DLL metadata by Branden Bonaby (@bbonaby) in #1403
- Remove experimental from V1 SDK options by Branden Bonaby (@bbonaby) in #1402
- Add scenario-based SDK samples by Jeff Whiteside (@jsidewhite) in #1399
- Fix crates release pipeline template paths by Branden Bonaby (@bbonaby) in #1404
- Fix crates.io publish dry run registry by Branden Bonaby (@bbonaby) in #1405
- [CI] Skip hostLoopback=allow assertions on non-PSEC tiers by Elliot (@theelliotm) in #1401
- Remove orphaned published contract files by Gudge (@MGudgin) in #1409
- Display the error message when a dry run fails during backend policy validation by Elliot (@theelliotm) in #1408
- [docs] Tag audience in .md files by Jeff Whiteside (@jsidewhite) in #1411
- Sign NuGet packages in official build by Branden Bonaby (@bbonaby) in #1410
- [CI] Add 26H2 to nightly validation tests by Elliot (@theelliotm) in #1414
- [docs] Move-only reorganization by Jeff Whiteside (@jsidewhite) in #1427
- Fix NuGet package copyright metadata by Branden Bonaby (@bbonaby) in #1432
New Contributors
- aeon (@aeonframework) made their first contribution in #1124
- Tim Rogers (@timrogers) made their first contribution in #1331
Full Changelog: v0.9.0...v1.0.0