{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/stablyai/orca/main/docs/schemas/plugins/orca-plugin.v2.schema.json", "title": "Orca plugin manifest", "description": "The orca-plugin.json file at the root of an Orca plugin (manifest format 2).", "type": "object", "properties": { "$schema": { "description": "JSON Schema URL for editor completion. Ignored by Orca.", "x-orca-since": "1.4.245", "type": "string", "maxLength": 2048 }, "manifestVersion": { "type": "number", "const": 2, "description": "Manifest format. Use 2 for new plugins.", "x-orca-since": "1.4.245" }, "execution": { "type": "string", "enum": [ "data", "declarative", "sandboxed-ui", "trusted-worker" ], "description": "Most authority the plugin needs, least first: `data` (themes, syntaxes, translations), `declarative` (commands, shortcuts, recipes), `sandboxed-ui` (panels), `trusted-worker` (`main`, events and hooks). Contributions beyond it fail validation.", "x-orca-since": "1.4.245", "examples": [ "data" ] }, "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "Plugin id, kebab-case. The install identity is `.`, where Orca derives the publisher from the repository owner. The reserved names `constructor` and `prototype` are refused.", "x-orca-since": "1.4.160", "examples": [ "gleam-syntax" ] }, "publisher": { "deprecated": true, "description": "Deprecated: leave it out. Orca derives the publisher from where the plugin comes from, the way a Go module is named by its repository path: the repository owner for the official and community catalogs and for Git URL installs (`acme` for `github.com/acme/gleam-syntax`), and `local` for a folder. A value here is ignored for catalog and Git installs. Leaving it out needs `engines.orca` of at least `>=1.4.246`, because older Orca requires it; if you keep it for older Orca, it must equal the repository owner. Reserved owners (`stablyai`, `official`, `anthropic`, `openai`, `github` and any starting `orca`) and ids starting `orca-` install only from Orca's official catalog.", "x-orca-since": "1.4.160", "examples": [ "acme" ], "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" }, "name": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Display name.", "x-orca-since": "1.4.160", "examples": [ "Gleam" ] }, "version": { "type": "string", "pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$", "description": "Plugin version, semver.", "x-orca-since": "1.4.160", "examples": [ "1.2.0" ] }, "description": { "description": "One or two sentences shown in the plugin list.", "x-orca-since": "1.4.160", "type": "string", "maxLength": 4096 }, "author": { "description": "Who maintains the plugin.", "x-orca-since": "1.4.160", "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Author or organization name.", "x-orca-since": "1.4.160", "examples": [ "Acme" ] }, "url": { "description": "Author homepage.", "x-orca-since": "1.4.160", "examples": [ "https://example.com" ], "type": "string", "maxLength": 2048 } }, "required": [ "name" ], "additionalProperties": false }, "repository": { "description": "Source repository URL.", "x-orca-since": "1.4.160", "examples": [ "https://github.com/acme/orca-gleam-syntax" ], "type": "string", "maxLength": 2048 }, "license": { "description": "SPDX license expression.", "x-orca-since": "1.4.245", "examples": [ "MIT", "Apache-2.0 OR MIT" ], "type": "string", "maxLength": 128, "pattern": "^\\(?[A-Za-z0-9][A-Za-z0-9.+-]*(?: (?:AND|OR|WITH) \\(?[A-Za-z0-9][A-Za-z0-9.+-]*\\)?)*\\)?$" }, "homepage": { "description": "Project homepage, https only.", "x-orca-since": "1.4.245", "examples": [ "https://example.com/gleam" ], "type": "string", "maxLength": 2048, "pattern": "^https:\\/\\/\\S+$" }, "icon": { "description": "Square image shown beside the plugin name. PNG, WEBP, static, at least 128×128, square, at most 256 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.160", "examples": [ "assets/icon.png" ], "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" }, "engines": { "type": "object", "properties": { "orca": { "type": "string", "maxLength": 64, "pattern": "^>=\\d+\\.\\d+\\.\\d+$", "description": "Oldest Orca release this plugin runs on, as `>=x.y.z`. Raise it to the newest \"Since\" of any field you use; a format 2 manifest needs at least `>=1.4.245`, because older Orca cannot read format 2.", "x-orca-since": "1.4.160", "examples": [ ">=1.4.245" ] } }, "required": [ "orca" ], "additionalProperties": false, "description": "Host versions this plugin supports. Older hosts refuse to load it.", "x-orca-since": "1.4.160" }, "main": { "description": "Node entry run in an out-of-process plugin worker: a `.js`/`.mjs` module, or a `.ts`/`.mts` module that Orca transpiles when it loads (needs `engines.orca` `>=1.4.246`). Requires the `trusted-worker` execution profile, and is required by it, by `contributes.events`, by `contributes.hooks` and by any command without an `action`. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.160", "examples": [ "dist/main.mjs" ], "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" }, "contributes": { "description": "What the plugin adds to Orca. Every point defaults to empty.", "x-orca-since": "1.4.160", "default": {}, "type": "object", "properties": { "panels": { "default": [], "description": "Sidebar panels. At most 64.", "x-orca-since": "1.4.160", "maxItems": 64, "type": "array", "items": { "$ref": "#/$defs/PanelContribution" } }, "commands": { "default": [], "description": "Command palette entries. At most 256.", "x-orca-since": "1.4.160", "maxItems": 256, "type": "array", "items": { "$ref": "#/$defs/CommandContribution" } }, "events": { "default": [], "description": "Events delivered to the plugin worker. At most 5.", "x-orca-since": "1.4.160", "maxItems": 5, "type": "array", "items": { "$ref": "#/$defs/EventContribution" } }, "hooks": { "default": [], "description": "Hooks the worker runs before or after Orca acts; Orca waits only on plugins that list one. At most 8.", "x-orca-since": "1.4.248", "maxItems": 8, "type": "array", "items": { "$ref": "#/$defs/HookContribution" } }, "languagePacks": { "default": [], "description": "Interface translations. At most 16.", "x-orca-since": "1.4.160", "maxItems": 16, "type": "array", "items": { "$ref": "#/$defs/LanguagePackContribution" } }, "keybindings": { "description": "Keyboard shortcuts for contributed commands. At most 256.", "x-orca-since": "1.4.160", "maxItems": 256, "type": "array", "items": { "$ref": "#/$defs/KeybindingContribution" } }, "vmRecipes": { "default": [], "description": "Virtual machine environment recipes. At most 64.", "x-orca-since": "1.4.160", "maxItems": 64, "type": "array", "items": { "$ref": "#/$defs/VmRecipeContribution" } }, "themes": { "default": [], "description": "App color themes. At most 64.", "x-orca-since": "1.4.245", "maxItems": 64, "type": "array", "items": { "$ref": "#/$defs/ThemeContribution" } }, "terminalThemes": { "default": [], "description": "Terminal ANSI palettes. At most 64.", "x-orca-since": "1.4.245", "maxItems": 64, "type": "array", "items": { "$ref": "#/$defs/ThemeContribution" } }, "iconThemes": { "default": [], "description": "File icon themes. At most 32.", "x-orca-since": "1.4.245", "maxItems": 32, "type": "array", "items": { "$ref": "#/$defs/ThemeContribution" } }, "fonts": { "default": [], "description": "Font families for the terminal, editor and interface font pickers. At most 8.", "x-orca-since": "1.4.253", "maxItems": 8, "type": "array", "items": { "$ref": "#/$defs/FontContribution" } }, "syntaxes": { "default": [], "description": "Syntax highlighting for editor languages. At most 16.", "x-orca-since": "1.4.245", "maxItems": 16, "type": "array", "items": { "$ref": "#/$defs/SyntaxContribution" } }, "customEditors": { "default": [], "description": "Editors that open files of given types in the editor tab. At most 16.", "x-orca-since": "1.4.245", "maxItems": 16, "type": "array", "items": { "$ref": "#/$defs/CustomEditorContribution" } }, "newFiles": { "default": [], "description": "Untitled files the user can create from the + menu and the command palette. At most 16.", "x-orca-since": "1.4.245", "maxItems": 16, "type": "array", "items": { "$ref": "#/$defs/NewFileContribution" } }, "settings": { "default": [], "description": "Settings Orca shows under the plugin in Settings; code reads them with `settings.get` (`settings:own`). At most 64.", "x-orca-since": "1.4.246", "maxItems": 64, "type": "array", "items": { "$ref": "#/$defs/SettingContribution" } }, "statusBarItems": { "default": [], "description": "Items in the status bar; pressing one runs its `command`, and a worker changes them with `statusBar.update`. With `main`, the worker runs for as long as the plugin is enabled. At most 8.", "x-orca-since": "1.4.248", "maxItems": 8, "type": "array", "items": { "$ref": "#/$defs/StatusBarItemContribution" } }, "agentHarnesses": { "description": "Reserved for coding-agent harness definitions; must be empty until their format is defined.", "x-orca-since": "1.4.245", "maxItems": 0, "type": "array", "items": {} }, "skills": { "description": "Reserved for agent skills; must be empty until their format is defined.", "x-orca-since": "1.4.245", "maxItems": 0, "type": "array", "items": {} }, "mcpServers": { "description": "Reserved for MCP server definitions; must be empty until their format is defined.", "x-orca-since": "1.4.245", "maxItems": 0, "type": "array", "items": {} }, "taskSources": { "description": "Reserved for task sources; must be empty until their format is defined.", "x-orca-since": "1.4.245", "maxItems": 0, "type": "array", "items": {} }, "connections": { "description": "Reserved for account connections; must be empty until their format is defined.", "x-orca-since": "1.4.245", "maxItems": 0, "type": "array", "items": {} }, "sidebarCards": { "description": "Reserved for sidebar cards; must be empty until their format is defined.", "x-orca-since": "1.4.245", "maxItems": 0, "type": "array", "items": {} } }, "additionalProperties": false }, "capabilities": { "default": [], "description": "Host APIs the plugin asks the user to grant. At most 32.", "x-orca-since": "1.4.160", "maxItems": 32, "type": "array", "items": { "$ref": "#/$defs/Capability" } }, "cover": { "description": "Wide image at the top of the plugin page.", "x-orca-since": "1.4.245", "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "Cover image shown on the plugin page, 16:10 recommended (1600×1000). PNG, JPEG, WEBP, static, at least 800×500, at most 1024 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "images/cover.png" ] }, "alt": { "type": "string", "minLength": 1, "maxLength": 160, "description": "What the image shows, for screen readers. Required.", "x-orca-since": "1.4.245", "examples": [ "The Dusk theme on a terminal" ] } }, "required": [ "path", "alt" ], "additionalProperties": false }, "screenshots": { "description": "Screenshots for the plugin page, at most 6. All images together may be at most 8 MB.", "x-orca-since": "1.4.245", "maxItems": 6, "type": "array", "items": { "$ref": "#/$defs/Screenshot" } }, "pluginApi": { "description": "Major version of the plugin host API this plugin targets. Optional (defaults to 1), and refused on `data` and `declarative` plugins, which never call it.", "x-orca-since": "1.4.160", "type": "number", "const": 1 } }, "required": [ "manifestVersion", "execution", "id", "name", "version", "engines" ], "additionalProperties": false, "$defs": { "PanelContribution": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "Panel id, unique among this plugin's panels. The reserved names `constructor` and `prototype` are refused.", "x-orca-since": "1.4.160", "examples": [ "dashboard" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Title shown on the panel tab and its tooltip.", "x-orca-since": "1.4.160", "examples": [ "Dashboard" ] }, "icon": { "description": "Icon shown in the right-sidebar activity bar. Defaults to `plug`.", "x-orca-since": "1.4.160", "examples": [ "database" ], "x-orca-enum-since": { "add": "1.4.246", "remove": "1.4.246", "delete": "1.4.246", "edit": "1.4.246", "refresh": "1.4.246", "search": "1.4.246", "settings": "1.4.246", "check": "1.4.246", "close": "1.4.246", "info": "1.4.246", "warning": "1.4.246", "error": "1.4.246", "open-external": "1.4.246", "copy": "1.4.246", "download": "1.4.246", "upload": "1.4.246", "play": "1.4.246", "pause": "1.4.246", "stop": "1.4.246", "more": "1.4.246", "expand": "1.4.246", "collapse": "1.4.246", "next": "1.4.246", "filter": "1.4.246", "branch": "1.4.246", "file": "1.4.246", "agent": "1.4.246", "link": "1.4.246" }, "type": "string", "enum": [ "activity", "bar-chart-3", "bell", "blocks", "book", "bot", "bug", "calendar", "cloud", "code", "database", "file-text", "flag", "folder", "gauge", "globe", "hammer", "layers", "lightbulb", "package", "plug", "puzzle", "rocket", "star", "terminal", "wrench", "zap", "add", "remove", "delete", "edit", "refresh", "search", "settings", "check", "close", "info", "warning", "error", "open-external", "copy", "download", "upload", "play", "pause", "stop", "more", "expand", "collapse", "next", "filter", "branch", "file", "agent", "link" ] }, "entry": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "What the panel runs: an HTML page for `ui: \"html\"`, a `.js`/`.mjs` module for `ui: \"components\"`. Either may instead be a `.ts`/`.tsx`/`.mts`/`.jsx` file, which Orca transpiles when it loads (needs `engines.orca` `>=1.4.246`; an `html` panel then gets a generated page around it). It is trusted code: install panels you trust. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.160", "examples": [ "dist/panel.html" ] }, "ui": { "description": "How the panel draws its UI. `html` (default) shows `entry` as a web page in an isolated frame; `components` runs `entry` as a hidden module and Orca draws the component tree it returns with its own controls.", "x-orca-since": "1.4.246", "examples": [ "components" ], "type": "string", "enum": [ "html", "components" ] } }, "required": [ "id", "title", "entry" ], "additionalProperties": false, "description": "A sidebar panel. Requires the `sandboxed-ui` execution profile or higher." }, "CommandContribution": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$", "description": "Command id, unique among this plugin's commands. Dotted namespaces are allowed.", "x-orca-since": "1.4.160", "examples": [ "jupyter.restartKernel" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 256, "description": "Title shown in the command palette.", "x-orca-since": "1.4.160", "examples": [ "Restart kernel" ] }, "when": { "description": "Where the command is available. `workspace` hides it when no workspace is active. Defaults to `global`.", "x-orca-since": "1.4.160", "x-orca-enum-since": { "global": "1.4.160", "workspace": "1.4.245" }, "type": "string", "enum": [ "global", "workspace" ] }, "action": { "description": "Built-in Orca action this command runs. A command with an action is declarative and never starts the plugin worker; one without needs `main`.", "x-orca-since": "1.4.160", "examples": [ "view.tasks" ], "enum": [ "worktree.history.back", "worktree.history.forward", "sidebar.left.toggle", "sidebar.sleepingWorkspaces.toggle", "floatingWorkspace.maximize", "tab.rename", "workspace.rename", "workspace.openBoard", "view.tasks", "sidebar.right.toggle", "sidebar.explorer.toggle", "sidebar.search.toggle", "sidebar.sourceControl.toggle", "sidebar.checks.toggle", "sidebar.ports.toggle" ], "x-orca-enum-since": { "worktree.history.back": "1.4.160", "worktree.history.forward": "1.4.160", "sidebar.left.toggle": "1.4.160", "sidebar.sleepingWorkspaces.toggle": "1.4.160", "floatingWorkspace.maximize": "1.4.160", "tab.rename": "1.4.160", "workspace.rename": "1.4.160", "workspace.openBoard": "1.4.160", "view.tasks": "1.4.160", "sidebar.right.toggle": "1.4.160", "sidebar.explorer.toggle": "1.4.160", "sidebar.search.toggle": "1.4.160", "sidebar.sourceControl.toggle": "1.4.160", "sidebar.checks.toggle": "1.4.160", "sidebar.ports.toggle": "1.4.160" }, "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$" }, "replaces": { "description": "Built-in Orca action this worker command runs in place of, from its shortcut, the palette or a menu. To also run Orca’s own, the command calls `commands.run` with the action (`workspace:write`); that never reaches a replacement. If the worker fails or takes over 2 s, Orca runs its own. The person sees it before approving and can turn it off in Settings; when two plugins replace one action, the one installed first does.", "x-orca-since": "1.4.248", "examples": [ "view.tasks" ], "enum": [ "worktree.history.back", "worktree.history.forward", "sidebar.left.toggle", "sidebar.sleepingWorkspaces.toggle", "floatingWorkspace.maximize", "tab.rename", "workspace.rename", "workspace.openBoard", "view.tasks", "sidebar.right.toggle", "sidebar.explorer.toggle", "sidebar.search.toggle", "sidebar.sourceControl.toggle", "sidebar.checks.toggle", "sidebar.ports.toggle" ], "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$" } }, "required": [ "id", "title" ], "additionalProperties": false, "description": "A command palette entry. Requires the `declarative` execution profile or higher." }, "EventContribution": { "type": "object", "properties": { "on": { "type": "string", "enum": [ "workspace.created", "workspace.removed", "agent.status.changed", "workspace.changed", "editor.typography.changed" ], "description": "Event delivered to the plugin worker.", "x-orca-since": "1.4.160", "x-orca-enum-since": { "workspace.created": "1.4.245", "workspace.removed": "1.4.245", "agent.status.changed": "1.4.160", "workspace.changed": "1.4.246", "editor.typography.changed": "1.4.256" } } }, "required": [ "on" ], "additionalProperties": false, "description": "An event subscription. Requires `main`, the `trusted-worker` execution profile and the capability of the event's domain: `workspace:read` for workspace events, `agent:read` for agent events. Editor events need no capability." }, "HookContribution": { "type": "object", "properties": { "event": { "type": "string", "enum": [ "terminal.send", "workspace.create.before", "workspace.create.after", "agent.launch.before", "agent.prompt.before", "agent.tool.before", "agent.tool.after", "editor.save.before" ], "description": "Hook the worker handles with `orca.hooks.on`.", "x-orca-since": "1.4.248", "x-orca-enum-since": { "terminal.send": "1.4.248", "workspace.create.before": "1.4.248", "workspace.create.after": "1.4.248", "agent.launch.before": "1.4.248", "agent.prompt.before": "1.4.248", "agent.tool.before": "1.4.248", "agent.tool.after": "1.4.248", "editor.save.before": "1.4.248" } }, "onError": { "description": "What Orca does when this plugin's hook throws, times out, crashes or does not start: `pass` (the default) carries on as if it passed; `deny` refuses the action, naming the plugin, so a guard fails closed. Ignored for hooks that only observe.", "x-orca-since": "1.4.248", "type": "string", "enum": [ "pass", "deny" ] } }, "required": [ "event" ], "additionalProperties": false, "description": "A hook Orca runs through the worker before (or after) it acts. Requires `main` and the `trusted-worker` execution profile." }, "LanguagePackContribution": { "type": "object", "properties": { "locale": { "type": "string", "minLength": 2, "maxLength": 35, "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$", "description": "BCP 47 locale the pack translates Orca into. Each locale appears once, ignoring case.", "x-orca-since": "1.4.160", "examples": [ "pt-BR" ] }, "path": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "JSON file of translated interface strings. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.160", "examples": [ "locales/pt-BR.json" ] }, "displayName": { "description": "Native-language name for the Settings picker. Omitted packs show `{locale} — {pluginKey}`.", "x-orca-since": "1.4.245", "examples": [ "Português (Brasil)" ], "type": "string", "minLength": 1, "maxLength": 80 } }, "required": [ "locale", "path" ], "additionalProperties": false, "description": "An interface translation." }, "KeybindingContribution": { "type": "object", "properties": { "command": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$", "description": "Id of a command this plugin contributes in `contributes.commands`.", "x-orca-since": "1.4.160", "examples": [ "jupyter.restartKernel" ] }, "key": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Key chord Orca recognizes, such as `Mod+Shift+K`. `Mod` is Cmd on macOS and Ctrl elsewhere. Each chord may be bound once on every platform.", "x-orca-since": "1.4.160", "examples": [ "Mod+Shift+K" ] }, "when": { "description": "Where the shortcut is active; must match its command's `when`.", "x-orca-since": "1.4.160", "x-orca-enum-since": { "global": "1.4.160", "workspace": "1.4.245" }, "type": "string", "enum": [ "global", "workspace" ] } }, "required": [ "command", "key" ], "additionalProperties": false, "description": "A keyboard shortcut for a command." }, "VmRecipeContribution": { "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "JSON environment recipe file, listed once. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.160", "examples": [ "recipes/ubuntu.json" ] } }, "required": [ "path" ], "additionalProperties": false, "description": "A virtual machine environment recipe." }, "ThemeContribution": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "Theme id, unique within its family in this plugin. The reserved names `constructor` and `prototype` are refused.", "x-orca-since": "1.4.245", "examples": [ "dusk" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Name shown in the theme picker.", "x-orca-since": "1.4.245", "examples": [ "Dusk" ] }, "path": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "JSON theme file, at most 16 KiB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "themes/dusk.json" ] } }, "required": [ "id", "title", "path" ], "additionalProperties": false, "description": "A titled theme file." }, "FontContribution": { "type": "object", "properties": { "family": { "type": "string", "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9 _.-]{0,46}[A-Za-z0-9])?$", "description": "Family name shown in the font pickers. Orca adds the plugin id, so a plugin font never replaces an installed or built-in font of the same name.", "x-orca-since": "1.4.253", "examples": [ "Geist" ] }, "faces": { "minItems": 1, "maxItems": 8, "type": "array", "items": { "$ref": "#/$defs/FontFaceContribution" }, "description": "The family's files, at most 8. All of a plugin's font files together may be at most 8 MB.", "x-orca-since": "1.4.253" } }, "required": [ "family", "faces" ], "additionalProperties": false, "description": "A font family the user can pick for the terminal, editor or interface. It applies only once picked." }, "FontFaceContribution": { "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 1024, "allOf": [ { "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" }, { "pattern": "\\.woff2?$" } ], "description": "WOFF or WOFF2 file, at most 2 MB; its first bytes must match its extension. TTF, OTF and font collections are refused. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.253", "examples": [ "fonts/Geist-Variable.woff2" ] }, "weight": { "description": "CSS weight this file draws, or a range for a variable font. Defaults to `400`.", "x-orca-since": "1.4.253", "examples": [ "400", "100 900" ], "type": "string", "pattern": "^(?:[1-9]\\d{0,2}|1000)(?: (?:[1-9]\\d{0,2}|1000))?$" }, "style": { "description": "Whether this file is the italic face. Defaults to `normal`.", "x-orca-since": "1.4.253", "type": "string", "enum": [ "normal", "italic" ] } }, "required": [ "path" ], "additionalProperties": false, "description": "One file of a font family." }, "SyntaxContribution": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "Language id, unique among this plugin's syntaxes. The reserved names `constructor` and `prototype` are refused.", "x-orca-since": "1.4.245", "examples": [ "gleam" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Language name shown in the editor.", "x-orca-since": "1.4.245", "examples": [ "Gleam" ] }, "scopeName": { "type": "string", "maxLength": 128, "pattern": "^[A-Za-z][A-Za-z0-9_-]*(?:\\.[A-Za-z0-9_-]+)+$", "description": "The grammar's root TextMate scope, unique among this plugin's syntaxes.", "x-orca-since": "1.4.245", "examples": [ "source.gleam" ] }, "path": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "TextMate grammar JSON file. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "syntaxes/gleam.tmLanguage.json" ] }, "configuration": { "description": "Language configuration JSON file: comments, brackets and auto-closing pairs. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "syntaxes/language-configuration.json" ], "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" }, "extensions": { "default": [], "description": "File-name suffixes, with the dot, this language opens, ignoring case. A longer suffix such as `.excalidraw.json` wins over a shorter one, and a file named only the suffix never matches. At most 32.", "x-orca-since": "1.4.245", "examples": [ [ ".gleam" ] ], "maxItems": 32, "type": "array", "items": { "type": "string", "maxLength": 64, "pattern": "^\\.[A-Za-z0-9_+-]+(?:\\.[A-Za-z0-9_+-]+)*$" } }, "filenames": { "default": [], "description": "Exact file names this language opens, ignoring case; a name beats any extension. Names must be portable: no path separators, `.`, `..` or characters Windows forbids. At most 32.", "x-orca-since": "1.4.245", "examples": [ [ "gleam.toml" ] ], "maxItems": 32, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 128 } } }, "required": [ "id", "title", "scopeName", "path" ], "additionalProperties": false, "description": "Syntax highlighting for one language." }, "CustomEditorContribution": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "Editor id, unique among this plugin's custom editors. The reserved names `constructor` and `prototype` are refused.", "x-orca-since": "1.4.245", "examples": [ "excalidraw" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 64, "description": "Name shown in the editor's view toggle beside Source, and on the tab of a file it opens.", "x-orca-since": "1.4.245", "examples": [ "Excalidraw" ] }, "icon": { "description": "Square image shown on the tab of a file this editor opens. Defaults to the plugin icon. PNG, WEBP, static, at least 128×128, square, at most 256 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "images/editor-icon.png" ], "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" }, "extensions": { "default": [], "description": "File-name suffixes, with the dot, this editor opens, ignoring case. A longer suffix such as `.excalidraw.json` wins over a shorter one, and a file named only the suffix never matches. At most 32.", "x-orca-since": "1.4.245", "examples": [ [ ".excalidraw", ".excalidraw.json" ] ], "maxItems": 32, "type": "array", "items": { "type": "string", "maxLength": 64, "pattern": "^\\.[A-Za-z0-9_+-]+(?:\\.[A-Za-z0-9_+-]+)*$" } }, "filenames": { "default": [], "description": "Exact file names this editor opens, ignoring case; a name beats any extension. Names must be portable: no path separators, `.`, `..` or characters Windows forbids. At most 32.", "x-orca-since": "1.4.245", "examples": [ [] ], "maxItems": 32, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 128 } }, "entry": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "HTML file rendered inside an editor frame, like a panel, or a `.ts`/`.tsx` module that Orca transpiles and loads in a generated page (needs `engines.orca` `>=1.4.246`). It receives the open document and posts edits back; it never gets a file path or file system. It is trusted code: install editors you trust. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "editor/index.html" ] }, "priority": { "description": "`default` (the default) opens matching files in this editor; `option` only offers it in the view toggle, so files open in Source. Files Orca opens itself (such as `.json`, `.ts`, `.md`, `.csv`, `.yaml`, lockfiles and `.env` files) always behave as `option`; a longer suffix such as `.sketch.json` is not one of them and opens by default.", "x-orca-since": "1.4.245", "examples": [ "default" ], "type": "string", "enum": [ "default", "option" ] }, "contentKind": { "description": "`text` (the default) sends the file as text and accepts full-text edits. `bytes` sends the file's raw bytes, for binary formats such as spreadsheets, and accepts full-byte edits.", "x-orca-since": "1.4.245", "examples": [ "bytes" ], "type": "string", "enum": [ "text", "bytes" ] }, "frame": { "description": "`any` (the default) runs in whatever frame the client gives. `isolated` runs only in the desktop app's isolated frame, never the browser-client fallback: browser clients, and desktop with isolated frames switched off, open the file in Source with a notice that the editor needs the Orca desktop app.", "x-orca-since": "1.4.248", "examples": [ "isolated" ], "type": "string", "enum": [ "any", "isolated" ] } }, "required": [ "id", "title", "entry" ], "additionalProperties": false, "description": "An editor for the listed files, shown in the editor tab beside Source. It must list at least one extension or file name. Requires the `sandboxed-ui` execution profile or higher." }, "NewFileContribution": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "New-file id, unique among this plugin's new files. The reserved names `constructor` and `prototype` are refused.", "x-orca-since": "1.4.245", "examples": [ "drawing" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 64, "description": "Menu item shown in the tab bar + menu and the command palette.", "x-orca-since": "1.4.245", "examples": [ "New Excalidraw drawing" ] }, "extension": { "type": "string", "maxLength": 64, "pattern": "^\\.[A-Za-z0-9_+-]+(?:\\.[A-Za-z0-9_+-]+)*$", "description": "Suffix, with the dot, of the untitled file it creates. The file opens in whatever editor takes that suffix, such as a custom editor from this plugin.", "x-orca-since": "1.4.245", "examples": [ ".excalidraw" ] }, "template": { "description": "UTF-8 file copied into the new file, at most 256 KB. Without one the file starts empty. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "templates/empty.excalidraw" ], "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" }, "icon": { "description": "Square image shown beside the menu item. Defaults to the plugin icon. PNG, WEBP, static, at least 128×128, square, at most 256 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "images/editor-icon.png" ], "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$" } }, "required": [ "id", "title", "extension" ], "additionalProperties": false, "description": "A kind of untitled file the user can create from the tab bar + menu or the command palette, in the active workspace." }, "SettingContribution": { "type": "object", "properties": { "key": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,63}$", "description": "Key code reads and writes, unique in this plugin.", "x-orca-since": "1.4.246", "examples": [ "apiUrl" ] }, "title": { "type": "string", "minLength": 1, "maxLength": 120, "description": "Label shown in Settings.", "x-orca-since": "1.4.246", "examples": [ "Server URL" ] }, "description": { "description": "Help text shown under the label.", "x-orca-since": "1.4.246", "type": "string", "maxLength": 1000 }, "type": { "type": "string", "enum": [ "string", "number", "integer", "boolean" ], "description": "JSON Schema type of the value.", "x-orca-since": "1.4.246", "examples": [ "string" ] }, "default": { "description": "Value read while the person has not set one.", "x-orca-since": "1.4.246", "anyOf": [ { "type": "string", "maxLength": 10000 }, { "type": "number" }, { "type": "boolean" } ] }, "enum": { "description": "Allowed values; Settings shows a picker.", "x-orca-since": "1.4.246", "minItems": 1, "maxItems": 64, "type": "array", "items": { "anyOf": [ { "type": "string", "maxLength": 256 }, { "type": "number" } ] } }, "enumLabels": { "description": "Picker labels, one per `enum` value.", "x-orca-since": "1.4.246", "maxItems": 64, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 120 } }, "minimum": { "description": "Numbers: smallest value.", "x-orca-since": "1.4.246", "type": "number" }, "maximum": { "description": "Numbers: largest value.", "x-orca-since": "1.4.246", "type": "number" }, "maxLength": { "description": "Strings: most characters.", "x-orca-since": "1.4.246", "type": "integer", "minimum": 1, "maximum": 10000 }, "multiline": { "description": "Strings: a multi-line text box.", "x-orca-since": "1.4.246", "type": "boolean" }, "placeholder": { "description": "Strings and numbers: hint shown while empty.", "x-orca-since": "1.4.246", "type": "string", "maxLength": 120 } }, "required": [ "key", "title", "type" ], "additionalProperties": false, "description": "A setting shown under the plugin in Settings. Requires the `settings:own` capability, which is also how code reads it." }, "StatusBarItemContribution": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 64, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "description": "Item id, unique among this plugin's status bar items; `statusBar.update` names it.", "x-orca-since": "1.4.248", "examples": [ "blocked-count" ] }, "text": { "description": "Short label shown in the status bar.", "x-orca-since": "1.4.248", "examples": [ "3 blocked" ], "type": "string", "maxLength": 64 }, "icon": { "description": "Icon shown before the text, from the panel icon set.", "x-orca-since": "1.4.248", "examples": [ "bell" ], "type": "string", "enum": [ "activity", "bar-chart-3", "bell", "blocks", "book", "bot", "bug", "calendar", "cloud", "code", "database", "file-text", "flag", "folder", "gauge", "globe", "hammer", "layers", "lightbulb", "package", "plug", "puzzle", "rocket", "star", "terminal", "wrench", "zap", "add", "remove", "delete", "edit", "refresh", "search", "settings", "check", "close", "info", "warning", "error", "open-external", "copy", "download", "upload", "play", "pause", "stop", "more", "expand", "collapse", "next", "filter", "branch", "file", "agent", "link" ] }, "tone": { "description": "Colour of the item. Defaults to `neutral`.", "x-orca-since": "1.4.248", "examples": [ "warning" ], "type": "string", "enum": [ "neutral", "accent", "success", "warning", "danger" ] }, "tooltip": { "description": "Shown on hover. Defaults to the plugin name.", "x-orca-since": "1.4.248", "type": "string", "maxLength": 256 }, "command": { "description": "Id of a command this plugin contributes in `contributes.commands`, run when the item is pressed.", "x-orca-since": "1.4.248", "examples": [ "guard.showLog" ], "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$" } }, "required": [ "id" ], "additionalProperties": false, "description": "An item in the status bar. Requires the `declarative` profile; a `trusted-worker` can change it with `statusBar.update`." }, "Capability": { "type": "object", "properties": { "kind": { "type": "string", "enum": [ "workspace:read", "workspace:write", "agent:read", "agent:launch", "terminal:send", "terminal:read", "notifications:show", "storage:own", "secrets:own", "settings:own", "appearance:write", "workspace:create", "automation:read", "automation:write", "history:read" ], "description": "Capability granted on user consent.", "x-orca-since": "1.4.160", "x-orca-enum-since": { "workspace:read": "1.4.160", "workspace:write": "1.4.248", "agent:read": "1.4.245", "agent:launch": "1.4.248", "terminal:send": "1.4.160", "terminal:read": "1.4.248", "notifications:show": "1.4.160", "storage:own": "1.4.245", "secrets:own": "1.4.245", "settings:own": "1.4.160", "appearance:write": "1.4.249", "workspace:create": "1.4.259", "automation:read": "1.4.259", "automation:write": "1.4.259", "history:read": "1.4.259" } } }, "required": [ "kind" ], "additionalProperties": false, "description": "A host API the plugin may call once the user consents." }, "Screenshot": { "type": "object", "properties": { "path": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$", "description": "Screenshot, 16:10 recommended (up to 2560×1600). PNG, JPEG, WEBP, static, at least 1280×800, at most 1536 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.", "x-orca-since": "1.4.245", "examples": [ "images/editor.png" ] }, "alt": { "type": "string", "minLength": 1, "maxLength": 160, "description": "What the image shows, for screen readers. Required.", "x-orca-since": "1.4.245", "examples": [ "The Dusk theme on a terminal" ] }, "caption": { "description": "Short caption under the screenshot.", "x-orca-since": "1.4.245", "examples": [ "Gleam in the editor" ], "type": "string", "minLength": 1, "maxLength": 120 }, "theme": { "description": "Show this screenshot only with a light or dark Orca theme.", "x-orca-since": "1.4.245", "type": "string", "enum": [ "light", "dark" ] } }, "required": [ "path", "alt" ], "additionalProperties": false, "description": "One screenshot of the plugin in use." } } }