pulumi/pulumi · critical
Problem executing program (could not run language executor):
Error message
Problem executing program (could not run language executor): %w
What it means
The language host could not even start the NodeJS/bun process: the error from cmd.Start()/run() was not an *exec.ExitError, meaning exec failed before the program ran. The host wraps the underlying OS error (typically 'executable file not found in $PATH') with this message.
Source
Thrown at sdk/nodejs/cmd/pulumi-language-nodejs/main.go:1071
case 0:
// This really shouldn't happen, but if it does, we don't want to render "non-zero exit code"
err = fmt.Errorf("Program exited unexpectedly: %w", exiterr)
case nodeJSProcessExitedAfterShowingUserActionableMessage:
// Check if we got special exit code that means "we already gave the user an
// actionable message". In that case, we can simply bail out and terminate `pulumi`
// without showing any more messages.
return &pulumirpc.RunResponse{Error: "", Bail: true}
default:
err = fmt.Errorf("Program exited with non-zero exit code: %d", code)
sniffer.Wait()
if sniffer.Detected() {
err = fmt.Errorf("Program exited with non-zero exit code: %d. %s", code, sniffer.Message())
}
}
} else {
// Otherwise, we didn't even get to run the program. This ought to never happen unless there's
// a bug or system condition that prevented us from running the language exec. Issue a scarier error.
err = fmt.Errorf("Problem executing program (could not run language executor): %w", err)
}
errResult = err.Error()
}
// notify our caller of the response we got from the nodejs process. Note: this is done
// unilaterally. this is how we signal to nodeLanguageHost.Run that we are done and it can
// return to its caller.
return &pulumirpc.RunResponse{Error: errResult}
}
// constructArguments constructs a command-line for `pulumi-language-nodejs`
// by enumerating all of the optional and non-optional arguments present
// in a RunRequest.
func (host *nodeLanguageHost) constructArguments(
req *pulumirpc.RunRequest, runPath, address, pipesDirectory string,
) []string {
args := []string{runPath}View on GitHub (pinned to 793f7b2e16)
Solutions
- Install the required runtime (node or bun) and make sure it is on PATH: `node -v` / `bun -v` should succeed in your shell.
- Fix the `runtime` field in Pulumi.yaml (options.runtime) to a valid installed binary name.
- If using a custom runtime binary, ensure it is executable (chmod +x) and reachable.
- In CI, add the runtime to the job's PATH before invoking pulumi.
Example fix
// before (Pulumi.yaml) options: runtime: bun # bun not installed // after: install bun or switch runtime curl -fsSL https://bun.sh/install | bash # or options: runtime: nodejs
Defensive patterns
Strategy: validation
Validate before calling
# Verify the runtime is installed and on PATH before pulumi up
runtime=$(yq '.options.runtime // "nodejs"' Pulumi.yaml)
command -v "$runtime" >/dev/null || { echo "$runtime not found in PATH"; exit 1; } Prevention
- Install node/bun in every environment (CI images, shells, sudo) where pulumi runs.
- Keep `runtime` in Pulumi.yaml matching an installed binary.
- Verify PATH in CI before invoking pulumi.
When it happens
Trigger: cmd.Start() fails because runtimeBin (node/bun) does not exist or is not executable in PATH, working directory is missing, or exec setup fails (sdk/nodejs/cmd/pulumi-language-nodejs/main.go:1068-1071).
Common situations: Runtime set to 'node' but node not installed in the CLI's PATH; `options.runtime: 'bun'` in Pulumi.yaml without bun installed; custom runtime binary name typo; broken PATH under sudo or CI images.
Related errors
- error while looking for fnm: %w
- could not find executable %q: %w
- find npm: %w
- the project's manifest is package.yaml, which requires pnpm,
- could not find npm on the $PATH; npm is installed with Node.
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/cfdacd0f682da175.
Report an issue: GitHub.