affaan-m/ECC · error

Unsupported architecture for Windows: ${architecture}

Error message

Unsupported architecture for Windows: ${architecture}

What it means

normalizePlatform in scripts/lib/nasiko-release.js accepts arm64 in general, but Windows only has a windows/amd64 entry in QUALIFIED_RELEASES. This explicit check rejects the windows+arm64 combination up front with a Windows-specific message instead of letting it fall through to the generic 'not qualified' error. It fires when Node reports platform 'win32' with architecture 'arm64' (native Windows-on-ARM Node).

Source

Thrown at scripts/lib/nasiko-release.js:36

const MAX_METADATA_BYTES = 64 * 1024;
const SHA256_PATTERN = /^sha256:[a-f0-9]{64}$/;

const QUALIFIED_RELEASES = Object.freeze({
  'v0.1.0': Object.freeze({
    'linux/amd64': Object.freeze({ manifestDigest: 'sha256:0df748a40f3d714b6b6a3376a1d13a224c05bdb8d1628f31ace5a7bee8ceb9de', binaryDigest: 'sha256:94a2bcab2d3832257e0111480bb7c3dcac81d63a7ae9bac53206a92c0957ee0f' }),
    'linux/arm64': Object.freeze({ manifestDigest: 'sha256:655021a129c7df4621a80d16ea4eab38018530bfe9a20da646641d9f4ac5c249', binaryDigest: 'sha256:85f9fa5cfbed6c276fce6df2d71e9d0c66d7d8e8d46a40297464833d38db7a7e' }),
    'darwin/amd64': Object.freeze({ manifestDigest: 'sha256:b4188482621efd7da5a2ab630f653665ab5f80b9aceae448b6bb5fc93e003f06', binaryDigest: 'sha256:ed6232e0bb96a2dcfd86d3c25f86021091600d52f09250403a54528bfe8100a3' }),
    'darwin/arm64': Object.freeze({ manifestDigest: 'sha256:ce7e54fa19f989a5d125c4409b3587ca9503bb5a07bc5ff223c60e0fbad437f0', binaryDigest: 'sha256:3c60f862b04eea1b9a633593b39f1a443d9ca2123cf3edfd150d313e95f3894b' }),
    'windows/amd64': Object.freeze({ manifestDigest: 'sha256:0760fe1fc98e8fedb66796aaf891a1de9268af1338c5e88b949656fda5d9f045', binaryDigest: 'sha256:0f57672d24fc3c70e4cbbf22864e65b35b9978ddaae3793803841536e682929b' }),
  }),
});

function normalizePlatform(platform = process.platform, architecture = process.arch) {
  const osName = platform === 'win32' ? 'windows' : platform;
  if (!['linux', 'darwin', 'windows'].includes(osName)) throw new Error(`Unsupported platform: ${platform}`);
  const arch = architecture === 'x64' ? 'amd64' : architecture;
  if (!['amd64', 'arm64'].includes(arch)) throw new Error(`Unsupported architecture: ${architecture}`);
  if (osName === 'windows' && arch !== 'amd64') throw new Error(`Unsupported architecture for Windows: ${architecture}`);
  return { os: osName, arch, binaryName: osName === 'windows' ? 'nasiko.exe' : 'nasiko' };
}

function getQualifiedRelease(version, platform = process.platform, architecture = process.arch) {
  if (!/^v\d+\.\d+\.\d+$/.test(String(version || ''))) {
    throw new Error('Nasiko installation requires a pinned version such as v0.1.0; latest is not allowed.');
  }
  const normalized = normalizePlatform(platform, architecture);
  const qualification = QUALIFIED_RELEASES[version]?.[`${normalized.os}/${normalized.arch}`];
  if (!qualification) throw new Error(`Nasiko ${version} is not qualified for ${normalized.os}/${normalized.arch}.`);
  return { version, ...normalized, ...qualification, license: LICENSE, sourceUrl: SOURCE_URL };
}

function digestBytes(bytes) {
  return `sha256:${crypto.createHash('sha256').update(bytes).digest('hex')}`;
}

function assertDigest(bytes, expectedDigest, label) {

View on GitHub (pinned to 06c5e118c4)

Solutions

  1. Install the x64 Node build on the Windows on ARM machine (it runs under emulation and reports process.arch 'x64') and rerun the installer
  2. Run the install inside WSL, which reports linux/arm64 and is qualified
  3. Wait for or contribute a qualified windows/arm64 entry in QUALIFIED_RELEASES

Example fix

# before: native arm64 Node on Windows on ARM
> node -p process.arch
arm64  # installer throws
# after: install Node.js x64 (emulated on WoA)
> node -p process.arch
x64  # installer proceeds as windows/amd64
Defensive patterns

Strategy: validation

Validate before calling

if (process.platform === 'win32' && process.arch === 'arm64') {
  throw new Error('Nasiko has no windows/arm64 build; use x64 Node under emulation or WSL');
}

Type guard

const isSupportedWindowsCombo = (p: string, a: string): boolean =>
  !(p === 'win32' && a !== 'x64');

Try / catch

try {
  await installNasiko({ version: 'v0.1.0' });
} catch (error) {
  if (/^Unsupported architecture for Windows:/.test(String(error.message))) {
    // Route the user to x64 Node (emulated) or WSL; not retryable as-is.
  }
  throw error;
}

Prevention

When it happens

Trigger: Running the Nasiko installer under a native arm64 Node build on a Windows on ARM PC (Surface Pro X and similar), where process.platform === 'win32' and process.arch === 'arm64'. Also if a caller explicitly passes platform: 'win32', architecture: 'arm64'.

Common situations: Windows on ARM laptops used for development; arm64 Node installed by default via winget on WoA; CI images for windows-arm64 runners.

Related errors


AI-assisted analysis of affaan-m/ECC@06c5e118c4 (2026-08-18). Data as JSON: /api/errors/07784ee599b6a28f. Report an issue: GitHub.