--- title_tag: "Schema for Pulumi Packages" meta_desc: This page describes the schema for a Pulumi Package, describing the resources, functions and types that define a Pulumi Package. title: Schema h1: Pulumi package schema meta_image: /images/docs/meta-images/docs-meta.png menu: usingpulumi: parent: pulumi-packages weight: 3 aliases: - /docs/guides/pulumi-packages/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](/docs/concepts/resources#components), 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`](/docs/reference/pkg/aws/apigateway/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. ```json { "name": "apigateway", "types": { "apigateway:index:EventHandlerRoute": { "type": "object", "properties": { "path": { "type": "string" }, "method": { "type": "string" }, "function": { "$ref": "/aws/v3.30.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/v3.30.0/schema.json#/resources/aws:apigateway%2FrestApi:RestApi" } }, "required": [ "url", "api" ] } }, "language": { "csharp": { "packageReferences": { "Pulumi": "3.*", "Pulumi.Aws": "4.*" } }, "go": { "generateResourceContainerTypes": true, "importBasePath": "github.com/acmecorp/pulumi-apigateway/sdk/go/apigateway" }, "nodejs": { "dependencies": { "@pulumi/aws": "^4.5.1" }, "devDependencies": { "typescript": "^3.7.0" } }, "python": { "requires": { "pulumi": ">=3.0.0,<4.0.0", "pulumi-aws": ">=4.0.0,<5.0.0" } } } } ``` Complete schema examples that include a much wider range of schema configuration styles are available in these existing packages: * [AWS](https://github.com/pulumi/pulumi-aws/blob/master/provider/cmd/pulumi-resource-aws/schema.json) - Bridged Provider Package * [Azure Native](https://github.com/pulumi/pulumi-azure-native/blob/master/provider/cmd/pulumi-resource-azure-native/schema.json) - Native Pulumi Provider Package * [EKS](https://github.com/pulumi/pulumi-eks/blob/master/provider/cmd/pulumi-resource-eks/schema.json) - Component Package ## Pulumi Package Schema ### Package | Property | Type | Required | Description | |---------------------|--------------------------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------| | `name` | `string` | Yes | Name is the unqualified name of the package (e.g. "aws", "azure", "gcp", "kubernetes", "random") | | `displayName` | `string` | No | The human-friendly name of the package. | | `version` | `string` | Yes | Version is the version of the package. The version must be valid semver. | | `description` | `string` | No | Description is the description of the package. | | `keywords` | `array[string]` | No | Keywords is 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](/registry/). `category/` and `kind/` are the only reserved keywords at this time, where `` can be one of: `cloud`, `database`, `infrastructure`, `network`, `utility`, `vcs` and `` is either `native` or `component`. If the package is a bridged Terraform provider, then don't include a `kind/` label. | | `homepage` | `string` | No | Homepage is the package's homepage. | | `license` | `string` | No | License indicates which license is used for the package's contents. | | `attribution` | `string` | No | Attribution allows freeform text attribution of derived work, if needed. | | `repository` | `string` | No | Repository is the URL at which the source for the package can be found. | | `logoUrl` | `string` | No | LogoURL is the URL for the package's logo, if any. | | `pluginDownloadURL` | `string` | No | PluginDownloadURL is the URL to use to acquire the provider plugin binary, if any. See [Authoring & Publishing](/docs/using-pulumi/pulumi-packages/how-to-author#publish-your-package) for more details. | | `publisher` | `string` | No | The name of the person or organization that authored and published the package. | | `meta` | [`Metadata`](#metadata) | No | Meta contains information for the importer about this package. | | `config` | [`Config`](#config) | No | Config describes the set of configuration variables defined by this package. | | `types` | [`map[ComplexType]`](#complextype) | No | Types is a map from type token to ComplexType that describes the set of complex types (ie. object, enum) defined by this package. | | `provider` | [`Resource`](#resource) | No | Provider describes the provider type for this package. | | `resources` | [`map[Resource]`](#resource) | No | Resources is a map from type token to Resourc that describes the set of resources defined by this package. | | `functions` | [`map[Function]`](#function) | No | Functions is a map from token to Function that describes the set of functions defined by this package. | | `language` | [`map[PackageLanguage]`](#packagelanguage) | No | Language specifies additional language-specific data about the package. | ### Metadata Metadata for the importer about this package. | Property | Type | Required | Description | |----------------|----------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `moduleFormat` | `string` | No | ModuleFormat is 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". | ### Config A package's configuration variables. | Property | Type | Required | Description | |-------------|------------------------------|----------|-------------------------------------------------------------------------------------------------------| | `variables` | [`map[Property]`](#property) | No | Variables is a map from variable name to Property that describes a package's configuration variables. | | `required` | `array[string]` | No | Required is a list of the names of the package's required configuration variables. | ### ObjectType An object type. | Property | Type | Required | Description | |---------------|-------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `description` | `string` | No | Description is the description of the type, if any. | | `properties` | [`map[Property]`](#property) | No | Properties, if present, is a map from property name to Property that describes the type's properties. | | `type` | `string` | No | Type must be "object" if this is an object type, or the underlying type for an enum. | | `required` | `array[string]` | No | Required, if present, is 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]`](#objecttypelanguage) | No | Language specifies additional language-specific data about the type. | ### ComplexType An object or enum type. | Property | Type | Required | Description | |---------------------------------------------------------|----------------------------------|----------|--------------------------------------------------------------------| | All [`ObjectType`](#objecttype) properties, as well as: | | | | | `enum` | [`array[EnumValue]`](#enumvalue) | No | Enum, if present, is the list of possible values for an enum type. | ### Resource A resource description. | Property | Type | Required | Description | |---------------------------------------------------------|----------------------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| | All [`ObjectType`](#objecttype) properties, as well as: | | | | | `inputProperties` | [`map[Property]`](#property) | No | Description is the description of the property, if any. | | `requiredInputs` | `array[string]` | No | RequiredInputs is a list of the names of the resource's required input properties. | | `stateInputs` | [`ObjectType`](#objecttype) | No | StateInputs is an optional ObjectType that describes additional inputs that may be necessary to get an existing resource. If this is unset, only an ID is necessary. | | `aliases` | [`array[Alias]`](#alias) | No | Aliases is the list of aliases for the resource. | | `deprecationMessage` | `string` | No | DeprecationMessage indicates whether or not the resource is deprecated. | | `language` | [`map[ResourceLanguage]`](#resourcelanguage) | No | Language specifies additional language-specific data about the resource. | | `isComponent` | `boolean` | No | IsComponent indicates whether the resource is a ComponentResource. | | `methods` | `map[string]string` | No | Methods maps method names to functions in this schema. | ### Function A function description. | Property | Type | Required | Description | |----------------------|----------------------------------------------|----------|--------------------------------------------------------------------------| | `description` | `string` | No | Description is the description of the function, if any. | | `inputs` | [`ObjectType`](#objecttype) | No | Inputs is the bag of input values for the function, if any. | | `outputs` | [`ObjectType`](#objecttype) | No | Outputs is the bag of output values for the function, if any. | | `deprecationMessage` | `string` | No | DeprecationMessage indicates whether or not the function is deprecated. | | `language` | [`map[FunctionLanguage]`](#functionlanguage) | No | Language specifies additional language-specific data about the function. | ### Type A reference to a type. | Property | Type | Required | Description | |------------------------|-----------------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `type` | `string` | Yes | Type is the primitive or composite type, if any. May be "boolean", "integer", "number", "string", "array", or "object". | | `$ref` | `string` | Yes | Ref is a reference to a type in this or another document. 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"`. | | `additionalProperties` | [`Type`](#type) | No | AdditionalProperties, if set, describes the element type of an "object" (i.e. a string -> value map). | | `items` | [`Type`](#type) | No | Items, if set, describes the element type of an array. | | `oneOf` | [`array[Type]`](#type) | No | OneOf indicates that values of the type may be one of any of the listed types. | | `discriminator` | [`Discriminator`](#discriminator) | No | Discriminator informs the consumer of an alternative schema based on the value associated with it. | | `plain` | `boolean` | No | Plain indicates that when used as an input, this type does not accept eventual values. | ### Property An object or resource property. | Property | Type | Required | Description | |---------------------------------------------|----------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------| | All [`Type`](#type) properties, as well as: | | | | | `description` | `string` | No | Description is the description of the property, if any. | | `const` | `any` | No | Const is the constant value for the property, if any. The type of the value must be assignable to the type of the property. | | `default` | `any` | No | Default is the default value for the property, if any. The type of the value must be assignable to the type of the property. | | `defaultInfo` | `Default` | No | DefaultInfo contains additional information about the property's default value, if any. | | `deprecationMessage` | `string` | No | DeprecationMessage indicates whether or not the property is deprecated. | | `language` | [`map[PropertyLanguage]`](#propertylanguage) | No | Language specifies additional language-specific data about the property. | | `secret` | `boolean` | No | Secret specifies if the property is secret (default false). | | `replaceOnChanges` | `boolean` | No | ReplaceOnChanges specifies if the associated object should be updated with a replace operation instead of a update operation. | | `willReplaceOnChanges` | `boolean` | No | WillReplaceOnChanges indiciates that the provider will replace the resource when this property is changed. | ### EnumValue The values metadata associated with an enum type. | Property | Type | Required | Description | |----------------------|----------|----------|------------------------------------------------------------------------------------------------------| | `name` | `string` | No | Name, if present, overrides the name of the enum value that would usually be derived from the value. | | `description` | `string` | No | Description of the enum value. | | `value` | `any` | No | Value is the enum value itself. | | `deprecationMessage` | `string` | No | DeprecationMessage indicates whether or not the value is deprecated. | ### Alias An alias description. | Property | Type | Required | Description | |-----------|----------|----------|------------------------------------------------------| | `name` | `string` | No | Name is the name portion of the alias, if any. | | `project` | `string` | No | Project is the project portion of the alias, if any. | | `type` | `string` | No | Type is the type portion of the alias, if any. | ### Default Extra information about the default value for a property. | Property | Type | Required | Description | |---------------|--------------------------------------------|----------|------------------------------------------------------------------------------------| | `environment` | `array[string]` | Yes | Environment specifies a set of environment variables to probe for a default value. | | `language` | [`map[DefaultLanguage]`](#defaultlanguage) | No | Language specifies additional language-specific data about the default value. | ### Discriminator Informs the consumer of an alternative schema based on the value associated with it. | Property | Type | Required | Description | |----------------|---------------|----------|-------------------------------------------------------------------------------------------------------| | `propertyName` | `string` | Yes | PropertyName is the name of the property in the payload that will hold the discriminator value. | | `mapping` | `map[string]` | No | Mapping is an optional object to hold mappings between payload values and schema names or references. | ## Language-Specific Extensions Several schema types contain a `language` field which is a map from a supported language to a language-specific schema type. The schema for this type is language dependent, and offers extensibility for language-specific SDK code generators to encode language-specific information about the schema entry. ### PackageLanguage Language-specific information for a package. {{% chooser language "javascript,typescript,python,go,csharp,java" / %}} {{% choosable language "javascript,typescript" %}} For `javascript, typescript`: | Property | Type | Required | Description | |---------------------------|---------------|----------|--------------------------------------------------------------------------------------| | `packageName` | `string` | No | Custom name for the NPM package. | | `packageDescription` | `string` | No | Description for the NPM package. | | `readme` | `string` | No | Readme contains the text for the package's README.md files. | | `dependencies` | `map[string]` | No | NPM dependencies to add to package.json. | | `devDependencies` | `map[string]` | No | NPM dev-dependencies to add to package.json. | | `peerDependencies` | `map[string]` | No | NPM peer-dependencies to add to package.json. | | `resolutions` | `map[string]` | No | NPM resolutions to add to package.json | | `typescriptVersion` | `string` | No | A specific version of TypeScript to include in package.json. | | `moduleToPackage` | `map[string]` | No | A map containing overrides for module names to package names. | | `compatibility` | `string` | No | Toggle compatibility mode for a specified target. | | `disableUnionOutputTypes` | `boolean` | No | Disable support for unions in output types. | | `containsEnums` | `boolean` | No | An indicator for whether the package contains enums. | | `respectSchemaVersion` | `boolean` | No | Use the [`package.version`](#package) field in the generated SDK | | `pluginName` | `string` | No | The name of the plugin, which might be different from the package name. | | `pluginVersion` | `string` | No | The version of the plugin, which might be different from the version of the package. | {{% /choosable %}} {{% choosable language python %}} For `python`: | Property | Type | Required | Description | |------------------------|---------------|----------|--------------------------------------------------------------------------| | `packageName` | `string` | No | PackageName is an override for the name of the generated python package. | | `requires` | `map[string]` | No | Description for the PyPi package. | | `readme` | `string` | No | Readme contains the text for the package's README.md files. | | `moduleNameOverrides` | `map[string]` | No | Optional overrides for Pulumi module names. | | `compatibility` | `string` | No | Toggle compatibility mode for a specified target. | | `respectSchemaVersion` | `boolean` | No | Use the [`package.version`](#package) field in the generated SDK. | {{% /choosable %}} {{% choosable language go %}} For `go`: | Property | Type | Description | |----------------------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------| | `importBasePath` | `string` | Base path for package imports. | | `rootPackageName` | `string` | Explicit package name, which may be different to the import path. | | `moduleToPackage` | `map[string]` | Map from module -> package name. | | `packageImportAliases` | `map[string]` | Map from package name -> package alias. | | `generateResourceContainerTypes` | `boolean` | Generate container types (arrays, maps, pointer output types etc.) for each resource. These are typically used to support external references. | | `respectSchemaVersion` | `boolean` | Use the [`package.version`](#package) field in the generated SDK. | {{% /choosable %}} {{% choosable language csharp %}} For `csharp`: | Property | Type | Required | Description | |--------------------------|---------------|----------|-----------------------------------------------------------------------------------------------------| | `packageReferences` | `map[string]` | No | | | `namespaces` | `map[string]` | No | | | `compatibility` | `string` | No | | | `dictionaryConstructors` | `boolean` | No | | | `rootNamespace` | `string` | No | The root namespace that the generated package should live under. This setting defaults to "Pulumi". | | `respectSchemaVersion` | `boolean` | No | Use the [`package.version`](#package) field in the generated SDK. | {{% /choosable %}} {{% choosable language java %}} For `java`: | Property | Type | Required | Description | |----------------|---------------|----------|--------------------------------------------------------------------------------------------------| | `packages` | `map[string]` | No | Overrides for module names to Java package names. Example: "autoscaling/v1" -> "autoscaling.v1". | | `basePackage` | `string` | No | Prefixes the generated Java package. This setting defaults to "com.pulumi". | | `buildFiles` | `string` | No | Generates build files for the chosen build tool. Supported values: "gradle". | | `dependencies` | `map[string]` | No | Java dependencies to use with the `buildFiles`. Example: "com.pulumi.gcp" -> "6.23.0". | {{% /choosable %}} ### PropertyLanguage Language-specific info for a property. For `csharp`: | Property | Type | Required | Description | |----------|----------|----------|-------------| | `name` | `string` | No | | ### DefaultLanguage Not yet supported in any target languages. ### ResourceLanguage Not yet supported in any target languages. ### FunctionLanguage Not yet supported in any target languages. ### ObjectTypeLanguage Not yet supported in any target languages.