Skip to content

Platforms

dv installs whatever Microsoft publishes for the machine it runs on. It names platforms the way Microsoft’s release metadata does — by runtime identifier — so the SDK it downloads is always the one built for this operating system and processor:

Machine Runtime identifier
macOS, Apple Silicon osx-arm64
macOS, Intel osx-x64
Linux (glibc), x64 / Arm64 linux-x64 / linux-arm64
Linux (musl — Alpine), x64 / Arm64 linux-musl-x64 / linux-musl-arm64
Windows, x64 / Arm64 win-x64 / win-arm64

musl is detected from its dynamic loader, because a glibc SDK on Alpine fails with a “not found” for a binary that plainly exists. Set DV_PLATFORM to override detection — useful for testing, not for running an SDK built for another machine.

Which SDK versions exist for each identifier is Microsoft’s decision, not dv’s: dv list --remote shows exactly what is published for this machine.

dv itself is one binary with no runtime dependencies, built for every platform below on a native runner:

Platform Rust target Runner
osx-arm64 aarch64-apple-darwin macos-14
osx-x64 x86_64-apple-darwin macos-15-intel
linux-x64 (also linux-musl-x64) x86_64-unknown-linux-musl ubuntu-22.04
linux-arm64 (also linux-musl-arm64) aarch64-unknown-linux-musl ubuntu-22.04-arm
win-x64 x86_64-pc-windows-gnu windows-latest
win-arm64 aarch64-pc-windows-msvc windows-11-arm

Linux builds link musl statically, so one binary runs on any distribution, glibc or musl, with no version floor. The Windows x64 build uses the GNU target, which links only DLLs Windows ships.

SDKs are published as .zip archives on Windows, and shims are .cmd files, because Windows resolves a bare command only through PATHEXT and a symlink needs privileges most accounts do not have. Install roots are built from hard links, which NTFS supports for every user.

dv’s state lives in %LOCALAPPDATA%\dv.