{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "dcosReleaseVersion": {
            "type": "string",
            "pattern": "^(?:0|[1-9][0-9]*)(?:\\.(?:0|[1-9][0-9]*))*$",
            "description": "A string representation of a DC/OS Release Version"
        },
        "url": {
            "type": "string",
            "allOf": [
                {
                    "format": "uri"
                },
                {
                    "pattern": "^https?://"
                }
            ]
        },
        "v20Package": {
            "properties": {
                "packagingVersion": {
                    "type": "string",
                    "enum": [
                        "2.0"
                    ],
                    "description": "The version of the packaging format. Please do not use this version. It is only here for backwards compatibility. We recommend you use the latest version."
                },
                "name": {
                    "type": "string",
                    "description": "The name of the package."
                },
                "version": {
                    "type": "string",
                    "description": "The version of the package. We recommend that you use semantic versions. See http://semver.org/ for more details on semantic versions."
                },
                "scm": {
                    "type": "string",
                    "description": "Source control management. This is generally the URL of the project GitHub repository."
                },
                "maintainer": {
                    "type": "string",
                    "description": "The maintainer of the package. This is generally an email address."
                },
                "website": {
                    "type": "string",
                    "description": "URL to the website of a project. This is generally the URL of the project GitHub repository."
                },
                "description": {
                    "type": "string",
                    "description": "Detailed description of what the package does."
                },
                "framework": {
                    "type": "boolean",
                    "default": false,
                    "description": "True if this package installs a new Mesos framework."
                },
                "preInstallNotes": {
                    "type": "string",
                    "description": "Pre installation notes that would be useful to the user of this package."
                },
                "postInstallNotes": {
                    "type": "string",
                    "description": "Post installation notes that would be useful to the user of this package."
                },
                "postUninstallNotes": {
                    "type": "string",
                    "description": "Post uninstallation notes that would be useful to the user of this package."
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "pattern": "^[^\\s]+$"
                    },
                    "description": "A list of keywords associated with the package."
                },
                "selected": {
                    "type": "boolean",
                    "description": "Flag indicating if the package is selected in search results",
                    "default": false
                },
                "licenses": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "description": "The name of the license. For example one of [Apache License Version 2.0 | MIT License | BSD License | Proprietary]"
                            },
                            "url": {
                                "$ref": "#/definitions/url",
                                "description": "The URL where the license can be accessed"
                            }
                        },
                        "additionalProperties": false,
                        "required": [
                            "name",
                            "url"
                        ]
                    }
                }
            },
            "required": [
                "packagingVersion",
                "name",
                "version",
                "maintainer",
                "description",
                "tags"
            ],
            "additionalProperties": false
        },
        "v30Package": {
            "properties": {
                "packagingVersion": {
                    "type": "string",
                    "enum": [
                        "3.0"
                    ],
                    "description": "The version of the packaging format."
                },
                "name": {
                    "type": "string",
                    "description": "The name of the package."
                },
                "version": {
                    "type": "string",
                    "pattern": "^[-a-zA-Z0-9.]+$",
                    "description": "The version of the package. We recommend that you use semantic versions. See http://semver.org/ for details on semantic versions."
                },
                "scm": {
                    "type": "string",
                    "description": "Source control management. This is generally the URL of the project GitHub repository."
                },
                "maintainer": {
                    "type": "string",
                    "description": "The maintainer of the package. This is generally an email address."
                },
                "website": {
                    "type": "string",
                    "description": "URL to the website of a project. This is generally the URL of the project GitHub repository."
                },
                "description": {
                    "type": "string",
                    "description": "Detailed description of what the package does."
                },
                "framework": {
                    "type": "boolean",
                    "default": false,
                    "description": "True if this package installs a new Mesos framework."
                },
                "preInstallNotes": {
                    "type": "string",
                    "description": "Pre installation notes that would be useful to the user of this package."
                },
                "postInstallNotes": {
                    "type": "string",
                    "description": "Post installation notes that would be useful to the user of this package."
                },
                "postUninstallNotes": {
                    "type": "string",
                    "description": "Post uninstallation notes that would be useful to the user of this package."
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "pattern": "^[^\\s]+$"
                    },
                    "description": "A list of keywords associated with the package."
                },
                "selected": {
                    "type": "boolean",
                    "description": "Flag indicating if the package is selected in search results",
                    "default": false
                },
                "licenses": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "description": "The name of the license. For example one of [Apache License Version 2.0 | MIT License | BSD License | Proprietary]"
                            },
                            "url": {
                                "$ref": "#/definitions/url",
                                "description": "The URL where the license can be accessed"
                            }
                        },
                        "additionalProperties": false,
                        "required": [
                            "name",
                            "url"
                        ]
                    }
                },
                "minDcosReleaseVersion": {
                    "$ref": "#/definitions/dcosReleaseVersion",
                    "description": "The minimum DC/OS Release Version the package can run on."
                }
            },
            "required": [
                "packagingVersion",
                "name",
                "version",
                "maintainer",
                "description",
                "tags"
            ],
            "additionalProperties": false
        },
        "v40Package": {
            "properties": {
                "packagingVersion": {
                    "type": "string",
                    "enum": [
                        "4.0"
                    ],
                    "description": "The version of the packaging format."
                },
                "name": {
                    "type": "string",
                    "description": "The name of the package."
                },
                "version": {
                    "type": "string",
                    "pattern": "^[-a-zA-Z0-9.]+$",
                    "description": "The version of the package. We recommend that you use semantic versions. See http://semver.org/ for details on semantic versions."
                },
                "scm": {
                    "type": "string",
                    "description": "Source control management. This is generally the URL of the project GitHub repository."
                },
                "maintainer": {
                    "type": "string",
                    "description": "The maintainer of the package. This is generally an email address."
                },
                "website": {
                    "type": "string",
                    "description": "URL to the website of a project. This is generally the URL of the project GitHub repository."
                },
                "description": {
                    "type": "string",
                    "description": "Detailed description of what the package does."
                },
                "framework": {
                    "type": "boolean",
                    "default": false,
                    "description": "True if this package installs a new Mesos framework."
                },
                "upgradesFrom": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of versions that can upgrade to this package. If the property is a list containing the string '*', any version can upgrade to this package. If the property is not set or the empty list, no version can upgrade to this package."
                },
                "downgradesTo": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of versions that this package can downgrade to. If the property is a list containing the string '*', this package can downgrade to any version. If the property is not set or the empty list, this package cannot downgrade."
                },
                "preInstallNotes": {
                    "type": "string",
                    "description": "Pre installation notes that would be useful to the user of this package."
                },
                "postInstallNotes": {
                    "type": "string",
                    "description": "Post installation notes that would be useful to the user of this package."
                },
                "postUninstallNotes": {
                    "type": "string",
                    "description": "Post uninstallation notes that would be useful to the user of this package."
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "pattern": "^[^\\s]+$",
                        "description": "A list of keywords associated with the package."
                    }
                },
                "selected": {
                    "type": "boolean",
                    "description": "Flag indicating if the package is selected in search results",
                    "default": false
                },
                "licenses": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "description": "The name of the license. For example one of [Apache License Version 2.0 | MIT License | BSD License | Proprietary]"
                            },
                            "url": {
                                "$ref": "#/definitions/url",
                                "description": "The URL where the license can be accessed"
                            }
                        },
                        "additionalProperties": false,
                        "required": [
                            "name",
                            "url"
                        ]
                    }
                },
                "minDcosReleaseVersion": {
                    "$ref": "#/definitions/dcosReleaseVersion",
                    "description": "The minimum DC/OS Release Version the package can run on."
                }
            },
            "required": [
                "packagingVersion",
                "name",
                "version",
                "maintainer",
                "description",
                "tags"
            ],
            "additionalProperties": false
        }
    },
    "type": "object",
    "oneOf": [
        {
            "$ref": "#/definitions/v20Package"
        },
        {
            "$ref": "#/definitions/v30Package"
        },
        {
            "$ref": "#/definitions/v40Package"
        }
    ]
}