Skip to content

Manifest field reference

Generated from schemas/plugin-v1.json ($id: https://appos.space/schemas/plugin-v1.json). Unknown top-level fields are rejected (additionalProperties: false).

Always required: id, name, version, runtime. Plugins with "runtime": "javascript" must also declare entrypoint.

FieldTypeRequiredDescription
$schemastringnoJSON Schema reference (optional, for editor autocomplete)
idstringyesReverse-domain identifier (e.g. com.community.myplugin) — Pattern: ^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)+$
namestringyesHuman-readable display name — Max length: 64
versionstringyesSemantic version (MAJOR.MINOR.PATCH) — Pattern: ^\d+\.\d+\.\d+$
runtimejavascript | core-swiftyesPlugin runtime. Third-party plugins use ‘javascript’; ‘core-swift’ is reserved for host-bundled core plugins.
entrypointstringnoPath to the compiled JS bundle (e.g. dist/main.js). Required for ‘javascript’ runtime; absent for ‘core-swift’.
minHostVersionstringnoMinimum AppOS host version required — Pattern: ^\d+\.\d+\.\d+$
authorstringnoPlugin author name
descriptionstringnoBrief description — Max length: 256
licensestringnoSPDX license identifier (e.g. MIT, Apache-2.0)
activationobjectno
permissionsarraynoRequired permission scopes. Each entry is a scope string (135 canonical scopes + legacy aliases + dynamic oauth.) or a {scope, reason} object.
shellCommandsarray of stringnoAllowed shell command names for shell.execute
shellDeniedPatternsarray of stringnoGlob patterns denied from shell CWD
networkDomainsarray of stringnoAllowed outbound domains for network.fetch
settingsarray of objectnoUser-configurable settings schema
dependenciesobjectnoDeclared dependencies on system binaries or other plugins
oauthobjectnoOAuth provider declarations
menubarobjectnoMenu bar NSStatusItem configuration
homepagestringnoURL to the plugin’s homepage or repository
categoriesarray of stringnoPlugin Store category tags
keywordsarray of stringnoSearch keywords for discoverability
repositorystringnoRepository URL
capabilitiesobjectnoDynamic capabilities dictionary
extensionPointsarray of objectnoExtension points declared by this plugin
dataContractsarray of objectnoData contracts declared by this plugin
extensionsarray of objectnoExtension contributions (fn-12 typed array) — the manifest-declarative delivery vehicle for core-plugin extension points (actions.definition, views.savedView, surfaces.contribution, sidecars.definition, notifications., input., ledger., llm., recipes/sequences definitions, clipboard EPs, scheduler.triggerKind/condition, entities.*)
shortcutsarray of objectnoManifest-declared keyboard shortcuts, auto-registered at activation (requires ui.shortcuts)
scopewindow | appnoPlugin scope: ‘window’ (per-window instance) or ‘app’ (single shared instance, default) — Default: "app"
isolationjscontext | xpcnoIsolation mechanism: ‘jscontext’ (in-process, default) or ‘xpc’ (reserved; parsed but not enforced) — Default: "jscontext"
allowedShellCommandsarray of stringnoAllowed shell commands for core-plugin shellExecute enforcement (core-swift only; absent/empty = deny-all)
FieldTypeRequiredDescription
eventsarray of onStartupyesWhen to activate (currently only onStartup)
FieldTypeRequiredDescription
keystringyes
labelstringyes
typebool | number | enum | stringyes
defaultanyno
optionsarrayno
minnumberno
maxnumberno
FieldTypeRequiredDescription
systemarray of objectnoSystem binary dependencies
pluginsarray of objectnoPlugin-to-plugin dependencies
FieldTypeRequiredDescription
namestringyesHuman-readable tool name (e.g. yt-dlp)
checkobjectyes
minVersionstringnoMinimum required version string
requiredbooleannoIf false, plugin activates without this dep — Default: true
installHintstringnoSuggested install command (e.g. brew install yt-dlp)
installUrlstringnoLink to installation documentation
descriptionstringnoWhat this dependency enables
FieldTypeRequiredDescription
commandstringyesBinary name to invoke (resolved via PATH)
argsarray of stringnoArguments passed to the command — Default: []
versionPatternstringnoRegex with one capture group for version extraction (optional — runtime uses fallback extraction when absent)
FieldTypeRequiredDescription
idstringyesDependency plugin ID (reverse-domain, allows hyphens) — Pattern: ^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)+$
minVersionstringnoMinimum version (semver) — Pattern: ^\d+\.\d+\.\d+$
requiredbooleannoDefault: true
FieldTypeRequiredDescription
providersarray of objectyes
FieldTypeRequiredDescription
idstringyes
scopesarray of stringyes
reasonstringno
FieldTypeRequiredDescription
iconstringyesSF Symbol name
labelstringno
globalShortcutstringnoGlobal keyboard shortcut
FieldTypeRequiredDescription
extensionPointstringyesQualified extension point id (e.g. ‘space.appos.core.notifications:channel’)
FieldTypeRequiredDescription
commandIdstringyesShort command ID (auto-prefixed with ‘{pluginId}.’)
keysstringyesShortcut key string (e.g. ‘cmd+shift+t’)
whenstringnoOptional condition string

The permissions array accepts bare scope strings or { scope, reason } objects (the optional reason, max 120 chars, is shown in the approval sheet). The full scope catalog is on the permission scopes page.