---
title: Install on Windows
description: Download, verify, and install the magus binary on Windows (amd64 or arm64) with PowerShell and put it on your PATH.
tags: [download, install, windows, powershell, path]
aliases: [setup/windows]
---

# Install on Windows

> [!WARNING]
> Nothing has run these binaries end to end. Both Windows targets are built by the release
> pipeline and never executed by it: windows/amd64 compiles and links natively, windows/arm64
> is cross-compiled and is the newest, least proven target of all. windows/amd64 has shipped
> for several releases and has field use behind it; windows/arm64 has none.
>
> The Buzz JIT is also newly enabled on Windows and its machine-code path has never run on a
> Windows machine here. If a magusfile gives a result that looks wrong, set `BUZZ_JIT=0` and
> re-run: if the answer changes, that is a JIT bug to report.
>
> See [platform support](../setup.md#platform-support) for the full matrix.

magus ships as a single self-contained binary. Download it with `curl.exe`, extract it into a `PATH` directory you own, then [verify it](verify.md) before first run. Run these in PowerShell:

## Quick install

```powershell
# The hosted docs substitute the latest release tag below; on GitHub it reads
# literally - get the real value from https://github.com/egladman/magus/releases
$VERSION = "v0.4.3"
$ARCH = "amd64"       # or arm64 on Windows on ARM
curl.exe -fLO "https://github.com/egladman/magus/releases/download/$VERSION/magus_${VERSION}_windows_${ARCH}_static.tar.gz"
mkdir -Force $Env:USERPROFILE\bin | Out-Null
tar -xzf "magus_${VERSION}_windows_${ARCH}_static.tar.gz" magus.exe
Move-Item -Force magus.exe $Env:USERPROFILE\bin\magus.exe
magus version
```

The archive also carries `LICENSE`, `THIRD-PARTY-NOTICES`, `README.md`, and a
`BUILDINFO` file naming the exact version, commit, platform, and variant. Naming
`magus.exe` on the `tar` line above extracts just the binary; drop it to unpack all of
them. `BUILDINFO` is readable without running anything, which is the point if a
dynamically linked build does not start.

Both `curl.exe` and `tar` ship with Windows 10 (1803+) and Windows 11, so no extra tooling is needed. `$VERSION` above is the current release; [GitHub Releases](https://github.com/egladman/magus/releases) lists every build.

To fill in `$ARCH` from the machine rather than by hand, `$Env:PROCESSOR_ARCHITECTURE` reads `AMD64` or `ARM64`:

```powershell
$ARCH = if ($Env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" }
```

## Testing status

Windows binaries are built by the release pipeline but are **not executed by CI**,
which runs on Linux only. windows/amd64 has shipped for several releases and has
field use behind it; **windows/arm64 is new and has never been run end to end**.

The Buzz JIT is also newly enabled on Windows (it was disabled there until this
release line) and its generated machine code has not executed on any Windows
machine during development. If a magusfile gives a result that looks wrong, re-run
with the JIT off:

```powershell
$Env:BUZZ_JIT = "0"
magus run <target>
```

If the answer changes, that is a JIT bug rather than a magusfile bug, and it is a
useful thing to report. See [Platform support](../setup.md#platform-support).

## Which archive

The `_static` archive above is what both architectures ship, and it is what `magus self update` fetches. No dynamically linked archive is published: on Windows it would link the MSYS2 mingw copies of libzstd/liblzma, which a user's machine has no reason to carry. `magus run release-build:dynamic` produces one from source if you want it.

## Verify the download

Fetch the manifest and its signature next to the tarball:

```powershell
curl.exe -fLO "https://github.com/egladman/magus/releases/download/$VERSION/SHA256SUMS"
curl.exe -fLO "https://github.com/egladman/magus/releases/download/$VERSION/SHA256SUMS.sig"
```

Then verify the Ed25519 signature _first_, and only then the checksum: checking a hash against an unverified manifest proves nothing. The exact commands are in [Verify a release](verify.md).

## Put it on your PATH

If `magus version` is not found, add the install directory to your user `PATH` (persists across sessions):

```powershell
[Environment]::SetEnvironmentVariable("Path", "$Env:USERPROFILE\bin;$Env:Path", "User")
```

Open a new PowerShell window afterward, then re-run `magus version`.

## Next steps

- [Verify the release](verify.md) before first run.
- Set up [shell completion](shell-setup.md#shell-completion) (PowerShell is supported).
- Keep it current with [`magus self update`](../setup.md#update).
