{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "additionalProperties": false,
  "definitions": {
    "BuildConfiguration": {
      "description": "Available build configurations. Mirrored from UnrealTargetConfiguration.",
      "markdownDescription": "Available build configurations. Mirrored from `UnrealTargetConfiguration`.",
      "type": "string",
      "enum": [
        "Unknown",
        "Debug",
        "DebugGame",
        "Development",
        "Shipping",
        "Test"
      ]
    },
    "BuildTargetType": {
      "description": "Enumerates build target types.",
      "type": "string",
      "enum": ["Unknown", "Game", "Server", "Client", "Editor", "Program"]
    },
    "ModuleDescriptor": {
      "description": "Description of a loadable module.",
      "type": "object",
      "properties": {
        "AdditionalDependencies": {
          "description": "List of additional dependencies for building this module.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "HasExplicitPlatforms": {
          "description": "When true, an empty PlatformAllowList is interpreted as 'no platforms' with the expectation that explicit platforms will be added in plugin extensions.",
          "markdownDescription": "When true, an empty `PlatformAllowList` is interpreted as **no platforms** with the expectation that explicit platforms will be added in plugin extensions.",
          "type": "boolean",
          "default": false
        },
        "LoadingPhase": {
          "description": "When should the module be loaded during the startup sequence? This is sort of an advanced setting.",
          "type": "string",
          "enum": [
            "EarliestPossible",
            "PostConfigInit",
            "PostSplashScreen",
            "PreEarlyLoadingScreen",
            "PreLoadingScreen",
            "PreDefault",
            "Default",
            "PostDefault",
            "PostEngineInit",
            "None",
            "Max"
          ]
        },
        "Name": {
          "description": "Name of this module.",
          "type": "string"
        },
        "PlatformAllowList": {
          "description": "List of allowed platforms.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "PlatformDenyList": {
          "description": "List of disallowed platforms.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "ProgramAllowList": {
          "description": "List of allowed programs.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "ProgramDenyList": {
          "description": "List of disallowed programs.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "TargetAllowList": {
          "description": "List of allowed targets.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildTargetType"
          }
        },
        "TargetConfigurationAllowList": {
          "description": "List of allowed target configurations.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildConfiguration"
          }
        },
        "TargetConfigurationDenyList": {
          "description": "List of disallowed target configurations.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildConfiguration"
          }
        },
        "TargetDenyList": {
          "description": "List of disallowed targets.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildTargetType"
          }
        },
        "Type": {
          "description": "Usage type of module.",
          "type": "string",
          "enum": [
            "Runtime",
            "RuntimeNoCommandlet",
            "RuntimeAndProgram",
            "CookedOnly",
            "UncookedOnly",
            "Developer",
            "DeveloperTool",
            "Editor",
            "EditorNoCommandlet",
            "EditorAndProgram",
            "Program",
            "ServerOnly",
            "ClientOnly",
            "ClientOnlyNoCommandlet",
            "Max"
          ]
        }
      }
    },
    "PluginReferenceDescriptor": {
      "description": "Descriptor for a plugin reference.",
      "type": "object",
      "properties": {
        "Enabled": {
          "description": "Whether it should be enabled by default.",
          "type": "boolean",
          "default": true
        },
        "HasExplicitPlatforms": {
          "description": "When true, empty SupportedTargetPlatforms and PlatformAllowList are interpreted as 'no platforms' with the expectation that explicit platforms will be added in plugin platform extensions.",
          "markdownDescription": "When true, empty `SupportedTargetPlatforms` and `PlatformAllowList` are interpreted as **no platforms** with the expectation that explicit platforms will be added in plugin platform extensions.",
          "type": "boolean",
          "default": false
        },
        "Optional": {
          "description": "Whether this plugin is optional, and the game should silently ignore it not being present.",
          "type": "boolean",
          "default": false
        },
        "Description": {
          "description": "Description of the plugin for users that do not have it installed.",
          "type": "string"
        },
        "MarketplaceURL": {
          "description": "URL for this plugin on the marketplace, if the user doesn't have it installed.",
          "type": "string"
        },
        "Name": {
          "description": "Name of the plugin.",
          "type": "string"
        },
        "PlatformAllowList": {
          "description": "List of allowed platforms.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "PlatformDenyList": {
          "description": "List of disallowed platforms.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "TargetAllowList": {
          "description": "List of allowed targets.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildTargetType"
          }
        },
        "TargetConfigurationAllowList": {
          "description": "List of allowed target configurations.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildConfiguration"
          }
        },
        "TargetConfigurationDenyList": {
          "description": "List of disallowed target configurations.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildConfiguration"
          }
        },
        "TargetDenyList": {
          "description": "List of disallowed targets.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/definitions/BuildTargetType"
          }
        }
      },
      "required": ["Enabled", "Name"]
    }
  },
  "description": "Descriptor for projects. Contains all the information contained within a .uproject file.",
  "id": "https://json.schemastore.org/uproject.json",
  "markdownDescription": "Descriptor for projects. Contains all the information contained within a `.uproject` file.",
  "properties": {
    "AdditionalPluginDirectories": {
      "$comment": "See https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Projects/FProjectDescriptor/AdditionalPluginDirectories",
      "description": "List of additional directoreis to scan for plugins",
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": []
    },
    "DisableEnginePluginsByDefault": {
      "description": "Indicates that enabled by default engine plugins should not be enabled unless explicitly enabled by the project or target files.",
      "type": "boolean",
      "default": false
    },
    "IsEnterpriseProject": {
      "description": "Indicates if this project is an Enterprise project.",
      "type": "boolean",
      "default": false
    },
    "Category": {
      "description": "Category to show under the project browser.",
      "type": "string"
    },
    "Description": {
      "description": "Description to show in the project browser.",
      "type": "string"
    },
    "EngineAssociation": {
      "$comment": "See https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Projects/FProjectDescriptor/EngineAssociation",
      "description": "The engine to open this project with. Either <major>.<minor> version (4.27, 5.4, etc), unique Engine identifier, blank for directory-based discovery, or relative path.",
      "type": "string",
      "pattern": "(^([0-9]+)\\.([0-9]+)$)|(^\\{[A-F0-9]{8}(-[A-F0-9]{4}){3}-[A-F0-9]{12}\\}$)|^$|[\\\\/]"
    },
    "EpicSampleNameHash": {
      "description": "A hash that is used to determine if the project was forked from a sample.",
      "type": "number"
    },
    "FileVersion": {
      "$comment": "More details can be found in https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Projects/EProjectDescriptorVersion__Type",
      "description": "Descriptor version number.",
      "markdownDescription": "Descriptor version number. See [EProjectDescriptorVersion::Type](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Projects/EProjectDescriptorVersion__Type).",
      "type": "number",
      "default": 3
    },
    "Modules": {
      "description": "List of all modules associated with this project.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "$ref": "#/definitions/ModuleDescriptor"
      }
    },
    "Plugins": {
      "description": "List of plugins for this project (may be enabled/disabled).",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "$ref": "#/definitions/PluginReferenceDescriptor"
      }
    },
    "PostBuildSteps": {
      "$comment": "Define platform as key, command as value.",
      "description": "Custom steps to execute after building targets in this project.",
      "type": "object"
    },
    "PreBuildSteps": {
      "$comment": "Define platform as key, command as value.",
      "description": "Custom steps to execute before building targets in this project.",
      "type": "object"
    },
    "TargetPlatforms": {
      "description": "Array of platforms that this project is targeting.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    }
  },
  "required": ["EngineAssociation", "FileVersion"],
  "title": "JSON schema for Unreal Engine uproject",
  "type": "object"
}
