1. Docs
  2. Infrastructure as Code
  3. Guides
  4. Building & Extending
  5. Pulumi Packages Guides

Pulumi Packages Guides

    A Pulumi package bundles components or a provider with a plugin so Pulumi can generate an SDK for any supported language. Package authors choose between two distribution models — source-based and executable-based — which differ in consumer runtime requirements, registry support, and publishing overhead.

    Native language packages (npm, PyPI, Go modules, etc.) are another option for sharing components within a single language — see Packaging Components for details.

    Package types

    Source-based plugin package

    A Pulumi package distributed as source code. SDKs are usually generated locally by the Pulumi CLI when consumers run pulumi package add against a Git URL, a local path, or a PulumiPlugin.yaml in an existing repo — though you can also pre-publish per-language SDKs to native package registries if you prefer. The runtime requirements for consumers are the same as for any Pulumi program written in the authoring language: Node.js for TypeScript, Python for Python, a JVM for Java, and so on. Compiled Go and .NET components have no additional consumer runtime requirement.

    Choose this when:

    • You want multi-language consumption with the least authoring overhead.
    • Your consumers can reasonably install the authoring language’s runtime.
    • You’re publishing to the Pulumi IDP Private Registry, or to no registry at all (source-based packages work fine consumed directly from Git).

    See Authoring a Source-Based Plugin Package for the full workflow.

    Executable-based plugin package

    A Pulumi package whose plugin is a pre-built executable, typically a Pulumi provider. The Pulumi CLI downloads the binary at pulumi install time from a pluginDownloadURL and runs it as a subprocess, so no authoring-language runtime is required on the consumer’s machine. SDKs are usually pre-published to npm, PyPI, NuGet, Maven Central, and as a tagged Go module — consumers can still generate SDKs locally from the schema, but since you’re already running a CI/CD pipeline to publish binaries, publishing the SDKs alongside is a natural extension.

    Pulumi only provides supported tooling for authoring executable plugins in Go (via pulumi-go-provider), and for practical purposes new executable plugins should be written in Go. Other languages are documented but require hand-authoring the schema and managing serialization details yourself.

    Choose this when:

    • You are publishing to the public Pulumi Registry.
    • You need to expose custom resources or provider functions from any authoring language.
    • You want zero consumer runtime dependencies and are willing to invest in cross-compilation and (usually) per-language SDK publishing.

    See Authoring an Executable Plugin Package for the full workflow.

    Comparison

    Source-based plugin packageExecutable-based plugin package
    Consumer runtime requiredAuthoring languageNone
    Custom resources and functionsGo only via pulumi-go-providerYes (all languages)
    Pulumi IDP Private RegistrySupportedSupported
    Public Pulumi RegistryNot supported todaySupported
    Pre-publishing SDKsOptional (usually generated locally)Typical (consumers can still generate locally)
    Publishing overheadLowHigh
    Iteration speedFastSlower

    Guides in this section