{
    "name": "Phraseanet Plugin Schema",
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "name": {
            "type": "string",
            "description": "The name of the plugin",
            "required": true
        },
        "description": {
            "type": "string",
            "description": "The description of the plugin",
            "required": true
        },
        "keywords": {
            "type": "array",
            "description": "An array of keywords",
            "items": {
                "type": "string",
                "description": "A keyword"
            }
        },
        "authors": {
            "type": "array",
            "description": "An array of authors",
            "items": {
                "type": "object",
                "description": "An author",
                "additionalProperties": false,
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "The author name",
                        "required": true
                    },
                    "email": {
                        "type": "string",
                        "description": "The author email",
                        "format": "email"
                    },
                    "homepage": {
                        "type": "string",
                        "description": "The author website URL",
                        "format": "uri"
                    }
                }
            }
        },
        "homepage": {
            "type": "string",
            "description": "The homepage of the plugin"
        },
        "license": {
            "type": [
                "string",
                "array"
            ],
            "description": "The license of the plugin"
        },
        "version": {
            "type": "string",
            "description": "The version of the plugin"
        },
        "minimum-phraseanet-version": {
            "type": "string",
            "description": "The minimum phraseanet version for the plugin, including the one provided."
        },
        "maximum-phraseanet-version": {
            "type": "string",
            "description": "The maximum phraseanet version for the plugin, excluding the one provided"
        },
        "twig-paths": {
            "type": "array",
            "description": "An array of optional relative Twig paths to register",
            "items": {
                "type": "string",
                "description": "A Twig path relative to the plugin root directory."
            }
        },
        "commands": {
            "type": "array",
            "description": "An array of commands to register.",
            "items": {
                "type": "object",
                "description": "A command",
                "properties": {
                    "class": {
                        "type": "string",
                        "description": "The plugin command name"
                    }
                }
            }
        },
        "services": {
            "type": "array",
            "description": "An array of services to register.",
            "items": {
                "type": "object",
                "description": "A service",
                "properties": {
                    "class": {
                        "type": "string",
                        "description": "The plugin service provider"
                    }
                }
            }
        },
        "extra": {
            "type": [
                "object",
                "array"
            ],
            "description": "Arbitrary extra data that can be used by custom installers.",
            "additionalProperties": true
        }
    }
}
