{"record":{"id":"47f9a51adb315d2b","repo":"pulumi/pulumi","slug":"could-not-find-plugin","errorCode":null,"errorMessage":"could not find plugin","messagePattern":"could not find plugin","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"pkg/resource/deploy/providers/registry.go","lineNumber":669,"sourceCode":"\t\t\tProperty: \"parameter\", Reason: err.Error(),\n\t\t}}}, nil\n\t}\n\n\tenvVarMappings, err := GetEnvironmentVariableMappings(req.News)\n\tif err != nil {\n\t\treturn plugin.CheckResponse{Failures: []plugin.CheckFailure{{\n\t\t\tProperty: \"envVarMappings\", Reason: err.Error(),\n\t\t}}}, nil\n\t}\n\n\t// TODO: We should thread checksums through here.\n\tprovider, err := loadParameterizedProvider(\n\t\tctx, name, version, downloadURL, nil, parameter, r.pctx, r.builtins, buildEnvWithMappings(envVarMappings))\n\tif err != nil {\n\t\treturn plugin.CheckResponse{}, err\n\t}\n\tif provider == nil {\n\t\treturn plugin.CheckResponse{}, errors.New(\"could not find plugin\")\n\t}\n\n\t// Check the provider's config. If the check fails, unload the provider.\n\tresp, err := provider.CheckConfig(ctx, plugin.CheckConfigRequest{\n\t\tURN:           req.URN,\n\t\tOlds:          resource.FromResourcePropertyMap(FilterProviderConfig(req.Olds)),\n\t\tNews:          resource.FromResourcePropertyMap(FilterProviderConfig(req.News)),\n\t\tAllowUnknowns: true,\n\t})\n\tif len(resp.Failures) != 0 || err != nil {\n\t\tcontract.IgnoreClose(provider)\n\t\treturn plugin.CheckResponse{Failures: resp.Failures}, err\n\t}\n\n\t// Create a provider reference using the URN and the unconfigured ID and register the provider.\n\tr.setProvider(mustNewReference(req.URN, UnconfiguredID), provider)\n\n\tproperties := resource.ToResourcePropertyMap(resp.Properties)","sourceCodeStart":651,"sourceCodeEnd":687,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/resource/deploy/providers/registry.go#L651-L687","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before (offline CI, provider never installed)\nnpm ci && pulumi preview\n\n// after\nnpm ci && pulumi plugin install resource myprovider 1.2.3 && pulumi preview","handlingStrategy":"validation","validationCode":"installed := exec.Command(\"pulumi\", \"plugin\", \"ls\"); out, _ := installed.Output()\nif !strings.Contains(string(out), \"myprovider\") || !strings.Contains(string(out), \"1.2.3\") {\n    exec.Command(\"pulumi\", \"plugin\", \"install\", \"resource\", \"myprovider\", \"1.2.3\").Run()\n}","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"could not find plugin\") { run `pulumi plugin install resource <pkg> <version>`; retry once }","preventionTips":["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"],"tags":["plugin","provider","versioning","install"],"backgroundTag":"plugin-not-found","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-09-01T08:17:40.651Z"}