# Why does rustup require --force-non-host for a 32-bit toolchain on 64-bit Windows?

> Rustup 1.29.1 requires an explicit opt-in to install 32-bit Windows host toolchains on 64-bit Windows. Building 32-bit applications remains supported.

Canonical URL: https://www.devobs.io/articles/why-does-rustup-require-force-non-host-for-a-32-bit-host-toolchain-on-64-bit-windows/
By: Theo Morgan
Published: 2026-10-26T10:38:27.836Z
Updated: 2026-10-26T10:38:27.836Z
Section: Architecture

Rustup 1.29.1 requires `--force-non-host` when installing `i686-pc-windows-*` host toolchains on 64-bit Windows. The change removes a Windows-specific exception: running a 32-bit compiler toolchain on a 64-bit host remains possible, but installing it now requires an explicit choice. It does **not** remove support for building 32-bit Windows applications with a 64-bit toolchain. ([Release announcement](https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/), [PR #4935](https://github.com/rust-lang/rustup/pull/4935))

## What changed in rustup 1.29.1

The Rustup team's September 1, 2026 release announcement lists the new requirement for installing 32-bit Windows host toolchains on 64-bit Windows. The linked implementation change is PR #4935, “Remove Windows i686 special case from `can_run`.” Its description says Windows was the only platform with this particular exception. ([Release announcement](https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/), [PR #4935](https://github.com/rust-lang/rustup/pull/4935))

The PR gives the rationale directly:

> While it is possible to run a 32-bit toolchain on a 64-bit host, it is strongly discouraged.

It then identifies `--force-non-host` as the way to install that toolchain anyway. The requirement is therefore an installation-policy decision, not a claim that Windows cannot execute the tools. ([PR #4935](https://github.com/rust-lang/rustup/pull/4935))

The PR author also cited a discussion about demoting 32-bit host support to Tier 2 and argued that rustup should change first. That was support-policy context for the proposal, not an announcement that the tier change had already happened. ([PR #4935](https://github.com/rust-lang/rustup/pull/4935))

## A compiler's host is different from its compilation target

The important distinction is between the tools doing the build and the program being built:

- **Host:** the platform on which the compiler toolchain itself runs.
- **Compilation target:** the platform for which the toolchain produces a program.

A requirement for a 32-bit application does not, by itself, require a 32-bit compiler toolchain. PR #4935 explicitly says the change does not affect installing or using `i686` as a target, and that Rust supports cross-compiling from a 64-bit Windows host to an `i686` Windows target. ([PR #4935](https://github.com/rust-lang/rustup/pull/4935))

## Which workflow do you need?

Before adding the flag, identify whether the architecture requirement applies to your build tools or their output:

| Requirement | Relevant choice |
| --- | --- |
| Produce a 32-bit Windows application | Use a 64-bit Windows host toolchain with an `i686` Windows compilation target. |
| Run the compiler toolchain itself as 32-bit on 64-bit Windows | Install the 32-bit host toolchain with `--force-non-host`. |

The new installation requirement concerns the second workflow, not the first. If only the resulting application must be 32-bit, cross-compilation avoids the need to install a 32-bit host toolchain. ([PR #4935](https://github.com/rust-lang/rustup/pull/4935))

## Source references

- <https://blog.rust-lang.org/2026/09/01/Rustup-1.29.1/>
- <https://github.com/rust-lang/rustup/pull/4935>
