dotnet/runtime · error · Error
NodeJS at '${process.execPath}' has too low version '${proce
Error message
NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}. What it means
Thrown by detect_features_and_polyfill when running under NodeJS and the major version of process.versions.node is less than 14. The .NET WASM runtime requires NodeJS 14 or newer.
Source
Thrown at src/mono/browser/runtime/loader/polyfills.ts:60
const str = String(input).replace(/=+$/, "");
let output = "";
for (let bc = 0, bs = 0, i = 0; i < str.length; i++) {
const c = b64.indexOf(str.charAt(i));
if (c === -1) continue;
bs = bc % 4 ? bs * 64 + c : c;
if (bc++ % 4) output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6)));
}
return output;
};
}
}
if (ENVIRONMENT_IS_NODE) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore:
const process = await import(/*! webpackIgnore: true */"process");
const minNodeVersion = 14;
if (process.versions.node.split(".")[0] < minNodeVersion) {
throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}.`);
}
}
const scriptUrlQuery = /*! webpackIgnore: true */import.meta.url;
const queryIndex = scriptUrlQuery.indexOf("?");
if (queryIndex > 0) {
loaderHelpers.modulesUniqueQuery = scriptUrlQuery.substring(queryIndex);
}
loaderHelpers.scriptUrl = normalizeFileUrl(scriptUrlQuery);
loaderHelpers.scriptDirectory = normalizeDirectoryUrl(loaderHelpers.scriptUrl);
loaderHelpers.locateFile = (path) => {
if ("URL" in globalThis && globalThis.URL !== (URLPolyfill as any)) {
return new URL(path, loaderHelpers.scriptDirectory).toString();
}
if (isPathAbsolute(path)) return path;
return loaderHelpers.scriptDirectory + path;
};View on GitHub (pinned to 290d5ab72c)
Solutions
- Upgrade NodeJS to version 14 or newer (18+ recommended for native fetch support).
- Use a Node version manager (nvm/fnm/volta) to select a compatible version for the project.
- Pin a >=14 Node version in CI and in package.json engines.
Example fix
// before: package.json allowing old node
// "engines": { "node": ">=10" }
// after
// "engines": { "node": ">=18" }
// and upgrade the installed runtime:
// nvm install 18 && nvm use 18 Defensive patterns
Strategy: validation
Validate before calling
const major = Number(process.versions.node.split('.')[0]);
if (major < 14) { /* upgrade Node before continuing */ } Type guard
function nodeVersionOk(): boolean {
return typeof process !== 'undefined' && Number(process.versions.node.split('.')[0]) >= 14;
} Prevention
- Declare "engines": { "node": ">=18" } in package.json.
- Use a Node version manager to enforce a minimum in CI and locally.
- Fail fast at the top of your entry script if Node is too old.
When it happens
Trigger: Produced during runtime boot when ENVIRONMENT_IS_NODE is true and parseInt(process.versions.node) < 14.
Common situations: Running tests or a host script under an old NodeJS (10/12); CI pinned to an old Node image; a developer machine with an outdated global Node install.
Related errors
- Missing window to the query parameters from
- Please install `node-fetch` and `node-abort-controller` npm
- No fetch implementation available
- URLSearchParams is supported
- Missing window to the query parameters from
AI-assisted analysis of dotnet/runtime@290d5ab72c (2026-08-06).
Data as JSON: /api/errors/f7f3fbe9940ccbb6.
Report an issue: GitHub.