Manifest Reference

Schema

FieldTypeRequiredDescription
idstringReverse-domain unique ID
namestring or mapDisplay name, supports locales
descriptionstringShort summary
versionstringSemVer
sdkapinumberRecommendedSDK API version, format YYMMDD (e.g., 251212)
entrystringPath to init entry
preloadstringRenderer preload file
dev.enablebooleanEnable hot reload
permissionsobjectPermission declarations, see below
permissionReasonsobjectReasons for permissions
acceptedInputTypesstringtext, image, files, html
featuresobjectCoreBox commands, widgets, workflow nodes

SDK API Version (sdkapi)

The sdkapi field declares the SDK API version the plugin is compatible with. Format is YYMMDD (year-month-day).

  • Current version: 251212 (2025-12-12)
  • Not declared or below 251212: Permission checks are bypassed, but users will see a warning about legacy SDK
  • Equal to or above 251212: Full permission enforcement enabled

New plugins should always declare the latest sdkapi version for complete permission protection.

Permissions

The permission system controls plugin access to sensitive APIs. See Permission API docs for details.

Declaration Format

"permissions": {
  "required": ["clipboard.read", "network.internet"],
  "optional": ["storage.shared"]
},
"permissionReasons": {
  "clipboard.read": "Read text from clipboard for translation",
  "network.internet": "Connect to translation API"
}

Available Permissions

Permission IDRiskDescription
fs.readMediumRead files
fs.writeHighWrite files
fs.executeHighExecute files
clipboard.readMediumRead clipboard
clipboard.writeLowWrite clipboard (auto-granted)
network.localLowLocal network
network.internetMediumInternet access
network.downloadMediumDownload files
system.shellHighExecute commands
system.notificationLowSystem notifications
system.trayMediumSystem tray
ai.basicLowBasic AI
ai.advancedMediumAdvanced AI
ai.agentsHighAI Agents
storage.pluginLowPlugin storage (auto-granted)
storage.sharedMediumShared storage
window.createLowCreate windows (auto-granted)
window.captureHighScreen capture

Example

{
  "id": "com.tuff.todo",
  "name": {
    "default": "Todo",
    "zh-CN": "待办"
  },
  "description": "Capture and sync todos",
  "version": "1.3.0",
  "sdkapi": 251212,
  "entry": "init/index.ts",
  "features": [
    {
      "type": "corebox",
      "id": "todo.new",
      "title": "Create Todo",
      "keywords": ["todo", "task"],
      "queryMode": "text"
    }
  ],
  "permissions": {
    "required": ["clipboard.read"],
    "optional": ["storage.shared"]
  },
  "permissionReasons": {
    "clipboard.read": "Read todo content from clipboard"
  },
  "acceptedInputTypes": ["text", "files"]
}

Validation Checklist

  • id must be unique and alphanumeric with dots.
  • version follows major.minor.patch for update ordering.
  • Declaring network requires whitelisting external domains.

Frequent Issues

IssueFix
Missing entrySet entry to init/index.ts and ensure the file exists.
Excessive permissionsRequest only what you truly need, especially for v1.
Keyword collisionsNamespace features like todo.* to avoid conflicts.