parcel-bundler/parcel · critical · Error
Unsupported architecture on Android ${arch}
Error message
Unsupported architecture on Android ${arch} What it means
Thrown by the native-binding loader in @parcel/rust when running on the Android platform with a CPU architecture that has no prebuilt .node binary. The loader enumerates platform/arch combinations and falls into the default branch only for unrecognized Android arches, so a supported list (android-arm-eabi, android-arm64, android-x64) is known but the current arch matched none.
Source
Thrown at packages/core/rust/index.js:66
loadError = e;
}
break;
case 'arm':
localFileExisted = existsSync(
join(__dirname, 'parcel-node-bindings.android-arm-eabi.node'),
);
try {
if (localFileExisted) {
nativeBinding = require('./parcel-node-bindings.android-arm-eabi.node');
} else {
nativeBinding = require('@parcel/rust-android-arm-eabi');
}
} catch (e) {
loadError = e;
}
break;
default:
throw new Error(`Unsupported architecture on Android ${arch}`);
}
break;
case 'win32':
switch (arch) {
case 'x64':
localFileExisted = existsSync(
join(__dirname, 'parcel-node-bindings.win32-x64-msvc.node'),
);
try {
if (localFileExisted) {
nativeBinding = require('./parcel-node-bindings.win32-x64-msvc.node');
} else {
nativeBinding = require('@parcel/rust-win32-x64-msvc');
}
} catch (e) {
loadError = e;
}
break;View on GitHub (pinned to 59484858a1)
Solutions
- Run Parcel on a supported Android arch (arm64, arm-eabi, or x64) — check `node -p "process.arch"`.
- Move the build to a desktop OS (linux/darwin/win32) where full prebuilt coverage exists.
- Build the native binding from source for your arch via the @parcel/rust-<platform-arch> package if available.
- If arch is misreported, set the environment so Node detects the correct architecture.
Example fix
// before: process.arch === 'x86' on android // default -> throw `Unsupported architecture on Android x86` // after: run on a supported arch node -p process.arch // 'arm64'
Defensive patterns
Strategy: validation
Validate before calling
import { platform, arch } from 'process';
const ANDROID_SUPPORTED = new Set(['arm', 'arm64', 'x64']);
if (platform === 'android' && !ANDROID_SUPPORTED.has(arch)) {
throw new Error(`Unsupported Android arch ${arch}; use arm64/arm/x64 or run on linux/darwin.`);
} Type guard
const SUPPORTED_ANDROID_ARCH = ['arm','arm64','x64'];
function isSupportedAndroidArch(a: string): boolean {
return SUPPORTED_ANDROID_ARCH.includes(a);
} Prevention
- Print process.platform/process.arch at startup in deployment scripts to catch mismatches early.
- Pin Node and the OS image to a known-supported combination.
- Install the matching @parcel/rust-<platform-arch> prebuilt as an optionalDependency.
When it happens
Trigger: Executing Parcel's Rust bindings on Android under an architecture other than arm-eabi/arm64/x64 (e.g. android-x86, android-riscv64), or where os.arch() reports an unexpected identifier.
Common situations: Cross-compiling or running Parcel inside Termux/an Android container on uncommon hardware; running under an emulation layer that misreports the architecture string; using a Node build that returns a non-standard arch name.
Related errors
- Unsupported architecture on Windows: ${arch}
- Unsupported architecture on macOS: ${arch}
- Unsupported architecture on FreeBSD: ${arch}
- Unsupported architecture on Linux: ${arch}
- Unsupported OS: ${platform}, architecture: ${arch}
AI-assisted analysis of parcel-bundler/parcel@59484858a1 (2026-08-13).
Data as JSON: /api/errors/da3fbfb3a5d8ad40.
Report an issue: GitHub.