Native Windows ARM64 engine (windows-arm64) for releases and npm

Author: fgpazCreated Sep 9, 2026Updated Sep 10, 2026
Labelsneeds triage

Summary

npx impeccable fails on native Windows ARM64 (Copilot+ / Snapdragon) because there is no windows-arm64 engine asset or @impeccable/cli-windows-arm64 optional dependency. The skill launchers already try the arm64 asset and fall back to x64; the npm shim does not.

I can test on real Windows 11 ARM64 hardware and would like to send a PR if maintainers want this.

AI assistance was used to reproduce, native-build, and draft this issue. I will disclose the same on any follow-up PR.

Reproduction

  • OS: Windows 11 ARM64 (aarch64-pc-windows-msvc)
  • Node: v24.14.0, process.arch === 'arm64'
  • Command: npx [email protected] install
impeccable: no binary for windows-arm64. Install @impeccable/[email protected],
set IMPECCABLE_BIN, or download impeccable-windows-arm64 v0.1.5 from
https://github.com/pbakaus/impeccable/releases/download into
~\.impeccable\bin\0.1.5\impeccable.exe.

@impeccable/cli-windows-arm64 is 404 on npm. engine-v0.1.5 ships only impeccable-windows-x64.exe.

Workaround that works today: run the signed x64 engine under Prism and set IMPECCABLE_BIN. That is emulation, not a native install.

Why a native target (not only an npm x64 fallback)

Node on this machine is native arm64, so optionalDependencies never select @impeccable/cli-windows-x64. A locally built engine (cargo build --release -p impeccable --target aarch64-pc-windows-msvc) is a PE with machine 0xAA64, answers engine-probe with impeccable-engine 0.1.5, and runs without Prism.

The x64 engine under emulation reports windows-x64 from cfg!(target_arch), so impeccable install stages scripts/bin/windows-x64/ even on ARM64 hosts. A native binary would stage windows-arm64 and match the npm shim.

Proposed approach (no ENGINE_VERSION bump in the feature PR)

  1. Add windows-11-arm / aarch64-pc-windows-msvc / windows-arm64 to .github/workflows/release-engine.yml (windows-11-arm is GA for public repos).
  2. Sign that PE in the existing windows-signing job (matrix windows-x64 + windows-arm64; Authenticode is arch-agnostic; do not execute the ARM64 binary on the x64 signer).
  3. Add cli/platform-packages/windows-arm64 template (os: win32, cpu: arm64).
  4. On the next engine cutover (0.1.6 or whatever you choose — 0.1.5 assets are immutable): add windows-arm64 to ENGINE_TARGETS and package.json optionalDependencies. Adding it earlier would fail engine-release-ready CI against the pinned 0.1.5 release.

Happy to open a PR with (1)–(3) after you confirm this is wanted.

Local proof

  • cargo build --release -p impeccable --target aarch64-pc-windows-msvc succeeds on this host
  • impeccable.exe engine-probeimpeccable-engine 0.1.5
  • PE machine type 0xAA64