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.
The dv client
Section titled “The dv client”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.
Windows
Section titled “Windows”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.