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

  1. Upgrade NodeJS to version 14 or newer (18+ recommended for native fetch support).
  2. Use a Node version manager (nvm/fnm/volta) to select a compatible version for the project.
  3. 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

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


AI-assisted analysis of dotnet/runtime@290d5ab72c (2026-08-06). Data as JSON: /api/errors/f7f3fbe9940ccbb6. Report an issue: GitHub.