denoland/deno · error

No bundled AppImage runtime for arch '{other}'; supported: x

Error message

No bundled AppImage runtime for arch '{other}'; supported: x86_64, aarch64

What it means

AppImage packaging uses vendored Type-2 runtime ELF stubs (from github.com/AppImage/type2-runtime), and only x86_64 and aarch64 builds are bundled in the binary. The arch comes from the leading component of the --target triple, or from the host arch when no target is given; anything else bails immediately.

Source

Thrown at cli/tools/desktop.rs:3570

  0x00, 0x00, 0x00, 0x1f, 0x15, 0xc4, 0x89, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x44,
  0x41, 0x54, 0x78, 0x9c, 0x63, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x01, 0x0d,
  0x0a, 0x2d, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
  0x60, 0x82,
];

/// Pick the Type-2 runtime stub for the requested target. Falls back to the
/// host arch when `target` is None. The triple's leading component is the
/// arch (e.g. `x86_64-unknown-linux-gnu` → `x86_64`).
fn appimage_runtime_for_target(
  target: Option<&str>,
) -> Result<Vec<u8>, AnyError> {
  let arch = target
    .and_then(|t| t.split('-').next())
    .unwrap_or(std::env::consts::ARCH);
  let compressed = match arch {
    "x86_64" => APPIMAGE_RUNTIME_X86_64,
    "aarch64" => APPIMAGE_RUNTIME_AARCH64,
    other => bail!(
      "No bundled AppImage runtime for arch '{other}'; supported: x86_64, aarch64"
    ),
  };
  let uncompressed_len =
    u32::from_le_bytes(compressed[..4].try_into().unwrap());
  zstd::bulk::decompress(&compressed[4..], uncompressed_len as usize)
    .with_context(|| {
      format!("Failed to decompress AppImage runtime for {arch}")
    })
}

/// Unix mode bits for a filesystem entry. On non-Unix hosts (cross-compiling
/// a Linux AppImage from Windows/macOS) we don't have real mode bits, so fall
/// back to a reasonable default: 0o755 for dirs, 0o644 for files.
fn unix_mode_of(meta: &std::fs::Metadata) -> u16 {
  #[cfg(unix)]
  {
    use std::os::unix::fs::PermissionsExt;

View on GitHub (pinned to f7822238ca)

Solutions

  1. Pass an explicit supported target: `--target x86_64-unknown-linux-gnu` or `--target aarch64-unknown-linux-gnu`.
  2. If omitting --target, run the build on an x86_64 or aarch64 host.
  3. For genuinely unsupported arches, produce a plain directory/tar distribution instead of an AppImage.

Example fix

# before
deno desktop --target armv7-unknown-linux-gnu ...

# after
deno desktop --target aarch64-unknown-linux-gnu ...
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED=(x86_64 aarch64)
ARCH="${TARGET%%-*}"   # leading component of the triple, or host arch if unset
[[ " ${SUPPORTED[*]} " == *" $ARCH "* ]] || { echo "unsupported arch for AppImage: $ARCH"; exit 1; }

Type guard

function isSupportedDesktopArch(target?: string): boolean {
  const arch = (target ?? Deno.build.arch).split("-")[0];
  return arch === "x86_64" || arch === "aarch64";
}

Prevention

When it happens

Trigger: Building an AppImage with `--target` set to an unsupported triple (armv7-unknown-linux-gnu, i686-*, riscv64-*), or running with no --target on a host whose arch isn't x86_64/aarch64.

Common situations: Targeting ARM boards (armv7 Raspberry Pi), 32-bit builds, or exotic-arch CI hosts; forgetting to pass --target on an unusual build machine.

Related errors


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