msvc-kit 0.2.10

A portable MSVC Build Tools installer and manager for Rust development
# Download Command


The `download` command downloads MSVC compiler and/or Windows SDK from Microsoft servers.

## Basic Usage


```bash
# Download latest MSVC and Windows SDK

msvc-kit download
```

## Options


### Version Selection


You can specify versions using either **short** or **full** format:

```bash
# Short version (recommended) - automatically resolves to latest build

msvc-kit download --msvc-version 14.44

# Full version - specific build number

msvc-kit download --msvc-version 14.44.34823

# SDK version (always use full format)

msvc-kit download --sdk-version 10.0.26100.0

# Both

msvc-kit download --msvc-version 14.44 --sdk-version 10.0.26100.0
```

**Version Format:**

| Component | Short Format | Full Format | Example |
|-----------|-------------|-------------|---------|
| MSVC | `14.44` | `14.44.34823` | `--msvc-version 14.44` |
| SDK | N/A | `10.0.26100.0` | `--sdk-version 10.0.26100.0` |

When using short MSVC version (e.g., `14.44`), msvc-kit automatically resolves it to the latest available build number (e.g., `14.44.34823`).

### Version Compatibility Guide


#### MSVC and Windows SDK Pairing


**TL;DR:** Use the latest versions of both for best compatibility. They are designed to work together.

| Scenario | Recommended MSVC | Recommended SDK | Notes |
|----------|-----------------|-----------------|-------|
| **General Development** | Latest (`14.44`) | Latest (`10.0.26100.0`) | Best compatibility and features |
| **Windows 11 Apps** | `14.42`+ | `10.0.22621.0`+ | Win11 SDK required for Win11-specific APIs |
| **Windows 10 Support** | Any | `10.0.19041.0`+ | Older SDKs still work |
| **Legacy Projects** | Match project's VS version | Match project's SDK | See version mapping below |

#### MSVC Version ↔ Visual Studio Mapping


| MSVC Toolset | Visual Studio | _MSC_VER | Support Status |
|--------------|---------------|----------|----------------|
| `14.44` | VS 2022 17.14+ | 1944 | Current |
| `14.43` | VS 2022 17.13 | 1943 | Supported |
| `14.42` | VS 2022 17.12 | 1942 | Supported |
| `14.41` | VS 2022 17.11 | 1941 | Supported |
| `14.40` | VS 2022 17.10 | 1940 | Supported |
| `14.39` | VS 2022 17.9 | 1939 | Supported |
| `14.38` | VS 2022 17.8 (LTSC) | 1938 | Long-term support |

#### Windows SDK Version ↔ Windows Version

| SDK Version | Target Windows | Codename | Notes |
|-------------|----------------|----------|-------|
| `10.0.26100.0` | Windows 11 24H2 | | Latest, recommended |
| `10.0.22621.0` | Windows 11 22H2 | | Stable, widely used |
| `10.0.22000.0` | Windows 11 21H2 | | First Win11 SDK |
| `10.0.19041.0` | Windows 10 2004 | | Good Win10 baseline |
| `10.0.18362.0` | Windows 10 1903 | | Legacy support |

#### Common Combinations


```bash
# Recommended: Latest everything (best for new projects)

msvc-kit download --msvc-version 14.44 --sdk-version 10.0.26100.0

# Stable: Widely tested combination

msvc-kit download --msvc-version 14.42 --sdk-version 10.0.22621.0

# Windows 10 focused: Maximum compatibility

msvc-kit download --msvc-version 14.40 --sdk-version 10.0.19041.0
```

#### Important Notes


1. **Forward Compatibility:** Newer MSVC versions can target older Windows versions. Use `_WIN32_WINNT` macro to control target.

2. **SDK Selection:** The SDK version determines which Windows APIs are available at compile time, not runtime compatibility.

3. **ABI Compatibility:** MSVC 14.x toolsets (VS 2015-2022) share the same C++ ABI, so libraries built with 14.40 work with 14.44.

4. **When in Doubt:** Use the latest versions. Microsoft ensures backward compatibility.

### Component Selection


```bash
# Download only MSVC (skip SDK)

msvc-kit download --no-sdk

# Download only SDK (skip MSVC)

msvc-kit download --no-msvc
```

### Target Directory


```bash
# Custom installation directory

msvc-kit download --target C:\msvc-kit
```

### Architecture


```bash
# Target architecture (default: x64)

msvc-kit download --arch x64

# Host architecture (default: auto-detect)

msvc-kit download --host-arch x64

# Cross-compilation: build ARM64 on x64 host

msvc-kit download --host-arch x64 --arch arm64
```

Supported architectures:
- `x64` - 64-bit x86
- `x86` - 32-bit x86
- `arm64` - ARM64
- `arm` - ARM 32-bit (target only)

### Download Options


```bash
# Parallel downloads (default: 4)

msvc-kit download --parallel-downloads 8

# Skip hash verification (not recommended)

msvc-kit download --no-verify
```

## Full Example


```bash
msvc-kit download \
  --msvc-version 14.44 \
  --sdk-version 10.0.26100.0 \
  --target C:\msvc-kit \
  --arch x64 \
  --host-arch x64 \
  --parallel-downloads 8
```

## Download Progress


The download shows progress for each package:

```
Downloading MSVC packages...
[1/15] Microsoft.VC.14.44.17.14.CRT.Headers.x64 (2.3 MB)
[2/15] Microsoft.VC.14.44.17.14.CRT.Source (1.1 MB)
...
```

## Caching Behavior


Downloads are cached and skipped if already present:

| Status | Meaning |
|--------|---------|
| `cached` | File exists in index with matching hash |
| `304` | Server returned Not Modified (ETag match) |
| `size match` | File size matches expected (best-effort) |

To force re-download, use `msvc-kit clean --cache` first.

## Available Versions


List available versions before downloading:

```bash
msvc-kit list --available
```

Output:
```
Available MSVC versions:
  14.44.34823
  14.43.34808
  14.42.34433
  ...

Available SDK versions:
  10.0.26100.0
  10.0.22621.0
  10.0.22000.0
  ...
```