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

  1. Run pulumi plugin install (or pulumi up with network access) to fetch the missing provider plugin at the required version.
  2. 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.
  3. Check the provider name/package matches the plugin on disk (rename mismatches from GetProviderName will not resolve).
  4. For parameterized providers, ensure the parameterization inputs (source URL/version) are valid and reachable.
  5. 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

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


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