pulumi/pulumi · error

the builtin provider does not implement call

Error message

the builtin provider does not implement call

What it means

The builtin provider implements only Invoke for functions; provider-level Call (used for multi-function call dispatch, e.g. some SDK `call` operations on components) is not implemented and always returns this error from builtinProvider.Call.

Source

Thrown at pkg/resource/deploy/builtins.go:358

	var err error
	switch req.Tok {
	case readStackOutputs:
		outs, err = p.readStackReference(ctx, req.Args)
	case readStackResourceOutputs:
		outs, err = p.readStackResourceOutputs(req.Args)
	case getResource:
		outs, err = p.getResource(req.Args)
	default:
		err = fmt.Errorf("unrecognized function name: '%v'", req.Tok)
	}
	if err != nil {
		return plugin.InvokeResponse{}, err
	}
	return plugin.InvokeResponse{Properties: outs}, nil
}

func (p *builtinProvider) Call(context.Context, plugin.CallRequest) (plugin.CallResponse, error) {
	return plugin.CallResult{}, errors.New("the builtin provider does not implement call")
}

func (p *builtinProvider) GetPluginInfo(context.Context) (plugin.PluginInfo, error) {
	// return an error: this should not be called for the builtin provider
	return plugin.PluginInfo{}, errors.New("the builtin provider does not report plugin info")
}

func (p *builtinProvider) SignalCancellation(context.Context) error {
	p.cancel()
	return nil
}

func (p *builtinProvider) readStackReference(
	ctx context.Context, inputs property.Map,
) (property.Map, error) {
	tracer := otel.Tracer("pulumi-cli")
	ctx, span := cmdutil.StartSpan(ctx, tracer, "builtinProvider.readStackReference")
	defer span.End()

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Use `invoke` (the plain function-invoke path) instead of `call` for `pulumi:pulumi:*` builtin functions.
  2. Upgrade the Pulumi CLI/engine to a version where builtin `pulumi:pulumi:*` functions are exposed in a callable form, or use an SDK wrapper backed by Invoke.
  3. If you need Call support in the builtin provider (engine development), implement builtinProvider.Call in builtins.go:357.

Example fix

// before
res, err := pulumi.Call(ctx, "pulumi:pulumi:readStackOutputs", args)
// after
res, err := pulumi.Invoke(ctx, "pulumi:pulumi:readStackOutputs", args)
Defensive patterns

Strategy: fallback

Validate before calling

const invokeOnlyTokens = new Set([
  'pulumi:pulumi:readStackOutputs',
  'pulumi:pulumi:readStackResourceOutputs',
  'pulumi:pulumi:getResource',
])
function assertNotCallOnBuiltin(tok) {
  if (invokeOnlyTokens.has(tok)) throw new Error('Use invoke, not call, for builtin pulumi:pulumi:* functions')
}

Type guard

null

Try / catch

try {
  return await call(tok, args)
} catch (e) {
  if (String(e).includes('does not implement call')) {
    return await invoke(tok, args) // fallback to invoke for builtin functions
  }
  throw e
}

Prevention

When it happens

Trigger: The engine issues a `CallRequest` to the builtin provider — i.e. a program uses the SDK's `call` operation (rather than `invoke`) against a function or component method that resolves to the builtin provider's `pulumi:pulumi:*` tokens.

Common situations: Newer language SDKs using the call-based ComponentResource/output-binding path against an engine whose builtin provider predates Call support; custom tooling converting invokes to calls.

Related errors


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