denoland/deno · error

No MSI architecture mapping for arch '{other}'; supported: x

Error message

No MSI architecture mapping for arch '{other}'; supported: x86_64, aarch64

What it means

MSI packaging writes an architecture string into the summary-info Template field; both supported arches are 64-bit, mapping x86_64 -> "x64" and aarch64 -> "Arm64". No other mapping is vendored, so any other arch component from --target (or the host arch when omitted) bails.

Source

Thrown at cli/tools/desktop.rs:4405

}

/// Derive a deterministic GUID for a given role (e.g. "product:1.0.0",
/// "upgrade", "package", "component:c0") of the named app.
fn msi_derive_guid(identifier: &str, role: &str) -> String {
  let name = format!("{identifier}\0{role}");
  msi_guid(uuid::Uuid::new_v5(&MSI_GUID_NAMESPACE, name.as_bytes()))
}

/// Map a target triple (or the host arch) to the MSI summary-info architecture
/// string used in the `Template` field. Both supported arches are 64-bit.
fn msi_arch_for_target(target: Option<&str>) -> Result<&'static str, AnyError> {
  let arch = target
    .and_then(|t| t.split('-').next())
    .unwrap_or(std::env::consts::ARCH);
  match arch {
    "x86_64" => Ok("x64"),
    "aarch64" => Ok("Arm64"),
    other => bail!(
      "No MSI architecture mapping for arch '{other}'; supported: x86_64, aarch64"
    ),
  }
}

/// Lowercase base36 encoding of a counter, used to mint unique 8.3 short names.
fn base36(mut n: u32) -> String {
  if n == 0 {
    return "0".to_string();
  }
  const DIGITS: &[u8; 36] = b"0123456789abcdefghijklmnopqrstuvwxyz";
  let mut out = Vec::new();
  while n > 0 {
    out.push(DIGITS[(n % 36) as usize]);
    n /= 36;
  }
  out.reverse();
  String::from_utf8(out).unwrap()

View on GitHub (pinned to f7822238ca)

Solutions

  1. Target `x86_64-pc-windows-msvc` (x64) or `aarch64-pc-windows-msvc` (Arm64) when producing an MSI.
  2. Pass --target explicitly in cross-build pipelines instead of relying on the host arch default.
  3. For 32-bit Windows, distribute a plain zip instead of an MSI.

Example fix

# before
deno desktop --target i686-pc-windows-msi --msi

# after
deno desktop --target x86_64-pc-windows-msvc --msi
Defensive patterns

Strategy: validation

Validate before calling

case "${TARGET%%-*}" in
  x86_64|aarch64) ;;
  *) echo "MSI packaging supports x64 and Arm64 only"; exit 1 ;;
esac

Type guard

function isSupportedMsiArch(target: string): boolean {
  const a = target.split("-")[0];
  return a === "x86_64" || a === "aarch64";
}

Prevention

When it happens

Trigger: Building a Windows .msi with --target whose leading component isn't x86_64/aarch64 (e.g. i686-pc-windows-msvc), or no --target on a non-x86_64/aarch64 host.

Common situations: Attempting 32-bit Windows packages; uncommon-arch CI hosts building Windows artifacts cross-platform.

Related errors


AI-assisted analysis of denoland/deno@f7822238ca (2026-08-20). Data as JSON: /api/errors/721af73c2ed8275c. Report an issue: GitHub.