{
    "$schema":"https://json-schema.org/draft/2020-12/schema",
    "$id":"https://github.com/pulumi/pulumi/blob/master/sdk/go/common/workspace/project.json",
    "title":"Pulumi Project",
    "description":"A schema for Pulumi project files.",
    "type":"object",
    "properties":{
        "name":{
            "description":"Name of the project containing alphanumeric characters, hyphens, underscores, and periods.",
            "type":"string",
            "minLength":1
        },
        "description":{
            "description":"Description of the project.",
            "type":[
                "string",
                "null"
            ]
        },
        "author":{
            "description":"Author is an optional author that created this project.",
            "type":[
                "string",
                "null"
            ]
        },
        "website":{
            "description":"Website is an optional website for additional info about this project.",
            "type":[
                "string",
                "null"
            ]
        },
        "license":{
            "description":"License is the optional license governing this project's usage.",
            "type":[
                "string",
                "null"
            ]
        },
        "runtime":{
            "title":"ProjectRuntimeInfo",
            "oneOf":[
                {
                    "title":"Name",
                    "type":"string",
                    "minLength":1
                },
                {
                    "type":"object",
                    "properties":{
                        "name":{
                            "title":"Name",
                            "type":"string",
                            "minLength":1
                        },
                        "options":{
                            "title":"Options",
                            "type":"object",
                            "additionalProperties":true
                        }
                    },
                    "additionalProperties":false
                }
            ]
        },
        "main":{
            "description":"Path to the Pulumi program. The default is the working directory.",
            "type":[
                "string",
                "null"
            ]
        },
        "config":{
            "description":"A map of configuration keys to their types. Using config directory location relative to the location of Pulumi.yaml is a deprecated use of this key. Use stackConfigDir instead.",
            "type":[
                "object",
                "string",
                "null"
            ],
            "properties":{
                "secret":{
                    "description":"If true this configuration value should be encrypted.",
                    "type":"boolean",
                    "default":false
                }
            },
            "additionalProperties":{
                "oneOf":[
                    {
                        "type":"string"
                    },
                    {
                        "type":"integer"
                    },
                    {
                        "type":"boolean"
                    },
                    {
                        "type": "array"
                    },
                    {
                        "$ref":"#/$defs/configTypeDeclaration"
                    }
                ]
            }
        },
        "stackConfigDir":{
            "description":"Config directory location relative to the location of Pulumi.yaml.",
            "type":[
                "string",
                "null"
            ]
        },
        "backend":{
            "description":"Backend of the project.",
            "type":[
                "object",
                "null"
            ],
            "properties":{
                "url":{
                    "description":"URL is optional field to explicitly set backend url",
                    "type":"string"
                }
            },
            "additionalProperties":false
        },
        "options":{
            "description":"Additional project options.",
            "type":[
                "object",
                "null"
            ],
            "properties":{
                "refresh":{
                    "description":"Set to \"always\" to refresh the state before performing a Pulumi operation.",
                    "type":"string",
                    "const":"always"
                }
            },
            "additionalProperties":false
        },
        "template":{
            "title":"ProjectTemplate",
            "description":"ProjectTemplate is a Pulumi project template manifest.",
            "type":[
                "object",
                "null"
            ],
            "properties":{
                "displayName":{
                    "description":"Optional user-friendly name of the template.",
                    "type":[
                        "string",
                        "null"
                    ]
                },
                "description":{
                    "description":"Description of the template.",
                    "type":[
                        "string",
                        "null"
                    ]
                },
                "quickstart":{
                    "description":"Quickstart contains optional text to be displayed after template creation.",
                    "type":[
                        "string",
                        "null"
                    ]
                },
                "important":{
                    "description":"Important indicates the template is important and should be listed by default.",
                    "type":[
                        "boolean",
                        "null"
                    ]
                },
                "metadata":{
                    "description":"Metadata is a map of key/value pairs to associate with the template",
                    "type":[
                        "object",
                        "null"
                    ],
                    "additionalProperties":{
                        "type": "string"
                    }
                },
                "config":{
                    "description":"Config to apply to each stack in the project.",
                    "type":[
                        "object",
                        "null"
                    ],
                    "additionalProperties":{
                        "properties":{
                            "description":{
                                "description":"Description of the config.",
                                "type":[
                                    "string",
                                    "null"
                                ]
                            },
                            "default":{
                                "description":"Default value of the config."
                            },
                            "secret":{
                                "description":"Boolean indicating if the configuration is labeled as a secret.",
                                "type":[
                                    "boolean",
                                    "null"
                                ]
                            }
                        }
                    }
                }
            },
            "additionalProperties":false
        },
        "plugins":{
            "description":"Override for the plugin selection. Intended for use in developing pulumi plugins.",
            "type":"object",
            "properties":{
                "providers":{
                    "description":"Plugins for resource providers.",
                    "type":"array",
                    "items":{
                        "$ref":"#/$defs/pluginOptions"
                    }
                },
                "analyzers":{
                    "description":"Plugins for policy analyzers.",
                    "type":"array",
                    "items":{
                        "$ref":"#/$defs/pluginOptions"
                    }
                },
                "languages":{
                    "description":"Plugins for languages.",
                    "type":"array",
                    "items":{
                        "$ref":"#/$defs/pluginOptions"
                    }
                }
            }
        }
    },
    "required":[
        "name",
        "runtime"
    ],
    "additionalProperties":true,
    "$defs":{
        "pluginOptions":{
            "title":"PluginOptions",
            "type":"object",
            "additionalProperties":false,
            "required":[
                "name",
                "path"
            ],
            "properties":{
                "name":{
                    "type":"string",
                    "description":"Name of the plugin"
                },
                "path":{
                    "type":"string",
                    "description":"Path to the plugin folder"
                },
                "version":{
                    "type":"string",
                    "description":"Version of the plugin, if not set, will match any version the engine requests."
                }
            }
        },
        "simpleConfigType":{
            "title":"SimpleConfigType",
            "enum":[
                "string",
                "integer",
                "boolean",
                "array"
            ]
        },
        "configItemsType":{
            "type":"object",
            "required":[
                "type"
            ],
            "properties":{
                "type":{
                    "oneOf":[
                        {
                            "$ref":"#/$defs/simpleConfigType"
                        },
                        {
                            "$ref":"#/$defs/configItemsType"
                        }
                    ]
                },
                "items":{
                    "$ref":"#/$defs/configItemsType"
                }
            },
            "if":{
                "properties":{
                    "type":{
                        "const":"array"
                    }
                }
            },
            "then":{
                "required":[
                    "items"
                ]
            }
        },
        "configTypeDeclaration":{
            "title":"ConfigTypeDeclaration",
            "type":"object",
            "additionalProperties":false,
            "properties":{
                "type":{
                    "$ref":"#/$defs/simpleConfigType"
                },
                "items":{
                    "$ref":"#/$defs/configItemsType"
                },
                "description":{
                    "type":"string"
                },
                "secret":{
                    "type":"boolean"
                },
                "default":{ },
                "value": { }
            }
        }
    }
}