pulumi/pulumi · critical
could not find plugin
Error message
could not find plugin
What it means
During Registry.Check of a provider resource, the engine loads the provider plugin (via loadParameterizedProvider) to run its CheckConfig. If loading succeeds but returns a nil provider, the registry has no plugin to check and returns "could not find plugin". This means the requested provider package/version/parameterization could not be resolved to an installed or downloadable plugin.
Source
Thrown at pkg/resource/deploy/providers/registry.go:669
Property: "parameter", Reason: err.Error(),
}}}, nil
}
envVarMappings, err := GetEnvironmentVariableMappings(req.News)
if err != nil {
return plugin.CheckResponse{Failures: []plugin.CheckFailure{{
Property: "envVarMappings", Reason: err.Error(),
}}}, nil
}
// TODO: We should thread checksums through here.
provider, err := loadParameterizedProvider(
ctx, name, version, downloadURL, nil, parameter, r.pctx, r.builtins, buildEnvWithMappings(envVarMappings))
if err != nil {
return plugin.CheckResponse{}, err
}
if provider == nil {
return plugin.CheckResponse{}, errors.New("could not find plugin")
}
// Check the provider's config. If the check fails, unload the provider.
resp, err := provider.CheckConfig(ctx, plugin.CheckConfigRequest{
URN: req.URN,
Olds: resource.FromResourcePropertyMap(FilterProviderConfig(req.Olds)),
News: resource.FromResourcePropertyMap(FilterProviderConfig(req.News)),
AllowUnknowns: true,
})
if len(resp.Failures) != 0 || err != nil {
contract.IgnoreClose(provider)
return plugin.CheckResponse{Failures: resp.Failures}, err
}
// Create a provider reference using the URN and the unconfigured ID and register the provider.
r.setProvider(mustNewReference(req.URN, UnconfiguredID), provider)
properties := resource.ToResourcePropertyMap(resp.Properties)View on GitHub (pinned to 793f7b2e16)
Solutions
- Run pulumi plugin install (or pulumi up with network access) to fetch the missing provider plugin at the required version.
- Verify the plugin exists: pulumi plugin ls; if a wrong version is pinned, correct the provider version in package.json/requirements.txt/go.mod and regenerate the SDK.
- Check the provider name/package matches the plugin on disk (rename mismatches from GetProviderName will not resolve).
- For parameterized providers, ensure the parameterization inputs (source URL/version) are valid and reachable.
- If behind a firewall, set the plugin download URL / proxy env so the engine can fetch the plugin.
Example fix
// before (offline CI, provider never installed) npm ci && pulumi preview // after npm ci && pulumi plugin install resource myprovider 1.2.3 && pulumi preview
Defensive patterns
Strategy: validation
Validate before calling
installed := exec.Command("pulumi", "plugin", "ls"); out, _ := installed.Output()
if !strings.Contains(string(out), "myprovider") || !strings.Contains(string(out), "1.2.3") {
exec.Command("pulumi", "plugin", "install", "resource", "myprovider", "1.2.3").Run()
} Try / catch
if err != nil && strings.Contains(err.Error(), "could not find plugin") { run `pulumi plugin install resource <pkg> <version>`; retry once } Prevention
- Pin provider versions in your package manifest and commit the lockfile
- Pre-install plugins in CI images (pulumi plugin install)
- Verify plugin name/version match the SDK's package.json/requirements
- For air-gapped environments, mirror the plugin and configure the download URL
When it happens
Trigger: Check of a provider resource whose plugin is not installed, whose version has no available download, whose parameterization (e.g. bridged/MultiTurn parameters) cannot resolve, or where the plugin name derived from the URN package does not match any plugin on disk or in the download cache.
Common situations: Using a provider before running pulumi plugin install / pulumi up failing to auto-download (offline, air-gapped, missing download URL); pinning a plugin version that was never published; renovate-style version bumps in the program without installing the new plugin; parameterized providers (e.g. terraform-bridge) whose parameter blob references an unavailable plugin.
Related errors
- install %q: %w
- load provider: %w
- failed to get schema: %w
- could not start context for plugin at %q: %w
- could not run plugin at %q: %w
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/47f9a51adb315d2b.
Report an issue: GitHub.