Skip to content

Configuring Permissions

Every VibeDepot app must declare the permissions it needs in manifest.json. The shell enforces these permissions at runtime — if your app tries to use a Bridge API method without the required permission, the call fails with a PERMISSION_DENIED error.

Add permissions to the permissions array in your manifest:

{
"permissions": ["ai", "storage.kv", "storage.db", "notifications"]
}

These permissions are granted to every app automatically:

PermissionWhat It Unlocks
storage.kvKey-value storage (vibeDepot.storage.*)

These permissions require the user to grant access:

PermissionWhat It Unlocks
aiAI provider access (vibeDepot.ai.*)
storage.filesFile system storage
storage.dbSQLite database (vibeDepot.db.*)
networkExternal network requests
clipboardClipboard read/write
notificationsDesktop notifications (vibeDepot.shell.notify())

Request the minimum set of permissions your app actually uses. Reviewers check that declared permissions match actual usage during the publishing process.

Even though it’s auto-granted, declaring storage.kv explicitly makes your manifest self-documenting:

{
"permissions": ["ai", "storage.kv"]
}

The CLI validates that your declared permissions match your actual code usage:

Terminal window
vibedepot validate

The permission checker scans your source files for Bridge API calls and reports:

  • Undeclared — You’re using an API that requires a permission you haven’t declared.
  • Unused — You’ve declared a permission but don’t appear to use it.

The publish command also auto-detects and adds missing permissions before bundling.

If your app calls a Bridge API method without the required permission:

// App manifest has permissions: ["storage.kv"]
// But tries to use AI without declaring "ai"
try {
await window.vibeDepot.ai.callAI({ messages: [...] });
} catch (err) {
// err.code === 'PERMISSION_DENIED'
// err.message === 'App "my-app" does not have "ai" permission'
// err.suggestion === 'Add "ai" to the permissions array in your manifest.json'
}

When developing with sideloading, VibeDepot shows a visual warning banner at the top of your app window when a permission is missing, instead of silently failing. This helps you catch issues during development.

PermissionBridge API Methods
aivibeDepot.ai.callAI(), vibeDepot.ai.streamAI(), vibeDepot.ai.getProvider(), vibeDepot.ai.getModel(), vibeDepot.ai.listProviders()
storage.kvvibeDepot.storage.set(), .get(), .delete(), .keys(), .clear()
storage.dbvibeDepot.db.run(), .query(), .transaction()
notificationsvibeDepot.shell.notify()

The following Bridge methods require no permission and are always available:

  • vibeDepot.shell.getAppInfo()
  • vibeDepot.shell.getVersion()
  • vibeDepot.shell.openExternal()
  • vibeDepot.shell.setTitle()
  • vibeDepot.shell.theme()