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
- Use `invoke` (the plain function-invoke path) instead of `call` for `pulumi:pulumi:*` builtin functions.
- 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.
- 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
- Prefer `invoke` for pulumi:pulumi:* builtin functions.
- Check SDK docs for whether an operation is call-based or invoke-based before use.
- Keep engine at a version supporting your SDK's call path for non-builtin providers.
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
- the builtin provider does not support List
- builtin resources may not be constructed
- unrecognized function name: '%v'
- the builtin provider does not report plugin info
- unknown property "%v"
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/44daf5ae2b97aa7a.
Report an issue: GitHub.