Docs/Manifest Reference
Universal Developer

Manifest Reference

Manifest Reference

Schema

FieldTypeRequiredDescription
idstringReverse-domain unique ID
namestring or mapDisplay name, supports locales
descriptionstringShort summary
versionstringSemVer
sdkapinumberRecommendedSDK API version, format YYMMDD (e.g., 260215)
categorystringConditionalCategory id synced with Nexus (e.g., utilities, productivity) (required when sdkapi >= 260114)
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: 260215 (2026-02-15)
  • Not declared or below 251212: Permission checks are bypassed, but users will see a warning about legacy SDK
  • 251212 ~ 260113: Full permission enforcement enabled
  • Equal to or above 260114: Requires category for UI grouping (in addition to 251212 baseline)
  • Equal to or above 260215: Can use plugin SQLite SDK (usePluginSqlite)

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

EXAMPLE.JSON
"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
intelligence.basicLowBasic intelligence
intelligence.adminHighAdmin intelligence
intelligence.agentsHighIntelligence agents
storage.pluginLowPlugin storage (auto-granted)
storage.sharedMediumShared storage
storage.sqliteMediumPlugin SQLite database access
window.createLowCreate windows (auto-granted)
window.captureHighScreen capture

Example

EXAMPLE.JSON
{
  "id": "com.tuff.todo",
  "name": {
    "default": "Todo",
    "zh-CN": "Text"
  },
  "description": "Capture and sync todos",
  "version": "1.3.0",
  "sdkapi": 260215,
  "category": "utilities",
  "entry": "init/index.ts",
  "features": [
    {
      "type": "corebox",
      "id": "todo.new",
      "title": "Create Todo",
      "keywords": ["todo", "task"],
      "queryMode": "text"
    }
  ],
  "permissions": {
    "required": ["clipboard.read", "storage.sqlite"],
    "optional": ["storage.shared"]
  },
  "permissionReasons": {
    "clipboard.read": "Read todo content from clipboard",
    "storage.sqlite": "Store todo data in local SQLite"
  },
  "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.
Was this helpful?