Skip to content

Promote Windows on ARM (win_arm64) to a fully supported platform - #15350

Open
khmyznikov wants to merge 1 commit into
pyca:mainfrom
khmyznikov:win-arm64-full-support
Open

Promote Windows on ARM (win_arm64) to a fully supported platform#15350
khmyznikov wants to merge 1 commit into
pyca:mainfrom
khmyznikov:win-arm64-full-support

Conversation

@khmyznikov

Copy link
Copy Markdown
Contributor

Windows on ARM was previously kept in a stability validation period: its wheel was built and smoke-tested but not uploaded, and the arm64 test and wheel-build steps used continue-on-error with soft-failure warnings so problems would not block CI or releases.

This promotes win_arm64 to full support:

  • Upload the arm64 wheel like every other platform (drop the arch guard in the windows-wheel action).
  • Remove continue-on-error and the "Report soft failure" steps for the arm64 entries in ci.yml and wheel-builder.yml, so arm64 failures are treated as real failures.
  • Add Python 3.15-dev arm64 entries for both tests (ci.yml) and wheel builds (wheel-builder.yml).

Maintenance support:

Windows on ARM was previously kept in a stability validation period: its
wheel was built and smoke-tested but not uploaded, and the arm64 test and
wheel-build steps used continue-on-error with soft-failure warnings so
problems would not block CI or releases.

This promotes win_arm64 to full support:

- Upload the arm64 wheel like every other platform (drop the arch guard in
  the windows-wheel action).
- Remove continue-on-error and the "Report soft failure" steps for the
  arm64 entries in ci.yml and wheel-builder.yml, so arm64 failures are
  treated as real failures.
- Add Python 3.15-dev arm64 entries for both tests (ci.yml) and wheel
  builds (wheel-builder.yml).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 879e51f7-4d6c-4e05-a054-fd91a4649153
@khmyznikov

Copy link
Copy Markdown
Contributor Author

Additionally, verified the upcoming update for gh runner, currently it's under the name windows-11-vs2026-arm but will be merged to main in a few weeks. I was said it's just vs2026 update. But all good regardless. https://github.com/khmyznikov/cryptography/actions/runs/30566543030/job/90952491264
https://github.com/khmyznikov/cryptography/actions/runs/30566731637/job/90952998822

@khmyznikov
khmyznikov marked this pull request as ready for review July 31, 2026 21:17
@reaperhulk

Copy link
Copy Markdown
Member

We're currently planning to restore support in 51 (likely a Sep/Oct release given our history), but we'd like to see one more month of stability before we actually merge. Thanks for working with us on this and helping stabilize the runners.

@reaperhulk reaperhulk added this to the Fifty First release milestone Jul 31, 2026
@khmyznikov

Copy link
Copy Markdown
Contributor Author

@reaperhulk Sounds good, Sep would be great.

EDM115 added a commit to EDM115/miniproto that referenced this pull request Aug 14, 2026
…hon too

fix failed builds on windows arm64 (see pyca/cryptography#15350), we can just not install it there as it will fallback on the Rust implementation (so no detailed bench for this specific platform for now), will lift the gate on cryptography v51
@jtauschl

Copy link
Copy Markdown

We maintain a Python MCP server package that transitively depends on cryptography via pyjwt[crypto] (pulled in unconditionally by the mcp SDK). It currently fails to install on win_arm64: no wheel, and a source build needs a Rust toolchain plus the MSVC linker, which most end users don't have. We filed the underlying issue in mcp's repo (modelcontextprotocol/python-sdk#3373), but this wheel is the actual fix. No pressure on timing, just confirming there are real users waiting on this.

jtauschl added a commit to jtauschl/openproject-ce-mcp that referenced this pull request Aug 25, 2026
pyca/cryptography#15350 is open and mergeable, targeting the 51
release (likely September/October 2026), which would resolve the
win_arm64 install failure regardless of the linked mcp SDK issue's
own outcome.
@showharLaw

showharLaw commented Aug 26, 2026

Copy link
Copy Markdown

Data point from a Windows ARM64 user: I checked PyPI and none of 47.0.0, 48.0.0, 48.0.1, 49.0.0, 50.0.0, 50.0.1 ship a win_arm64 wheel — 46.0.3 (cryptography-46.0.3-cp311-abi3-win_arm64.whl) appears to be the last one, which pins a lot of downstream users on this platform. Great to hear support returns in 51.

For anyone blocked in the meantime: building 50.0.0 from sdist on native aarch64-pc-windows-msvc works if OpenSSL is vendored. Recipe that produced a working static wheel for me (rustc 1.96.1 aarch64-pc-windows-msvc, MSVC 14.51 Hostarm64\arm64, Strawberry Perl):

  1. In the workspace Cargo.toml, change the openssl workspace dep to openssl = { version = "0.10.80", features = ["vendored"] } (pulls openssl-src; OpenSSL itself takes ~20 min to compile).
  2. Remove locked = true from [tool.maturin] in the sdist's pyproject.toml (openssl-src changes the lockfile).
  3. Set PYO3_PYTHON=<real python.exe> explicitly — on Windows, a bare python in build scripts can resolve to the Microsoft Store alias stub and kill cryptography-cffi's build.rs with "Python was not found".
  4. maturin build --releasecryptography-50.0.0-cp311-abi3-win_arm64.whl, functionally verified (SHA-256, RSA sign/verify, x509 self-signed cert, PEM roundtrip).

The resulting wheel is fully static (no libcrypto DLL dependency), same shape as the official ones.

wrotek added a commit to wrotek/painapple-code that referenced this pull request Aug 31, 2026
The Intel-Mac and Windows-ARM notes told users to `pipx inject
painapple-code "cryptography<49"` / `"cryptography<=46.0.3"`, duplicating
in four docs sites a pin that pyproject.toml's `[tls]` extra already
encodes behind PEP 508 markers. That made the docs the stalest copy: if
pyca/cryptography restores Windows-ARM wheels (pyca/cryptography#15350 is
planned but unreleased) the extra updates and the prose silently doesn't.

`painapple-code[tls]` resolves to exactly one correct pin per platform —
verified across all six marker environments: <49 on Intel macOS, <=46.0.3
on Windows-ARM, >=50.0.0 everywhere cryptography is already a base
dependency (where the extra is a harmless no-op). So one command is now
correct everywhere and users no longer have to know which platform they
are on. The three-tab per-platform block in install-pip.md collapses to a
pipx/pip pair.

server.py's _tls_unavailable box leads with the same command (`pipx
install --force`, since anyone seeing it already installed) and demotes
the pin to an informational line explaining why nothing compiles. That
line is now gated on the platform actually being in _CRYPTOGRAPHY_GAP —
previously the fallback branch (a broken install on a supported platform)
would have claimed a bare `cryptography` was "the last release upstream
still ships a wheel for", which is nonsense there.

No packaging change: _CRYPTOGRAPHY_GAP, the markers and the extra are
untouched, and test_tls_optional.py's 23 tests (which assert the three
stay in sync) still pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants