Skip to content

Permissions Reference

Apps declare permissions in the permissions array of their manifest.json. The shell enforces these at runtime.

PermissionConstantGrant LevelWhat It Unlocks
aiPermission.AIConsent requiredAI provider access: callAI(), streamAI(), getProvider(), getModel(), listProviders()
storage.kvPermission.STORAGE_KVAuto-grantedKey-value storage: set(), get(), delete(), keys(), clear()
storage.filesPermission.STORAGE_FILESConsent requiredFile system storage beyond the app sandbox
storage.dbPermission.STORAGE_DBConsent requiredSQLite database: run(), query(), transaction()
networkPermission.NETWORKConsent requiredExternal network requests
clipboardPermission.CLIPBOARDConsent requiredClipboard read/write access
notificationsPermission.NOTIFICATIONSConsent requiredDesktop notifications via notify()

Auto-granted permissions are available to every app without user interaction. Currently, only storage.kv is auto-granted — basic state persistence is considered essential for all apps.

Consent-required permissions have cost, privacy, or disruption implications:

  • ai — Makes API calls that cost money (the user’s API credits).
  • storage.db — Creates persistent SQLite databases with higher storage impact.
  • storage.files — Accesses files outside the app’s normal sandbox.
  • network — Can send data to external servers. Privacy implications.
  • clipboard — Can read potentially sensitive clipboard contents.
  • notifications — Can display desktop notifications that interrupt the user.
  • vibeDepot.ai.callAI()
  • vibeDepot.ai.streamAI()
  • vibeDepot.ai.getProvider()
  • vibeDepot.ai.getModel()
  • vibeDepot.ai.listProviders()
  • vibeDepot.storage.set()
  • vibeDepot.storage.get()
  • vibeDepot.storage.delete()
  • vibeDepot.storage.keys()
  • vibeDepot.storage.clear()
  • vibeDepot.db.run()
  • vibeDepot.db.query()
  • vibeDepot.db.transaction()

Methods requiring notifications permission

Section titled “Methods requiring notifications permission”
  • vibeDepot.shell.notify()
  • vibeDepot.shell.getAppInfo()
  • vibeDepot.shell.getVersion()
  • vibeDepot.shell.openExternal()
  • vibeDepot.shell.setTitle()
  • vibeDepot.shell.theme()

When an app calls a method without the required permission:

// DxError thrown:
{
code: 'PERMISSION_DENIED',
message: 'App "my-app" does not have "ai" permission',
suggestion: 'Add "ai" to the permissions array in your manifest.json'
}
{
"permissions": ["ai", "storage.kv", "storage.db", "notifications"]
}

Permissions are defined in packages/shared/src/permissions.ts.