msvc-kit is a portable MSVC Build Tools installer and manager designed specifically for Rust and Windows development. It enables developers to download and manage MSVC compilers and Windows SDK without requiring a full Visual Studio installation, streamlining the setup process for Windows-based projects.
Key Features:
Download Management: Automatically download specific versions of MSVC compiler and Windows SDK directly from Microsoft servers.
Version Control: Manage multiple versions of MSVC and Windows SDK across different architectures (x64, x86, arm64, arm) to support diverse development needs.
Environment Setup: Automatically configure environment variables for immediate use, compatible with tools like cc-rs and other Rust-based build systems.
Cross-Platform Support: Works seamlessly with PowerShell, CMD, and Bash/WSL, enabling consistent tooling across different shell environments.
Bundle Creation: Create portable bundles of MSVC toolchains that can be deployed anywhere, simplifying distribution and usage in CI/CD pipelines.
Audience & Benefit:
Ideal for Rust developers targeting Windows, CI/CD pipelines requiring reliable Windows build tools, cross-platform development teams managing complex toolchain setups, and educators or students teaching Windows-based development. msvc-kit provides a lightweight, flexible solution to manage MSVC compilers and Windows SDK without the overhead of full Visual Studio installations.
Install via winget for a seamless experience: winget install loonghao.msvc-kit.
A portable MSVC Build Tools installer and manager for Rust/Windows.
TL;DR
# Install the CLI
cargo install msvc-kit
# Download latest MSVC + Windows SDK into default data dir
msvc-kit download
# Apply environment to current shell (PowerShell)
msvc-kit setup --script --shell powershell | Invoke-Expression
Features
Download MSVC compiler from Microsoft servers
Download Windows SDK to a chosen directory
Auto environment setup for immediate use (cc-rs compatible)
Version management for host/target architectures (x64, x86, arm64, arm)
Library API for programmatic usage
Resumable downloads with redb-based index for fast skip
Manifest caching with ETag/Last-Modified conditional requests
# Download and extract to a directory in your PATH
Invoke-WebRequest -Uri "https://github.com/loonghao/msvc-kit/releases/latest/download/msvc-kit-x86_64-pc-windows-msvc.zip" -OutFile msvc-kit.zip
Expand-Archive msvc-kit.zip -DestinationPath $env:USERPROFILE\.cargo\bin -Force
From source
git clone https://github.com/loonghao/msvc-kit.git
cd msvc-kit
cargo install --path .
Release bundles
On every tagged release (or release-please cut), CI builds and uploads msvc-bundle---.zip for x64, x86, and arm64 directly to the GitHub Release.
Bundles are created via msvc-kit bundle --accept-license; by downloading you agree to the Microsoft Visual Studio License Terms.
Quick Start (CLI)
Download
# Latest versions
msvc-kit download
# Specify versions / dirs / arch
# MSVC version can be short (14.44) or full (14.44.34823)
msvc-kit download \
--msvc-version 14.44 \
--sdk-version 10.0.26100.0 \
--target C:\msvc-kit \
--arch x64 \
--host-arch x64
# Download only MSVC (skip SDK)
msvc-kit download --no-sdk
# Download only SDK (skip MSVC)
msvc-kit download --no-msvc
# Control parallel downloads (default: 4)
msvc-kit download --parallel-downloads 8
# Skip hash verification
msvc-kit download --no-verify
> Note: MSVC version can be specified as short format (e.g., 14.44) which auto-resolves to the latest build, or full format (e.g., 14.44.34823) for a specific build.
VC/Tools/MSVC/{version}/ - MSVC compiler and tools
Windows Kits/10/ - Windows SDK
setup.bat - CMD activation script
setup.ps1 - PowerShell activation script
setup.sh - Bash/WSL activation script
README.txt - Usage instructions
Usage:
# Extract and run setup script
cd msvc-bundle
setup.bat # CMD
.\setup.ps1 # PowerShell
source setup.sh # Bash/WSL
# Now cl, link, nmake are available
cl /nologo test.c
List Versions
msvc-kit list # Show installed versions
msvc-kit list --available # Show available versions from Microsoft
Clean Up
msvc-kit clean --msvc-version 14.44 # Remove specific MSVC version
msvc-kit clean --sdk-version 10.0.26100.0 # Remove specific SDK version
msvc-kit clean --all # Remove all installed versions
msvc-kit clean --all --cache # Also clear download cache
msvc-kit config # Show current config
msvc-kit config --set-dir C:\msvc-kit # Set install directory
msvc-kit config --set-msvc 14.44 # Set default MSVC version
msvc-kit config --set-sdk 10.0.26100.0 # Set default SDK version
msvc-kit config --reset # Reset to defaults
Print Environment Variables
msvc-kit env # Print as shell script
msvc-kit env --format json # Print as JSON
Caching & Progress
Cache Type
Location
Description
Download index
downloads/{msvc|sdk}/.../index.db
redb database for tracking download status
Manifest cache
cache/manifests/
Cached VS manifests with ETag/Last-Modified
Extraction markers
.msvc-kit-extracted/
Skip already-extracted packages
Progress display: Single-line spinner by default. Set MSVC_KIT_INNER_PROGRESS=1 for detailed file progress.
Skip logic: Downloads are skipped when:
cached: File exists in index with matching hash
304: Server returns Not Modified (ETag/Last-Modified match)
size match: File size matches expected (best-effort, noted in code)
Library Usage
[dependencies]
msvc-kit = "0.1"
use msvc_kit::{download_msvc, download_sdk, setup_environment, DownloadOptions};
use msvc_kit::{list_available_versions, Architecture};
#[tokio::main]
async fn main() -> msvc_kit::Result<()> {
// List available versions from Microsoft
let versions = list_available_versions().await?;
println!("Latest MSVC: {:?}", versions.latest_msvc);
println!("Latest SDK: {:?}", versions.latest_sdk);
// Download with builder pattern
let options = DownloadOptions::builder()
.target_dir("C:/msvc-kit")
.arch(Architecture::X64)
.build();
let msvc = download_msvc(&options).await?;
let sdk = download_sdk(&options).await?;
let env = setup_environment(&msvc, Some(&sdk))?;
println!("cl.exe: {:?}", env.cl_exe_path());
Ok(())
}