Skip to main content
The manifest is a strict JSON document; unrecognized fields are rejected.

Identity

  • pluginId is the immutable identity.
  • The runtime action identity is the combination pluginId + local action id.
  • Action IDs are unique within the same manifest.
  • The runtime cannot change identity through a request payload.

Runtime

Setting keys use lower camelCase. secret and oauth fields cannot carry a default value; raw credentials are not written into normal settings or the manifest. The manifest should declare only the permission descriptors it needs. The runtime grant set is computed as declared ∩ user-granted.

Platforms and system declarations

platforms lists the desktop platforms the plugin runs on: windows, macos, linux. Without the field there is no platform restriction. evox-plugin pack also writes this list to the package root manifest. A trusted-node (T1) plugin declares the programs it runs and the system paths it touches:
  • command is a bare program name looked up on PATH. Paths, arguments and shell syntax are rejected.
  • path is absolute (/…), home-relative (~/…) or relative to a Windows environment variable (%APPDATA%\…); .. segments are rejected. * matches within one segment; a path ending in / covers everything below it.
  • access is read or write.
  • A sandbox-js (T2) plugin cannot declare commands or paths; T2 has no such access at all.
Declarations are not enforced at runtime. T1 is not a sandbox and a declaration does not restrict the code. evox-plugin publish-check compares the declarations with the bundle (see Developer CLI). Market upload for T1 plugins is still closed (TRUSTED_PLUGIN_UPLOAD_NOT_READY).

Icon (glyph)

The plugin and each action can choose their own icon. If none is declared, both show the default code icon; an action without a glyph falls back to the plugin glyph.
The value is a Hugeicons name and is chosen from a fixed list. Free-form names are not accepted: the host statically imports glyphs one by one in both the desktop rasterizer and the interface, and bundling the whole icon set would exceed the renderer budget. A name that is not on the list gets the manifest rejected.
The full list of valid names is in PLUGIN_GLYPH_NAMES (@evox/plugin-protocol). Adding a name to the list is a host-side change; if the glyph you need is missing, open a request.

Conditional setting visibility (visibleWhen)

A setting can be shown only while another setting has a certain value.
  • key must point to another setting in the same settingsSchema. A reference to a key that does not exist, or to the field itself, gets the manifest rejected — both would silently hide the field forever.
  • The comparison is case-insensitive.
  • If the referenced setting’s value is empty, that setting’s default is used; in the example above, on a key that was never touched preset defaults to tests, so the prompt field starts hidden.
  • The saved value of a hidden field is not deleted; when the user switches back to the option that satisfies the condition, they find the old value.