{
    "$async": true,
    "definitions": {
        "Manifest": {
            "additionalProperties": true,
            "properties": {
                "icons": {
                    "description": "Links to 16x16 and 32x32 icons representing the Plugin.",
                    "properties": {
                        "x16": {
                            "description": "The URL of the 16x16 icon.",
                            "format": "url",
                            "type": "string"
                        },
                        "x32": {
                            "description": "The URL of the 32x32 icon.",
                            "format": "url",
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "kind": {
                    "description": "Plugin kind",
                    "enum": [
                        "source",
                        "customization",
                        "development",
                        "theme"
                    ],
                    "type": "string"
                },
                "languages": {
                    "description": "List of supported languages",
                    "items": {
                        "pattern": "^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*$",
                        "type": "string",
                        "_uniqueItems": true
                    },
                    "type": "array"
                },
                "target": {
                    "default": "renderer",
                    "description": "Plugin process target",
                    "enum": [
                        "main",
                        "renderer"
                    ],
                    "type": "string"
                }
            },
            "required": [
                "kind",
                "target"
            ],
            "type": "object"
        },
        "Person": {
            "description": "Person type definition",
            "oneOf": [
                {
                    "pattern": "[a-zA-Z]",
                    "type": "string"
                },
                {
                    "properties": {
                        "email": {
                            "description": "Person's email address",
                            "format": "email",
                            "type": "string"
                        },
                        "name": {
                            "description": "Person's mame",
                            "type": "string"
                        },
                        "url": {
                            "description": "Person's homepage",
                            "format": "url",
                            "type": "string"
                        }
                    },
                    "required": [
                        "name"
                    ],
                    "type": "object"
                }
            ]
        },
        "Settings": {
            "additionalProperties": true,
            "properties": {
                "updater": {
                    "$ref": "#/definitions/Updater",
                    "description": "Plugin updater options"
                }
            },
            "required": [
                "updater"
            ],
            "type": "object"
        },
        "Updater": {
            "additionalProperties": true,
            "properties": {
                "checkForUpdates": {
                    "default": true,
                    "description": "Automatically check for newer versions",
                    "type": "boolean"
                },
                "force": {
                    "default": false,
                    "description": "Force application reload",
                    "type": "boolean"
                },
                "interval": {
                    "default": 18000000,
                    "description": "Plugin update interval",
                    "maximum": 86400000,
                    "minimum": 3600000,
                    "type": "number"
                }
            },
            "required": [
                "checkForUpdates",
                "interval",
                "force"
            ],
            "type": "object"
        }
    },
    "description": "Plugin schema",
    "formatters": {
        "MetaInfo": {
            "default": "$.($.{'status':status,'id':video_id,'filename':$toFilename(title),'title':title,'description':description,'related_videos':related_videos,'keywords':keywords,'rating':avg_rating,'views':view_count,'author':author})",
            "description": "ytdl-core MetaInfo formatter",
            "type": "string"
        },
        "PlaylistItem": {
            "default": "$.($AccName:=function(){$.contentDetails.duration};$.{'id':id,'title':snippet.title,'name':snippet.title,'artists':[{'id':'sfasdf','name':'nook'}],'description':snippet.description,'thumbnails':snippet.thumbnails,'duration':$parseDuration(contentDetails.duration)})",
            "description": "PlaylistItem formatter",
            "type": "string"
        }
    },
    "properties": {
        "author": {
            "$ref": "#/definitions/Person",
            "description": "Original author of the plugin."
        },
        "description": {
            "description": "The plugin description.",
            "type": [
                "string",
                "null"
            ]
        },
        "homepage": {
            "description": "A Web link to the plugin homepage.",
            "format": "uri",
            "type": "string"
        },
        "id": {
            "description": "The ID of the plugin.",
            "type": "string"
        },
        "license": {
            "description": "Specify a license for your package so that people know how they are permitted to use it, and any restrictions you're placing on it",
            "type": "string"
        },
        "manifest": {
            "$ref": "#/definitions/Manifest",
            "description": "Plugin manifest"
        },
        "name": {
            "description": "The name of the plugin.",
            "type": "string"
        },
        "settings": {
            "$ref": "#/definitions/Settings",
            "description": "Plugin settings"
        },
        "version": {
            "description": "Plugin Version must be parseable by node-semver.",
            "format": "semver",
            "type": "string"
        }
    },
    "required": [
        "manifest"
    ],
    "title": "Plugin",
    "type": "object"
}