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
- Target `x86_64-pc-windows-msvc` (x64) or `aarch64-pc-windows-msvc` (Arm64) when producing an MSI.
- Pass --target explicitly in cross-build pipelines instead of relying on the host arch default.
- 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
- Target x86_64-pc-windows-msvc or aarch64-pc-windows-msvc when an MSI is part of the release.
- Don't attempt 32-bit Windows MSIs; use a zip for those.
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
- Cannot build a .msi from an empty app directory
- deno.json `version` "{version}" cannot be used as an MSI Pro
- No bundled AppImage runtime for arch '{other}'; supported: x
- No Debian architecture mapping for arch '{other}'; supported
- No RPM architecture mapping for arch '{other}'; supported: x
AI-assisted analysis of denoland/deno@f7822238ca (2026-08-20).
Data as JSON: /api/errors/721af73c2ed8275c.
Report an issue: GitHub.