Skip to main content
Pulumi logo Pulumi logo
  1. Docs
  2. Infrastructure as Code
  3. Guides
  4. Building & Extending
  5. Packages
  6. Schema

Pulumi package schema

    Pulumi Packages are described by a package schema, which is used to drive code generation for SDKs in each supported Pulumi language, as well as generation of language-agnostic package documentation. This schema can be manually authored (for component packages) or generated from some other source (such as a cloud provider’s API specifications for a native Pulumi resource provider). Packages can expose resources and functions, define types used by these resources and functions, and provide packaging metadata for language-specific SDKs.

    Example

    An example of the Pulumi Package Schema is below. This schema describes a package named apigateway, with a single resource RestAPI which is a component, and which has a required input property routes and required (always populated) output properties url of type string and api which references the external type of the AWS API Gateway RestAPI resource. The type of the routes input is a custom type named EventHandlerRoute defined in the schema, which is an object type with path,method and function properties. The schema supports generation of SDKs for csharp, go, nodejs and python, with metadata configuring each of the generated SDKs in the corresponding sections.

    {
        "name": "apigateway",
        "types": {
            "apigateway:index:EventHandlerRoute": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string"
                    },
                    "method": {
                        "type": "string"
                    },
                    "function": {
                        "$ref": "/aws/v7.44.0/schema.json#/resources/aws:lambda%2Ffunction:Function"
                    }
                }
            }
        },
        "resources": {
            "apigateway:index:RestAPI": {
                "isComponent": true,
                "inputProperties": {
                    "routes": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/apigateway:index:EventHandlerRoute"
                        }
                    }
                },
                "requiredInputs": [
                    "routes"
                ],
                "properties": {
                    "url": {
                        "type": "string"
                    },
                    "api": {
                        "$ref": "/aws/v7.44.0/schema.json#/resources/aws:apigateway%2FrestApi:RestApi"
                    }
                },
                "required": [
                    "url",
                    "api"
                ]
            }
        },
        "language": {
            "csharp": {
                "packageReferences": {
                    "Pulumi": "3.*",
                    "Pulumi.Aws": "7.*"
                }
            },
            "go": {
                "generateResourceContainerTypes": true,
                "importBasePath": "github.com/acmecorp/pulumi-apigateway/sdk/go/apigateway"
            },
            "nodejs": {
                "dependencies": {
                    "@pulumi/aws": "^7.44.0"
                },
                "devDependencies": {
                    "typescript": "^5.0.0"
                }
            },
            "python": {
                "requires": {
                    "pulumi": ">=3.0.0,<4.0.0",
                    "pulumi-aws": ">=7.0.0,<8.0.0"
                }
            }
        }
    }
    

    Complete schema examples that include a much wider range of schema configuration styles are available in these existing packages:

    • AWS - Bridged Provider Package
    • Azure Native - Native Pulumi Provider Package
    • EKS - Component Package

    Pulumi package schema

    Generated from pkg/codegen/schema/pulumi.json in pulumi/pulumi v3.262.0 — the metaschema pulumi schema check validates against.

    Every type below is one shape a package schema can contain. Names are the JSON keys you write; a linked type means that property’s value takes the shape of another type on this page. To check a schema you’ve written against these rules, run pulumi schema check.

    Package

    The top-level object of a package schema. Everything else on this page describes something reachable from here.

    • name string required
      The unqualified name of the package (e.g. “aws”, “azure”, “gcp”, “kubernetes”, “random”)
    • displayName string optional
      The human-friendly name of the package.
    • version string optional
      The version of the package. The version must be valid semver.
    • description string optional
      The description of the package. Descriptions are interpreted as Markdown.
    • keywords array[string] optional

      The list of keywords that are associated with the package, if any.

      Reserved keywords can be specified that help with categorizing the package in the Pulumi Registry. category/<name> and kind/<type> are the only reserved keywords at this time, where <name> is one of cloud, database, infrastructure, network, utility, or vcs, and <type> is either native or component. If the package is a bridged Terraform provider, don’t include a kind/ label.

    • homepage string optional
      The package’s homepage.
    • license string optional
      The name of the license used for the package’s contents.
    • attribution string optional
      Freeform text attribution of derived work, if required.
    • repository string optional
      The URL at which the package’s sources can be found.
    • logoUrl string optional
      The URL of the package’s logo, if any.
    • pluginDownloadURL string optional
      The URL to use when downloading the provider plugin binary.
    • configurationDocsUrl string optional
      The URL of the provider’s installation and configuration documentation, if any.
    • validateCredentialsOnNew boolean optional
      Indicates that pulumi new may configure the provider after creating a project in order to validate the user’s credentials.
    • publisher string optional
      The name of the person or organization that authored and published the package.
    • namespace string optional
      The namespace of the package. Used to disambiguate the package name. Defaults to ‘pulumi’ when not specified.
    • meta Metadata optional
      Format metadata about this package.
    • config Config optional
      The package’s configuration variables.
    • types map[ComplexType] optional
      A map from type token to complexTypeSpec that describes the set of complex types (i.e. object, enum) defined by this package.
    • dependencies array[PackageDescriptor] optional
      A list of package descriptors that describes the set of dependencies for this package.
    • provider Resource optional
      The provider type for this package.
    • resources map[Resource] optional
      A map from type token to resourceSpec that describes the set of resources and components defined by this package.
    • functions map[Function] optional
      A map from token to functionSpec that describes the set of functions defined by this package.
    • language map[PackageLanguage] optional
      Additional language-specific data about the package.
    • parameterization ParameterizationSpec optional
      An optional object to define parameterization for the package.
    • allowedPackageNames array[string] optional
      A list of allowed package names in addition to the name property.

    Metadata

    Format metadata about this package.

    • moduleFormat string optional
      A regex that is used by the importer to extract a module name from the module portion of a type token. Packages that use the module format “namespace1/namespace2/…/namespaceN” do not need to specify a format. The regex must define one capturing group that contains the module name, which must be formatted as “namespace1/namespace2/…namespaceN”.
    • supportPack boolean optional
      Write the package to support the pack command.

    Config

    The package’s configuration variables.

    • variables map[Property] optional
      A map from variable name to propertySpec that describes a package’s configuration variables.
    • defaults array[string] optional
      A list of the names of the package’s non-required configuration variables.

    PackageDescriptor

    Identifies another package this package depends on.

    • name string required
      The unqualified name of the package (e.g. “aws”, “azure”, “gcp”, “kubernetes”, “random”)
    • version string optional
      The version of the package. The version must be valid semver if present.
    • pluginDownloadURL string optional
      The optional URL to use when downloading the provider plugin binary.
    • parameterization object optional
      An optional object to define parameterization for the package.

    ObjectType

    Describes an object type.

    • description string optional
      The description of the type, if any.
    • properties map[Property] optional
      A map from property name to propertySpec that describes the object’s properties.
    • type string optional
      The type of the object. Must be ‘object’ if this is an object type, or the underlying type for an enum.
    • required array[string] optional
      A list of the names of an object type’s required properties. These properties must be set for inputs and will always be set for outputs.
    • language map[ObjectTypeLanguage] optional
      Additional language-specific data about the object type.
    • isOverlay boolean optional
      indicates whether the type is an overlay provided by the package. Overlay code is generated by the package rather than using the core Pulumi codegen libraries.
    • overlaySupportedLanguages array[string] optional
      A list of languages that the overlay supports. This only has an effect if the Resource is an Overlay (isOverlay == true). Supported values are ’nodejs’, ‘python’, ‘go’, ‘csharp’, ‘java’, ‘yaml’.
      Values: nodejs, python, go, csharp, java, yaml

    ComplexType

    Describes an object or enum type.

    • description string optional
      The description of the type, if any. Interpreted as Markdown.
    • language map[ObjectTypeLanguage] optional
      Additional language-specific data about the type.
    • isOverlay boolean optional
      Indicates that the implementation of the type should not be generated from the schema, and is instead provided out-of-band by the package author.
    Exactly one of

    Object Type Definition

    Includes every property of ObjectType, plus:

    • type "object" optional

    EnumType — see EnumType

    EnumType

    Describes an enum type.

    • type string required
      The underlying primitive type of the enum.
      Values: boolean, integer, number, string
    • enum array[EnumValue] required
      The list of possible values for the enum.

    Resource

    Describes a resource or component.

    Includes every property of ObjectType, plus:

    • description string optional
      The description of the resource, if any. Interpreted as Markdown.
    • inputProperties map[Property] optional
      A map from property name to propertySpec that describes the resource’s input properties.
    • requiredInputs array[string] optional
      A list of the names of the resource’s required input properties.
    • stateInputs ObjectType optional
      An optional objectTypeSpec that describes additional inputs that may be necessary to get an existing resource. If this is unset, only an ID is necessary.
    • listInputs ObjectType optional
      An optional objectTypeSpec that describes inputs that may be supplied when listing existing resources of this type. If this is unset, the resource does not declare list support in the schema.
    • aliases array[Alias] optional
      The list of aliases for the resource.
    • deprecationMessage string optional
      Indicates whether the resource is deprecated.
    • isComponent boolean optional
      Indicates whether the resource is a component.
    • methods map[string] optional
      A map from method name to function token that describes the resource’s method set.
    • isOverlay boolean optional
      Indicates that the implementation of the resource should not be generated from the schema, and is instead provided out-of-band by the package author.

    Function

    Describes a function.

    • description string optional
      The description of the function, if any. Interpreted as Markdown.
    • inputs ObjectType optional
      The bag of input values for the function, if any.
    • multiArgumentInputs array[string] optional
      A list of parameter names that determines whether the input bag should be treated as a single argument or as multiple arguments. The list corresponds to the order in which the parameters should be passed to the function.
    • outputs Type | ObjectType optional
      Specifies the return type of the function definition.
    • returnType Type | ObjectType optional
      Specifies the return type of the function definition.
    • deprecationMessage string optional
      Indicates whether the function is deprecated.
    • language map[FunctionLanguage] optional
      Additional language-specific data about the function.
    • isOverlay boolean optional
      Indicates that the implementation of the function should not be generated from the schema, and is instead provided out-of-band by the package author.
    • overlaySupportedLanguages array[string] optional
      A list of languages that the overlay supports. This only has an effect if the Resource is an Overlay (isOverlay == true). Supported values are ’nodejs’, ‘python’, ‘go’, ‘csharp’, ‘java’, ‘yaml’.
      Values: nodejs, python, go, csharp, java, yaml
    • plain boolean optional
      A marker field to indicate that this function should only generate plain and output style methods. It defaults to true, that is to emit both plain and output style methods. Setting this to false will emit only output style methods.

    Type

    A reference to a type. The particular kind of type referenced is determined based on the contents of the “type” property and the presence or absence of the “additionalProperties”, “items”, “oneOf”, and “$ref” properties.

    • plain boolean optional
      Indicates that when used as an input, this type does not accept eventual values.
    Exactly one of

    Primitive Type

    A reference to a primitive type. A primitive type must have only the “type” property set.

    • type string required
      The primitive type, if any.
      Values: boolean, integer, number, string

    Array Type

    A reference to an array type. The “type” property must be set to “array” and the “items” property must be present. No other properties may be present.

    • type "array" required
    • items Type required
      The element type of the array.

    Map Type

    A reference to a map type. The “type” property must be set to “object” and the “additionalProperties” property may be present. No other properties may be present.

    • type "object" required
    • additionalProperties Type optional
      The element type of the map. Defaults to “string” when omitted.

    Named Type

    A reference to a type in this or another document. The “$ref” property must be present. The “type” property is ignored if it is present. No other properties may be present.

    • type string optional
      ignored; present for compatibility with existing schemas.
    • $ref string required
      The URI of the referenced type. For example, the built-in Archive, Asset, and Any types are referenced as “pulumi.json#/Archive”, “pulumi.json#/Asset”, and “pulumi.json#/Any”, respectively. A type from this document is referenced as “#/types/pulumi:type:token”. A type from another document is referenced as “path#/types/pulumi:type:token”, where path is of the form: “/provider/vX.Y.Z/schema.json” or “pulumi.json” or “http[s]://example.com/provider/vX.Y.Z/schema.json” A resource from this document is referenced as “#/resources/pulumi:type:token”. A resource from another document is referenced as “path#/resources/pulumi:type:token”, where path is of the form: “/provider/vX.Y.Z/schema.json” or “pulumi.json” or “http[s]://example.com/provider/vX.Y.Z/schema.json”.

    Union Type

    A reference to a union type. The “oneOf” property must be present. The union may additional specify an underlying primitive type via the “type” property and a discriminator via the “discriminator” property. No other properties may be present.

    • type string optional
      The underlying primitive type of the union, if any.
      Values: boolean, integer, number, string
    • oneOf array[Type] required
      If present, indicates that values of the type may be one of any of the listed types.
    • discriminator Discriminator optional
      Informs the consumer of an alternative schema based on the value associated with it.

    Property

    Describes an object or resource property.

    Includes every property of Type, plus:

    • description string optional
      The description of the property, if any. Interpreted as Markdown.
    • const boolean | number | string optional
      The constant value for the property, if any. The type of the value must be assignable to the type of the property.
    • default boolean | number | string optional
      The default value for the property, if any. The type of the value must be assignable to the type of the property.
    • defaultInfo Default optional
      Additional information about the property’s default value, if any.
    • deprecationMessage string optional
      Indicates whether the property is deprecated.
    • language map[PropertyLanguage] optional
      Additional language-specific data about the property.
    • secret boolean optional
      Specifies whether the property is secret (default false).
    • replaceOnChanges boolean optional
      Specifies whether a change to the property causes its containing resource to be replaced instead of updated (default false).
    • willReplaceOnChanges boolean optional
      Indicates that the provider will replace the resource when this property is changed.

    EnumValue

    One of the values an enum type may take, and the metadata attached to it.

    • name string optional
      If present, overrides the name of the enum value that would usually be derived from the value.
    • description string optional
      The description of the enum value, if any. Interpreted as Markdown.
    • value boolean | integer | number | string required
      The enum value itself.
    • deprecationMessage string optional
      Indicates whether the value is deprecated.

    Alias

    A previous identity of a resource. Aliases let a resource be renamed or moved without the engine treating it as a delete and a create. May be written as a string or as an object.

    • type string optional
      The type portion of the alias, if any.

    Default

    Additional information about the property’s default value, if any.

    • environment array[string] required
      A set of environment variables to probe for a default value.
    • language map[DefaultLanguage] optional
      Additional language-specific data about the default value.

    Discriminator

    Informs the consumer of an alternative schema based on the value associated with it.

    • propertyName string required
      The name of the property in the payload that will hold the discriminator value.
    • mapping map[string] optional
      An optional object to hold mappings between payload values and schema names or references.

    ParameterizationSpec

    Parameterized packages populate this with concrete parameter values. Pulumi code generators read it to emit SDKs that preserve those values and pass them back to the provider at runtime.

    • baseProvider BaseProviderSpec optional
      The provider being specialized, named by package name and version.
    • parameter string optional
      The parameter for the provider.

    BaseProviderSpec

    The provider that a parameterized package specializes.

    • name string required
      The unqualified name of the package (e.g. “aws”, “azure”, “gcp”, “kubernetes”, “random”)
    • version string required
      The version of the package. The version must be valid semver.

    Language-specific extensions

    A language field maps a supported language to a language-specific object. The shape of that object is decided by that language’s SDK code generator rather than by the schema itself, which is how a generator gets to encode what it alone needs — an NPM package name, a Java base package, a Go import path.

    Each generator owns its extension, so each section below is generated from that language’s own repository and carries the release it came from. A language that has no entry for a section does not read one.

    PackageLanguage

    Language-specific information for a package.

    Set under the nodejs key of a language map. Generated from pulumi/pulumi v3.262.0.

    • packageName string optional
      Custom name for the NPM package.
    • packageDescription string optional
      Description for the NPM package.
    • readme string optional
      Contains the text for the package’s README.md files.
    • dependencies map[string] optional
      NPM dependencies to add to package.json.
    • devDependencies map[string] optional
      NPM dev-dependencies to add to package.json.
    • peerDependencies map[string] optional
      NPM peer-dependencies to add to package.json.
    • resolutions map[string] optional
      NPM resolutions to add to package.json.
    • typescriptVersion string optional
      A specific version of TypeScript to include in package.json.
    • moduleToPackage map[string] optional
      A map containing overrides for module names to package names.
    • compatibility string optional
      Toggle compatibility mode for a specified target.
    • disableUnionOutputTypes boolean optional
      Disable support for unions in output types.
    • containsEnums boolean optional
      An indicator for whether the package contains enums.
    • providerNameToModuleName map[string] optional
      A map allowing you to map the name of a provider to the name of the module encapsulating the provider.
    • extraTypeScriptFiles array[string] optional
      Additional files to include in TypeScript compilation. These paths are added to the files section of the generated tsconfig.json. A typical use case for this is compiling hand-authored unit test files that check the generated code.
    • liftSingleValueMethodReturns boolean optional
      Determines whether to make single-return-value methods return an output object or the single value.
    • respectSchemaVersion boolean optional
      Respect the Pkg.Version field in the schema.
    • useTypeOnlyReferences boolean optional
      Experimental flag that permits import type * style code to be generated to optimize startup time of programs consuming the provider by minimizing the set of Node modules loaded at startup. Turning this on may currently generate non-compiling code for some providers; but if the code compiles it is safe to use. Also, turning this on requires TypeScript 3.8 or higher to compile the generated code.

    Set under the python key of a language map. Generated from pulumi/pulumi v3.262.0.

    • packageName string optional
      An override for the name of the generated python package.
    • pythonRequires string optional
      Determines the Python versions that the generated provider supports.
    • requires map[string] optional
      Python package requirements to add to the generated package’s metadata, as a map from distribution name to version specifier.
    • readme string optional
      Contains the text for the package’s README.md files.
    • moduleNameOverrides map[string] optional
      Optional overrides for Pulumi module names.
    • compatibility string optional
      Toggle compatibility mode for a specified target.
    • usesIOClasses boolean optional deprecated
      This bool is no longer needed since all providers now use input/output classes.
    • liftSingleValueMethodReturns boolean optional
      Determines whether to make single-return-value methods return an output object or the single value.
    • respectSchemaVersion boolean optional
      Respect the Pkg.Version field for emitted code.
    • pyproject object optional
      If enabled, a pyproject.toml file will be generated.
    • inputTypes string optional

      Specifies what types are used for inputs. Allowed values are the following:

      • “classes”: Args classes only
      • “classes-and-dicts” (default): TypedDicts side-by-side with Args classes.

    Set under the go key of a language map. Generated from pulumi/pulumi v3.262.0.

    • importBasePath string optional
      Base path for package imports.
    • modulePath string optional
      Module path for go.mod.
    • rootPackageName string optional
      Explicit package name, which may be different to the import path.
    • moduleToPackage map[string] optional
      Map from module -> package name.
    • packageImportAliases map[string] optional
      Map from package name -> package alias.
    • importPathPattern string optional
      Defines the pattern for how import paths should be constructed from the base import path and used module By default, the pattern is “{baseImportPath}/{module}” but can be overridden to support other patterns. for example you can use “{baseImportPath}/{module}/v2” which will replace {module} with the module name and {baseImportPath} with the base import path to compute the full path.
    • generateResourceContainerTypes boolean optional
      Generate container types (arrays, maps, pointer output types etc.) for each resource. These are typically used to support external references.
    • pulumiSDKVersion integer optional
      The version of the Pulumi SDK used with this provider, e.g. 3. Used to generate doc links for pulumi builtin types. If omitted, the latest SDK version is used.
    • liftSingleValueMethodReturns boolean optional
      Determines whether to make single-return-value methods return an output struct or the value.
    • internalModuleName string optional
      When set, the code generator will use this name for the generated internal module instead of “internal” so that functionality within the module can be used by end users.
    • generateExtraInputTypes boolean optional
      Determines whether or not the code generator generates input (and output) types for all plain types, instead of for only types that are used as input/output types.
    • omitExtraInputTypes boolean optional
      Determines whether the code generator generates input (and output) types for all plain types, instead of for only types that are used as input/output types.
    • respectSchemaVersion boolean optional
      Respect the Pkg.Version field for emitted code.
    • internalDependencies array[string] optional
      Blank imports that are emitted in the SDK so that go mod tidy does not remove the associated module dependencies from the SDK’s go.mod.
    • generics string optional

      Specifies how to handle generating a variant of the SDK that uses generics. Allowed values are the following:

      • “none” (default): do not generate a generics variant of the SDK
      • “side-by-side”: generate a side-by-side generics variant of the SDK under the x subdirectory
      • “only-generics”: generate a generics variant of the SDK only

    Set under the csharp key of a language map. Generated from pulumi/pulumi-dotnet v3.113.1.

    • packageReferences map[string] optional
      NuGet package references to add to the generated .csproj, as a map from package name to version.
    • namespaces map[string] optional
      Overrides for module names to C# namespaces, as a map from module name to namespace.
    • compatibility string optional
      Toggles compatibility mode for a specified target.
    • dictionaryConstructors boolean optional
      Generates constructors that take a dictionary of properties in addition to the typed args class.
    • projectReferences array[string] optional
      Paths to local .csproj files to reference from the generated project, instead of resolving those dependencies from NuGet.
    • liftSingleValueMethodReturns boolean optional
      Determines whether to make single-return-value methods return an output object or the single value.
    • rootNamespace string optional
      The root namespace used for the package. This defaults to Pulumi.
    • respectSchemaVersion boolean optional
      Allow the Pkg.Version field to filter down to emitted code.

    Set under the java key of a language map. Generated from pulumi/pulumi-java v1.36.3.

    • packages map[string] optional
      Overrides how Schema packages names translate to Java package names.
    • basePackage string required
      The prefix of the Java package to generate.
    • buildFiles string required
      If set to “gradle” enables a generation of a basic set of Gradle build files.
    • repositories array[string] optional
      If non-empty, specifies a list of Maven repositories that should be referenced by the generated package. This can be useful for specifying the locations of e.g. local or private dependencies.
    • dependencies map[string] optional
      Specifies Maven-style dependencies for the generated code.
    • gradleNexusPublishPluginVersion string required
      If non-empty and BuildFiles=“gradle”, enables the use of a given version of io.github.gradle-nexus.publish-plugin in the generated Gradle build files.
    • gradleTest string required
      If non-empty and BuildFiles=“gradle”, generates a test section to enable gradle test command to run unit tests over the generated code. Supported values: “JUnitPlatform”.

    PropertyLanguage

    Language-specific information for a property.

    Not supported by the TypeScript code generator.

    Set under the python key of a language map. Generated from pulumi/pulumi v3.262.0.

    • mapCase boolean optional
      Whether the property name is mapped between the schema’s camelCase and Python’s snake_case. Defaults to true.

    Not supported by the Go code generator.

    Set under the csharp key of a language map. Generated from pulumi/pulumi-dotnet v3.113.1.

    • name string optional
      An override for the generated C# property name.

    Set under the java key of a language map. Generated from pulumi/pulumi-java v1.36.3.

    • name string optional
      An override for the generated Java property name.

    ResourceLanguage

    Language-specific information for a resource.

    Not supported by the TypeScript code generator.

    Not supported by the Python code generator.

    Not supported by the Go code generator.

    Set under the csharp key of a language map. Generated from pulumi/pulumi-dotnet v3.113.1.

    • name string optional
      An override for the generated C# class name for the resource.

    Not supported by the Java code generator.

    ObjectTypeLanguage

    Language-specific information for an object type.

    Set under the nodejs key of a language map. Generated from pulumi/pulumi v3.262.0.

    • requiredInputs array[string] required
      List of properties that are required on the input side of a type.
    • requiredOutputs array[string] required
      List of properties that are required on the output side of a type.

    Not supported by the Python code generator.

    Not supported by the Go code generator.

    Not supported by the C# code generator.

    Not supported by the Java code generator.

    FunctionLanguage

    Language-specific information for a function.

    Not yet supported in any target language.

    DefaultLanguage

    Language-specific information for a property’s default value.

    Not yet supported in any target language.

      The infrastructure as code platform for any cloud.