# Plugins
<gh-file:pulumi#proto/pulumi/plugin.proto>

## Services

(pulumirpc.PackageResolver)=
### 🔌 PackageResolver
`PackageResolver` resolves a [](pulumirpc.PackageSpec) -- a user-supplied package reference such as a name,
registry coordinate, git URL, or local path, optionally carrying a version and parameters -- into a concrete,
downloadable [](pulumirpc.PackageDependency). The engine exposes this service to resource providers as part of the
provider handshake so they can resolve packages the same way the CLI does.

This is currently unstable and experimental.


(pulumirpc.PackageResolver.ResolvePackage)=
#### 📞 ResolvePackage

⤵️ [PackageSpec](#pulumirpc.PackageSpec) ⤴️ [PackageDependency](#pulumirpc.PackageDependency)

`ResolvePackage` resolves the given package specification to a concrete package dependency.

## Messages
(pulumirpc.PackageDependency)=
### 📨 PackageDependency
PackageDependency is information about a package that a program may depend upon.


`name` [string](#string)
:   the name of the plugin.


`kind` [string](#string)
:   the kind of plugin (e.g., language, etc).


`version` [string](#string)
:   the semver for this plugin.


`server` [string](#string)
:   the URL of a server that can be used to download this plugin, if needed.


`checksums` [PackageDependency.ChecksumsEntry](#pulumirpc.PackageDependency.ChecksumsEntry)
:   a map of the checksums for the plugin, will be empty from old language runtimes. The keys should match
  the os and architecture names used in pulumi releases, e.g. "darwin-amd64", "windows-arm64".


`parameterization` [PackageParameterization](#pulumirpc.PackageParameterization)
:   The optional replacement parameterization for this package.


`extension` [PackageParameterization](#pulumirpc.PackageParameterization)
:   The optional extension parameterization for this package.

(pulumirpc.PackageDependency.ChecksumsEntry)=
### 📨 ChecksumsEntry



`key` [string](#string)
: &lt;No description&gt;


`value` [bytes](#bytes)
: &lt;No description&gt;

(pulumirpc.PackageParameterization)=
### 📨 PackageParameterization



`name` [string](#string)
:   the parameterized package name.


`version` [string](#string)
:   the parameterized package version.


`value` [bytes](#bytes)
:   the parameter value for the parameterized package.

(pulumirpc.PackageSpec)=
### 📨 PackageSpec



`source` [string](#string)
:   The "name" of the plugin.
  
  Source may be one of:
  - A simple name, like "pkg"
  - A registry double or triple: "org/pkg", "source/org/pkg"
  - A git URL, "git://github.com/pulumi/pulumi-example/path"
  - An un-prefixed URL, like github.com/pulumi/pulumi-example/path
  - A local path, like /usr/bin/pkg


`version` [string](#string)
:   The version of the provider, may be Semver 2.0 or a git hash.


`parameters` [string](#string)
:   Any parameters needed to configure the package.


`checksums` [PackageSpec.ChecksumsEntry](#pulumirpc.PackageSpec.ChecksumsEntry)
:   if set will be used to validate the plugin downloaded matches. This is keyed by
  "$os-$arch", e.g. "linux-x64".


`server` [string](#string)
:   the URL of a server that can be used to download this plugin, if needed.

(pulumirpc.PackageSpec.ChecksumsEntry)=
### 📨 ChecksumsEntry



`key` [string](#string)
: &lt;No description&gt;


`value` [bytes](#bytes)
: &lt;No description&gt;

(pulumirpc.PluginAttach)=
### 📨 PluginAttach
PluginAttach is used to attach an already running plugin to the engine.

Normally the engine starts the plugin process itself and passes the engine address as the first argumnent.
But when debugging it can be useful to have an already running provider that the engine instead attaches
to, this message is used so the provider can still be passed the engine address to communicate with.


`address` [string](#string)
:   the grpc address for the engine

(pulumirpc.PluginDependency)=
### 📨 PluginDependency
PluginDependency is information about a plugin that a program may depend upon.


`name` [string](#string)
:   the name of the plugin.


`kind` [string](#string)
:   the kind of plugin (e.g., language, etc).


`version` [string](#string)
:   the semver for this plugin.


`server` [string](#string)
:   the URL of a server that can be used to download this plugin, if needed.


`checksums` [PluginDependency.ChecksumsEntry](#pulumirpc.PluginDependency.ChecksumsEntry)
:   a map of the checksums for the plugin, will be empty from old language runtimes. The keys should match
  the os and architecture names used in pulumi releases, e.g. "darwin-amd64", "windows-arm64".

(pulumirpc.PluginDependency.ChecksumsEntry)=
### 📨 ChecksumsEntry



`key` [string](#string)
: &lt;No description&gt;


`value` [bytes](#bytes)
: &lt;No description&gt;

(pulumirpc.PluginInfo)=
### 📨 PluginInfo
PluginInfo is meta-information about a plugin that is used by the system.


`version` [string](#string)
:   the semver for this plugin.

