affaan-m/ECC · error
Unsupported platform: ${platform}
Error message
Unsupported platform: ${platform} What it means
normalizePlatform in scripts/lib/nasiko-release.js maps Node's 'win32' to 'windows' and only accepts 'linux', 'darwin', and 'windows' as operating systems. Any other process.platform value (for example 'freebsd', 'openbsd', 'sunos', 'aix', 'android', 'haiku') is rejected because no Nasiko binary has been qualified for it. The function backs getQualifiedRelease, so every install path hits this check.
Source
Thrown at scripts/lib/nasiko-release.js:33
const MAX_MANIFEST_BYTES = 1024 * 1024;
const MAX_ARCHIVE_BYTES = 100 * 1024 * 1024;
const MAX_BINARY_BYTES = 64 * 1024 * 1024;
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')}`;View on GitHub (pinned to 06c5e118c4)
Solutions
- Run the installer on linux, macOS, or Windows where qualified binaries exist
- On an unsupported host, containerize the install (for example a linux container) or run under WSL
- If you maintain the tool, add the platform to QUALIFIED_RELEASES with pinned digests after qualifying a build
Example fix
// before
await installNasiko({ version: 'v0.1.0' }); // throws on freebsd
// after
if (!['linux', 'darwin', 'win32'].includes(process.platform)) {
throw new Error(`Nasiko is not supported on ${process.platform}`);
}
await installNasiko({ version: 'v0.1.0' }); Defensive patterns
Strategy: validation
Validate before calling
const NASIKO_PLATFORMS = new Set(['linux', 'darwin', 'win32']);
if (!NASIKO_PLATFORMS.has(process.platform)) {
throw new Error(`Nasiko install unsupported on ${process.platform}; skipping`);
} Type guard
type NasikoPlatform = 'linux' | 'darwin' | 'win32'; const isNasikoPlatform = (p: NodeJS.Platform): p is NasikoPlatform => p === 'linux' || p === 'darwin' || p === 'win32';
Try / catch
try {
await installNasiko({ version: 'v0.1.0' });
} catch (error) {
if (/^Unsupported platform:/.test(String(error.message))) {
// Skip or select an alternative tool for this host; not retryable.
}
throw error;
} Prevention
- Gate installer invocation behind a supported-platform matrix check in your bootstrap script
- Assert `node -p process.platform` in CI matrices before adding the install step
- Keep platform constants in one shared module so checks and calls cannot drift
When it happens
Trigger: Calling getQualifiedRelease (or any install helper built on it) on a host where process.platform is not linux/darwin/win32, or explicitly passing platform: 'freebsd' and similar. Node on FreeBSD/OpenBSD jails, Solaris/AIX, or Android builds reporting 'android' all produce it.
Common situations: BSD-based CI runners or jails; legacy Solaris/AIX build servers; Termux/Android Node builds; hardcoding a platform string from a config that drifts from the supported matrix.
Understand the failure class
Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.
Related errors
- Unsupported architecture: ${architecture}
- Refusing to replace modified legacy Codex artifact: ${filePa
- Legacy Codex sync state requires recovery before reinstall:
- Install module ${moduleId} has invalid targets; expected an
- Install module ${moduleId} has unsupported targets: ${unsupp
AI-assisted analysis of affaan-m/ECC@06c5e118c4 (2026-08-18).
Data as JSON: /api/errors/dec6f12b7f79a51e.
Report an issue: GitHub.