Skip to content

Instantly share code, notes, and snippets.

@GeekyEggo
Last active June 25, 2020 02:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GeekyEggo/607881f1133ee2973b0140871023c9b8 to your computer and use it in GitHub Desktop.
Save GeekyEggo/607881f1133ee2973b0140871023c9b8 to your computer and use it in GitHub Desktop.
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"description": "The root manifest schema for an Elgato Stream Deck plug-in",
"required": [
"Actions",
"Author",
"CodePath",
"Description",
"Icon",
"Name",
"Version",
"SDKVersion",
"OS",
"Software"
],
"properties": {
"Actions": {
"type": "array",
"description": "Specifies an array of actions. A plugin can indeed have one or multiple actions. For example the Game Capture plugin has 6 actions: Scene, Record, Screenshot, Flashback Recording, Stream, Live Commentary.",
"items": { "$ref": "#/definitions/Action" }
},
"ApplicationsToMonitor": {
"type": "object",
"description": "List of application identifiers to monitor (applications launched or terminated). See the applicationDidLaunch and applicationDidTerminate events.",
"properties": {
"mac": {
"$ref": "#/definitions/ApplicationArray",
"description": "List of application bundle identifiers."
},
"windows": {
"$ref": "#/definitions/ApplicationArray",
"description": "List of exef filenames."
}
}
},
"Author": {
"type": "string",
"description": "The author of the plugin. This string is displayed to the user in the Stream Deck store."
},
"Category": {
"type": "string",
"description": "The name of the custom category in which the actions should be listed. This string is visible to the user in the actions list. If you don't provide a category, the actions will appear inside a \"Custom\" category."
},
"CategoryIcon": {
"type": "string",
"description": "The relative path to a PNG image without the .png extension. This image is used in the actions list. The PNG image should be a 28pt x 28pt image. You should provide @1x and @2x versions of the image. The Stream Deck application takes care of loading the appropriate version of the image."
},
"CodePath": {
"type": "string",
"description": "The relative path to the HTML/binary file containing the code of the plugin."
},
"CodePathMac": {
"type": "string",
"description": "Override CodePath for macOS."
},
"CodePathWin": {
"type": "string",
"description": "Override CodePath for Windows."
},
"DefaultWindowSize": {
"type": "string",
"description": "Specify the default window size when a Javascript plugin or Property Inspector opens a window using window.open(). Default value is [500, 650]",
"default": "[500, 600]",
"pattern": "^\\[[0-9]+, [0-9]+\\]"
},
"Description": {
"type": "string",
"description": "Provides a general description of what the plugin does. This string is displayed to the user in the Stream Deck store."
},
"Icon": {
"$ref": "#/definitions/ImageBase",
"type": "string",
"description": "The relative path to a PNG or GIF image without the .png or .gif extension. This image is displayed in the Plugin Store window. The PNG image should be a 72pt x 72pt image. You should provide @1x and @2x versions of the image. The Stream Deck application takes care of loading the appropriate version of the image.",
"examples": [
"Images/MyIcon"
]
},
"Name": {
"type": "string",
"description": "The name of the plugin. This string is displayed to the user in the Stream Deck store."
},
"Profiles": {
"type": "array",
"description": "Specifies an array of profiles. A plugin can indeed have one or multiple profiles that are proposed to the user on installation. This lets you create fullscreen plugins.",
"items": { "$ref": "#/definitions/Profile" }
},
"OS": {
"type": "array",
"description": "The list of operating systems supported by the plugin as well as the minimum supported version of the operating system.",
"items": { "$ref": "#/definitions/OS"
}
},
"PropertyInspectorPath": {
"type": "string",
"description": "The relative path to the Property Inspector html file if your plugin want to display some custom settings in the Property Inspector. If missing, the plugin will have an empty Property Inspector."
},
"Software": {
"type": "object",
"description": "Indicates which version of the Stream Deck application is required to install the plugin.",
"required": [ "MinimumVersion" ],
"properties": {
"MinimumVersion": {
"type": "string",
"description": "The minimum version of the Stream deck application that the plugin requires. This value should be set to only support Stream Deck 4.1 or later.",
"default": "4.1",
"pattern": "^(4\\.[1-9]+)|([5-9]\\.[0-9]+)|([1-9][0-9]+\\.[0-9]+)$",
"examples": [ "4.1" ]
}
}
},
"URL": {
"type": "string",
"description": "A URL displayed to the user if he wants to get more info about the plugin."
},
"Version": {
"type": "string",
"description": "The version of the plugin which can only contain digits and periods. This is used for the software update mechanism."
},
"SDKVersion": {
"type": "integer",
"description": "This value should be set to 2.",
"enum": [ 2 ]
}
},
"definitions": {
"ImageBase": {
"pattern": "^(?!.*[.]([Pp][Nn][Gg]|[Gg][Ii][Ff])$).*$"
},
"ApplicationArray": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"uniqueItems": true
},
"Action": {
"type": "object",
"required": [
"Name",
"States",
"UUID"
],
"properties": {
"Icon": {
"type": "string",
"description": "The relative path to a PNG image without the .png extension. This image is displayed in the actions list. The PNG image should be a 20pt x 20pt image. You should provide @1x and @2x versions of the image. The Stream Deck application take care of loaded the appropriate version of the image. This icon is not required for actions not visible in the actions list (VisibleInActionsList set to false)."
},
"Name": {
"type": "string",
"description": "The name of the action. This string is visible to the user in the actions list."
},
"PropertyInspectorPath": {
"type": "string",
"description": "This can override PropertyInspectorPath member from the plugin if you wish to have different PropertyInspectorPath based on the action. The relative path to the Property Inspector html file if your plugin want to display some custom settings in the Property Inspector."
},
"States": {
"type": "array",
"description": "Specifies an array of states. Each action can have one state or 2 states (on/off). For example the Hotkey action has a single state. However the Game Capture Record action has 2 states, active and inactive.",
"items": { "$ref": "#/definitions/State" },
"minItems": 1,
"maxItems": 2
},
"SupportedInMultiActions": {
"type": "boolean",
"description": "This can override PropertyInspectorPath member from the plugin if you wish to have different PropertyInspectorPath based on the action. The relative path to the Property Inspector html file if your plugin want to display some custom settings in the Property Inspector.",
"default": true
},
"Tooltip": {
"type": "string",
"description": "The string displayed as tooltip when the user leaves the mouse over your action in the actions list."
},
"UUID": {
"type": "string",
"description": "The unique identifier of the action. It must be a uniform type identifier (UTI) that contains only lowercase alphanumeric characters (a-z, 0-9), hyphen (-), and period (.). The string must be in reverse-DNS format. For example, if your domain is elgato.com and you create a plugin named Hello with the action My Action, you could assign the string com.elgato.hello.myaction as your action's Unique Identifier.",
"pattern": "^[a-z0-9\\-\\.]+$"
},
"VisibleInActionsList": {
"type": "boolean",
"description": "Boolean to hide the action in the actions list. This can be used for plugin that only works with a specific profile. True by default.",
"default": true
}
},
"allOf": [
{
"if": { "properties": { "VisibleInActionsList": { "const": true } } },
"then": { "required": [ "Icon" ] }
}
]
},
"OS": {
"type": "object",
"required": [
"Platform",
"MinimumVersion"
],
"properties": {
"Platform": {
"type": "string",
"description": "The name of the platform, mac or windows.",
"enum": [
"mac",
"windows"
]
},
"MinimumVersion": {
"type": "string",
"description": "The minimum version of the operating system that the plugin requires. For Windows 10, you can use 10. For macOS 10.11, you can use 10.11."
}
},
"allOf": [
{
"if": { "properties": { "Platform": { "const": "mac" } } },
"then": {
"properties": {
"MinimumVersion": {
"pattern": "^10\\.[1-9][1-9]+(\\.[0-9]+)?$",
"examples": [
"10.11",
"10.14",
"10.13.2"
]
}
}
},
"else": {
"properties": {
"MinimumVersion": {
"pattern": "^10(\\.[0-9]+)?(\\.[0-9]+)?$",
"examples": [
"10",
"10.0",
"10.0.17134"
]
}
}
}
}
]
},
"Profile": {
"type": "object",
"required": [
"Name",
"DeviceType"
],
"properties": {
"Name": {
"type": "string",
"description": "The filename of the profile."
},
"DeviceType": {
"type": "integer",
"description": "Type of device. Possible values are kESDSDKDeviceType_StreamDeck (0), kESDSDKDeviceType_StreamDeckMini (1), kESDSDKDeviceType_StreamDeckXL (2), kESDSDKDeviceType_StreamDeckMobile (3) and kESDSDKDeviceType_CorsairGKeys (4).",
"enum": [ 0, 1, 2, 3, 4 ]
},
"ReadOnly": {
"type": "boolean",
"description": "Boolean to mark the profile as read-only. False by default."
},
"DontAutoSwitchWhenInstalled": {
"type": "boolean",
"description": "Boolean to prevent Stream Deck from automatically switching to this profile when installed. False by default."
}
}
},
"State": {
"type": "object",
"properties": {
"Image": {
"$ref": "#definitions/ImageBase",
"type": "string",
"description": "The default image for the state."
},
"MultiActionImage": {
"type": "string",
"description": "This can be used if you want to provide a different image for the state when the action is displayed in a Multi Action."
},
"Name": {
"type": "string",
"description": "The name of the state displayed in the dropdown menu in the Multi action. For example Start or Stop for the states of the Game Capture Record action. If the name is not provided, the state will not appear in the Multi Action.",
"examples": [
"Start",
"Stop"
]
},
"Title": {
"type": "string",
"description": "Default title."
},
"ShowTitle": {
"type": "boolean",
"description": "Boolean to hide/show the title. True by default.",
"default": true
},
"TitleColor": {
"type": "string",
"description": "Default title color."
},
"TitleAlignment": {
"type": "string",
"description": "Default title vertical alignment.",
"enum": [
"top",
"middle",
"bottom"
]
},
"FontFamily": {
"type": "string",
"description": "Default font family for the title. Possible values are \"Arial\", \"Arial Black\", \"Comic Sans MS\", \"Courier\", \"Courier New\", \"Georgia\", \"Impact\", \"Microsoft Sans Serif\", \"Symbol\", \"Tahoma\", \"Times New Roman\", \"Trebuchet MS\", \"Verdana\", \"Webdings\", \"Wingdings\".",
"enum": [
"Arial",
"Arial Black",
"Comic Sans MS",
"Courier",
"Courier New",
"Georgia",
"Impact",
"Microsoft Sans Serif",
"Symbol",
"Tahoma",
"Times New Roman",
"Trebuchet MS",
"Verdana",
"Webdings",
"Wingdings"
]
},
"FontStyle": {
"type": "string",
"description": "Default font style for the title. Possible values are \"Regular\", \"Bold\", \"Italic\" and \"Bold Italic\". Note that some fonts might not support all values.",
"enum": [
"Regular",
"Bold",
"Italic",
"Bold Italic"
]
},
"FontSize": {
"type": "integer",
"description": "Default font size for the title."
},
"FontUnderline": {
"type": "boolean",
"description": "Boolean to have an underline under the title. False by default.",
"default": false
}
},
"required": [ "Image" ]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment