pulumi/pulumi · error · Error

fatal: Missing <engine> address

Error message

fatal: Missing <engine> address

What it means

The resource provider gRPC server's `configureRuntime` requires the engine address passed with the Configure RPC to initialize global settings (project, stack, parallelism). A undefined `engineAddr` means the host did not supply the engine's gRPC endpoint, so the server cannot communicate back and fails hard.

Source

Thrown at sdk/nodejs/provider/server.ts:608

                    failure.setReason(f.reason);
                    failureList.push(failure);
                }
                resp.setFailuresList(failureList);
            }

            callback(undefined, resp);
        } catch (e) {
            console.error(`${e}: ${e.stack}`);
            callback(e, undefined);
        }
    }
}

async function configureRuntime(req: any, engineAddr: string | undefined) {
    // NOTE: these are globals! We should ensure that all settings are identical between calls, and eventually
    // refactor so we can avoid the global state.
    if (engineAddr === undefined) {
        throw new Error("fatal: Missing <engine> address");
    }

    settings.resetOptions(
        req.getProject(),
        req.getStack(),
        req.getParallel(),
        engineAddr,
        req.getMonitorendpoint(),
        req.getDryrun(),
        req.getOrganization(),
    );

    // resetOptions doesn't reset the saved features
    await settings.awaitFeatureSupport();

    const pulumiConfig: { [key: string]: string } = {};
    const rpcConfig = req.getConfigMap();
    if (rpcConfig) {

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Run the provider through `pulumi` (not directly) so the engine address is supplied to the Configure RPC.
  2. Ensure the `PULUMI_NODEJS_ENGINE` environment variable is set and not stripped when launching the program.
  3. Upgrade the Pulumi CLI and provider SDK together to keep the engine/host RPC contract in sync.

Example fix

// before (standalone run)
node node_modules/@pulumi/my-provider/bin/provider.js
// after
PULUMI_NODEJS_ENGINE=127.0.0.1:57575 node node_modules/@pulumi/my-provider/bin/provider.js
Defensive patterns

Strategy: try-catch

Validate before calling

if (!process.env.PULUMI_NODEJS_ENGINE && !process.env.PULUMI_DEBUG_GRPC) {
  console.error("Not launched by the Pulumi engine (no engine address env var); refusing to start");
  process.exit(1);
}

Try / catch

try {
  await server.listen(args);
} catch (e) {
  if (/Missing <engine> address/.test((e as Error).message)) {
    console.error("This provider must be run by the Pulumi engine, not directly. Set PULUMI_NODEJS_ENGINE or use 'pulumi up'.");
    process.exit(1);
  }
  throw e;
}

Prevention

When it happens

Trigger: The `PULUMI_NODEJS_ENGINE` env var / engine address argument is not forwarded when the language host launches the provider; invoking the provider server manually (e.g. `node provider.js`) without an engine address; a bug or version mismatch where the engine omits the address field in the Configure request.

Common situations: Running the provider binary standalone for debugging; stale Pulumi CLI/host versions where the RPC contract changed; environment variable stripped in containerized or CI shells.

Related errors


AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31). Data as JSON: /api/errors/efc99015fb0ae7e3. Report an issue: GitHub.