{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://developer.adobe.com/photoshop/uxp/plugin-manifest.schema.json", "title": "Adobe Photoshop UXP Plugin Manifest", "description": "Schema for the manifest.json file required by UXP plugins for Adobe Photoshop. The manifest defines plugin metadata, entry points, permissions, and host application requirements.", "type": "object", "required": [ "id", "name", "version", "manifestVersion", "host", "entrypoints" ], "properties": { "id": { "type": "string", "description": "Unique plugin identifier. Use reverse domain notation (e.g., com.example.myplugin)." }, "name": { "type": "string", "description": "Display name of the plugin shown in the Photoshop UI." }, "version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$", "description": "Plugin version in semver format (major.minor.patch)." }, "manifestVersion": { "type": "integer", "enum": [4, 5, 6], "description": "UXP manifest schema version. Version 5 or 6 recommended for current Photoshop." }, "main": { "type": "string", "description": "Path to the main JavaScript entry point file relative to the plugin root." }, "host": { "type": "object", "description": "Host application requirements.", "required": [ "app", "minVersion" ], "properties": { "app": { "type": "string", "const": "PS", "description": "Host application identifier. PS for Adobe Photoshop." }, "minVersion": { "type": "string", "description": "Minimum required Photoshop version (e.g., 22.0.0 for UXP support)." }, "maxVersion": { "type": "string", "description": "Optional maximum supported Photoshop version." } } }, "entrypoints": { "type": "array", "description": "Plugin entry points defining panels, commands, and other UI elements.", "items": { "type": "object", "required": [ "type", "id", "label" ], "properties": { "type": { "type": "string", "enum": [ "panel", "command" ], "description": "Entry point type. panel creates a dockable panel, command creates a menu item." }, "id": { "type": "string", "description": "Unique identifier for this entry point within the plugin." }, "label": { "type": "object", "description": "Localized display labels for the entry point.", "properties": { "default": { "type": "string", "description": "Default display label." } }, "additionalProperties": { "type": "string" } }, "minimumSize": { "type": "object", "description": "Minimum panel dimensions (panel type only).", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } }, "maximumSize": { "type": "object", "description": "Maximum panel dimensions (panel type only).", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } }, "preferredDockedSize": { "type": "object", "description": "Preferred panel dimensions when docked.", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } }, "preferredFloatingSize": { "type": "object", "description": "Preferred panel dimensions when floating.", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } }, "shortcut": { "type": "object", "description": "Keyboard shortcut for the entry point.", "properties": { "mac": { "type": "string", "description": "macOS keyboard shortcut." }, "win": { "type": "string", "description": "Windows keyboard shortcut." } } } } } }, "icons": { "type": "array", "description": "Plugin icons at various sizes for different display contexts.", "items": { "type": "object", "required": [ "width", "height", "path" ], "properties": { "width": { "type": "integer", "description": "Icon width in pixels." }, "height": { "type": "integer", "description": "Icon height in pixels." }, "path": { "type": "string", "description": "Path to the icon file relative to the plugin root." }, "scale": { "type": "array", "items": { "type": "number" }, "description": "Display scale factors (e.g., [1, 2] for standard and Retina)." }, "theme": { "type": "array", "items": { "type": "string", "enum": [ "lightest", "light", "medium", "dark", "darkest", "all" ] }, "description": "UI themes this icon supports." } } } }, "requiredPermissions": { "type": "object", "description": "Permissions the plugin requires to function.", "properties": { "clipboard": { "type": "string", "enum": [ "read", "readAndWrite" ], "description": "Clipboard access level." }, "network": { "type": "object", "description": "Network access permissions.", "properties": { "domains": { "type": "array", "items": { "type": "string" }, "description": "Allowed network domains. Use 'all' for unrestricted access." } } }, "webview": { "type": "object", "description": "WebView permissions for embedded web content.", "properties": { "allow": { "type": "string", "enum": [ "yes", "no" ] }, "domains": { "type": "array", "items": { "type": "string" } } } }, "ipc": { "type": "object", "description": "Inter-plugin communication permissions.", "properties": { "enablePluginCommunication": { "type": "boolean" } } }, "allowCodeGenerationFromStrings": { "type": "boolean", "description": "Whether to allow eval() and Function() from strings." }, "localFileSystem": { "type": "string", "enum": [ "plugin", "request", "fullAccess" ], "description": "File system access level. plugin = plugin sandbox only, request = user-prompted, fullAccess = unrestricted." }, "launchProcess": { "type": "object", "description": "Permission to launch external processes (hybrid plugins).", "properties": { "schemes": { "type": "array", "items": { "type": "string" } }, "extensions": { "type": "array", "items": { "type": "string" } } } }, "enableAddon": { "type": "boolean", "description": "Whether to enable native C++ addon loading (hybrid plugins)." } } }, "addon": { "type": "object", "description": "Configuration for hybrid plugin native C++ addon.", "properties": { "cplugins": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "filter" ] }, "path": { "type": "string", "description": "Relative path to the .uxpaddon file." } } } } } }, "description": { "type": "string", "description": "Short description of the plugin's purpose." }, "author": { "type": "string", "description": "Plugin author or company name." }, "keywords": { "type": "array", "items": { "type": "string" }, "description": "Keywords for plugin discovery in the Adobe Marketplace." } } }