devcontainer-rs
This repository hosts a native Rust implementation of the Dev Containers CLI, with compatibility tracked against the pinned upstream TypeScript sources in upstream/ and the pinned specification assets in spec/.
The shipped runtime is the Rust binary in cmd/devcontainer. Node is kept only for lightweight compatibility tooling such as upstream/spec drift checks, generated compatibility inventories, and the parity smoke harness.
Install
Run the CLI without adding it permanently to your environment:
uvx --from devcontainer-rs devcontainer --version
npx @devcontainer-rs/cli --version
Install it with Homebrew:
brew install jooh/devcontainer-rs/devcontainer-rs
devcontainer --version
Homebrew resolves jooh/devcontainer-rs from the tap repository
jooh/homebrew-tap.
Stable Runtime Environment Defaults
devcontainer-rs supports convenience environment variables for stable local
runtime defaults. These are repo-specific extensions: explicit CLI flags take
precedence, and unset or blank environment variables preserve the current
defaults.
For Podman-based local use:
export DEVCONTAINER_DOCKER_PATH=podman
export DEVCONTAINER_DOCKER_COMPOSE_PATH=podman-compose
devcontainer up --workspace-folder .
Path values are executable paths, not shell command strings with arguments. Use
DEVCONTAINER_DOCKER_COMPOSE_PATH=podman-compose, not
DEVCONTAINER_DOCKER_COMPOSE_PATH="podman compose".
| CLI flag | Environment variable |
|---|---|
--docker-path |
DEVCONTAINER_DOCKER_PATH |
--docker-compose-path |
DEVCONTAINER_DOCKER_COMPOSE_PATH |
--buildkit |
DEVCONTAINER_BUILDKIT |
--user-data-folder |
DEVCONTAINER_USER_DATA_FOLDER |
--container-data-folder |
DEVCONTAINER_CONTAINER_DATA_FOLDER |
--gpu-availability |
DEVCONTAINER_GPU_AVAILABILITY |
--update-remote-user-uid-default |
DEVCONTAINER_UPDATE_REMOTE_USER_UID_DEFAULT |
--mount-workspace-git-root |
DEVCONTAINER_MOUNT_WORKSPACE_GIT_ROOT |
--mount-git-worktree-common-dir |
DEVCONTAINER_MOUNT_GIT_WORKTREE_COMMON_DIR |
--workspace-mount-consistency |
DEVCONTAINER_WORKSPACE_MOUNT_CONSISTENCY |
Why
The main point of all this is to distribute a fat binary that implements dev containers without bringing in the whole node stack. In enterprise contexts this can be helpful.
Eventually we may also extend the upstream devcontainers/cli with additional functionality.
Repository layout
cmd/devcontainer/: native Rust CLI crate.cmd/devcontainer/src/runtime/: native runtime subsystems for container-backed commands.acceptance/: repo-owned manual acceptance scenarios and suite manifest.upstream/: canonical upstreamdevcontainers/clibaseline.spec/: canonical upstreamdevcontainers/specschemas and docs.build/: repo-owned compatibility guard scripts.src/test/parity/: parity fixtures and golden files for repo-owned checks.docs/: contributor and release documentation for the native CLI.
Compatibility contract: this repository targets the exact submodule revision pinned at HEAD:upstream.
Specification contract: schema-sensitive behavior targets the exact submodule revision pinned at HEAD:spec.
Submodules
Initialize submodules before running checks or editing compatibility-sensitive code:
git submodule update --init --recursive
If upstream/ or spec/ is missing or uninitialized, run the same command again and rerun the checks.
Local development
Run the complete local gate before pushing:
make tests
Rust validation:
cargo fmt --manifest-path cmd/devcontainer/Cargo.toml --all -- --check
cargo clippy --manifest-path cmd/devcontainer/Cargo.toml --all-targets --all-features -- -D warnings
cargo check --manifest-path cmd/devcontainer/Cargo.toml --all-targets --all-features
cargo doc --manifest-path cmd/devcontainer/Cargo.toml --no-deps --document-private-items
cargo test --manifest-path cmd/devcontainer/Cargo.toml --locked
cargo deny --manifest-path cmd/devcontainer/Cargo.toml check -A license-not-encountered
CI also enforces the current Rust line coverage baseline:
cargo llvm-cov --manifest-path cmd/devcontainer/Cargo.toml --all-features --workspace --fail-under-lines 95
Compatibility/tooling validation:
npm test
make actionlint-check
make shellcheck
Manual acceptance suite shape:
make acceptance-fixtures-check
The Node-based checks do not require installing project dependencies; they use built-in Node modules only. Node 20+ is still required to run them.
Generated command reference:
npm run generate-cli-reference
Generated parity inventory:
npm run generate-parity-inventory
Enable the repository-managed pre-commit hook:
npm run install-git-hooks
Upstream and spec workflow
When updating upstream compatibility baselines:
git submodule update --init --recursive
git -C upstream fetch origin
git -C upstream checkout <new-upstream-commit>
git add upstream
git rev-parse HEAD:upstream
npm run check-upstream-submodule
npm run check-upstream-compatibility
npm run check-command-matrix
npm run check-parity-inventory
npm run check-parity-harness
When changing schema-sensitive behavior, also verify:
git rev-parse HEAD:spec
npm run check-spec-drift
If a pinned submodule revision changes, update the matching generated baseline files in docs/upstream/.
Contributor notes
- Architecture, command flow, and runtime module ownership:
docs/architecture.md - Generated upstream command reference:
docs/upstream/command-reference.md - Generated parity inventory:
docs/upstream/parity-inventory.md - Native distribution and release notes:
docs/standalone/distribution.md - Runtime and compatibility guardrails:
docs/standalone/cutover.md
Release files for devcontainer-rs 0.0.61
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| devcontainer_rs-0.0.61-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| devcontainer_rs-0.0.61-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| devcontainer_rs-0.0.61-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| devcontainer_rs-0.0.61-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| devcontainer_rs-0.0.61-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| devcontainer_rs-0.0.61-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 6.7 MB
Release files / devcontainer_rs-0.0.61-py3-none-musllinux_1_2_x86_64.whl
| Download URL | devcontainer_rs-0.0.61-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
1d018b3438413766f3f08a5df5ede352ea31d4acd61769a2b8ba1c1ec39ee8d2
|
|
BLAKE2b-256 checksum How to use checksums |
332aed75f00d74cbcdfd77fb13bcd3c99031da307b91ff55191f9fafe3e4fc67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / devcontainer_rs-0.0.61-py3-none-musllinux_1_2_aarch64.whl
| Download URL | devcontainer_rs-0.0.61-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
c41a7c7f89f045f74c365b419571bd6ccdc7dd5a48ef747933710edd51a1b6a2
|
|
BLAKE2b-256 checksum How to use checksums |
a9f4714352bed6217601181651875243914a783cbb7c1c73b80f9195afac37dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / devcontainer_rs-0.0.61-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | devcontainer_rs-0.0.61-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
b75cbe5ce0a57d8cbdd9eb92a645efdaf3c1b34b196e41a35bf2ad83e5ad8c5e
|
|
BLAKE2b-256 checksum How to use checksums |
36f48dbbe734bc3c009655797a2122a7e6b2e643c6bf30646a94dc6711408a94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / devcontainer_rs-0.0.61-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | devcontainer_rs-0.0.61-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
4f403681ed0d4786632535f48b3992dee4dcdb07fef897fb5cf22630e20d0ba6
|
|
BLAKE2b-256 checksum How to use checksums |
1d30af0d915d7c53f089f5d53c048d696f63266c4379eff283cd2828dba0985d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / devcontainer_rs-0.0.61-py3-none-macosx_11_0_arm64.whl
| Download URL | devcontainer_rs-0.0.61-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.0 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ad2edbf8aad7adb50c7cb3933ff725379a013d5af68200d434c0116120e2f548
|
|
BLAKE2b-256 checksum How to use checksums |
055ea3d883f9dae792bc526604fa0ea06e4d00633af973b67f52702ebddd10d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / devcontainer_rs-0.0.61-py3-none-macosx_10_12_x86_64.whl
| Download URL | devcontainer_rs-0.0.61-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
ee43844ca7d5d359a2d60a2826a767ca01e87eb55f001a02842171e3f8ef9c20
|
|
BLAKE2b-256 checksum How to use checksums |
e7587e7974f1e79ae38f26f5184f3346a5526804c60a8b5ade43ef1666f010be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency log