Cross-platform command-line tool to download Windows installation media directly from Microsoft. No Windows required.
Microsoft's Media Creation Tool only runs on Windows — if you're on macOS or Linux and need a Windows ISO, you're stuck. winiso fixes that.
git clone https://github.com/Xatter/winiso.git
cd winiso
python3 -m venv .venv && source .venv/bin/activate
pip install -e .Then install the system dependencies listed under Requirements.
winisoWalks you through the entire process: select Windows version, architecture, language, pick your USB drive, then downloads the ISO and writes it to the drive. If no USB drive is detected, it downloads the ISO only.
winiso list # Show available versions
winiso list --version 11 # Languages for Windows 11 x64
winiso list --version 11 --arch ARM64 # Languages for ARM64
winiso list --version 10 # Windows 10
winiso list --version 11 --json # Machine-readable outputwiniso download --version 11 --lang en-us # English x64 (default)
winiso download --version 11 --lang Japanese --arch ARM64 # Japanese ARM64
winiso download --version 10 --lang de-de -o ~/Downloads # German Win10, custom dirDownloads are resumable — if interrupted, just run the same command again.
winiso burn Win11_24H2_English_x64.iso # Write ISO to USB (interactive drive selection)
winiso burn --version 11 --lang en-us # Download ISO and burn in one step
winiso burn Win11.iso --drive /dev/disk2 # Specify drive directly
winiso burn Win11.iso --raw # Raw dd write (advanced, may not boot)Formats the USB as MBR + FAT32 and copies the Windows installation files, producing a drive that boots on both UEFI and legacy BIOS systems. If the ISO contains an install.wim larger than 4 GB (common with Windows 10/11), it automatically splits it using wimlib so it fits on FAT32.
Lists only physical removable drives, requires you to type the device name to confirm before writing. Supports macOS and Linux.
winiso uses the same products.cab catalog that Microsoft's own Media Creation Tool uses internally. It:
- Fetches the signed product catalog from Microsoft's CDN (
go.microsoft.com/fwlink) - Parses
products.xmlto find available editions, languages, and architectures - Downloads ESD files directly from Microsoft's servers
The catalog approach is the same mechanism used by the official MCT binary — we verified this by reverse-engineering MediaCreationTool.exe (see analysis notes if interested).
The default download format is ESD (Electronic Software Download) — the same format Microsoft's servers provide to the Media Creation Tool. ESDs are compressed Windows installation images.
To convert an ESD to a bootable ISO, use wimlib:
brew install wimlib # macOS
# Then: wimlib-imagex export source.esd 1 dest.wimFor direct ISO downloads (bypasses ESD), use the --iso flag — this uses a different Microsoft API that may be less reliable due to anti-bot protection.
- macOS (Intel and Apple Silicon)
- Linux (any distro with Python 3.10+)
- Windows (works too, but you probably have the real MCT)
- Python 3.10+
cabextract(for parsing Microsoft's product catalog)wimlib(optional — only needed ifinstall.wimin the ISO exceeds 4 GB)
# macOS
brew install cabextract wimlib
# Ubuntu/Debian
sudo apt install cabextract wimlib-toolsThis project builds on protocol research from:
- Fido by Pete Batard (PowerShell, Windows-only)
- Mido by Elliot Killick (POSIX shell)
- UUP dump (web service)
winiso aims to be a proper cross-platform CLI tool with good UX, resume support, and error handling — filling a gap in the ecosystem where only shell scripts existed.
MIT