Nuvaka › Developer docs › Permissions

Permissions reference

In the manifest each permission is written as { "<permission>": <value>, "reason": { "tr": "…", "en": "…" } }. The texts below are what users see on the install screen and in the Store; the risk classes match the server's list.

Full list

Scope is the flat name of the permission: nuvaka.info().grants, the permission field of errors and the release record use these names.

ManifestScopeWhat users seeRiskEnforced byAPI
"notifications": truenotificationsShows notificationslowappnuvaka.ui.notify
"background": truebackgroundRuns in the background (while the app is open)lowapprequired for entry.background
"startup": truestartupStarts when the app startslowapp—
"clipboard": "write"clipboard.writeWrites to the clipboardmediumappnuvaka.clipboard.writeText
"clipboard": "read"clipboard.readReads the clipboardhighappnuvaka.clipboard.readText
"net": ["host.name", …]netTalks to these internet addressesmediumapp (proxy)nuvaka.net.fetch
"files": "read"files.readReads files in folders you pickhighappnuvaka.files.folders/pick/list/readText/readBytes
"files": "write"files.writeWrites and deletes files in folders you pickhighappnuvaka.files.writeText/writeBytes/mkdir/remove
"nuvaka.notes": "read"nuvaka.notes.readReads your noteshighservernuvaka.notes.list/get
"nuvaka.notes": "write"nuvaka.notes.writeEdits and deletes your noteshighservernuvaka.notes.create/update/delete
"nuvaka.cloud": "read"nuvaka.cloud.readReads your Nuvaka fileshighservernuvaka.cloud.roots/list/read
"nuvaka.cloud": "write"nuvaka.cloud.writeWrites and deletes your Nuvaka filescriticalservernuvaka.cloud.upload/delete
"nuvaka.clipboard": "read"nuvaka.clipboard.readReads your clipboard poolhighservernuvaka.pool.list
"nuvaka.clipboard": "write"nuvaka.clipboard.writeWrites to your clipboard poolmediumservernuvaka.pool.add
"nuvaka.friends": "read"nuvaka.friends.readSees your friends listmediumservernuvaka.friends.list
"nuvaka.mail": "read"nuvaka.mail.readReads your mailcriticalservernuvaka.mail.accounts/folders/messages/get
"nuvaka.mail": "send"nuvaka.mail.sendSends mail as youcriticalservernuvaka.mail.accounts/send
"nuvaka.connections": "list"nuvaka.connections.listSees names and addresses of your saved connectionsmediumservernuvaka.connections.list
"nuvaka.connections": "secrets"nuvaka.connections.secretsReads passwords and keys of your saved connectionscriticalservernuvaka.connections.list/secret
"nuvaka.push": truenuvaka.pushSends notifications to all your deviceslowservernuvaka.push
(derived from shared.imports)sharedReads data shared by other extensionsmediumservernuvaka.shared.get

Notes on values

  • net: requests go through the app's proxy. https only; only the listed full host names; at most 20 names. The proxy resolves DNS itself and rejects private network, loopback, link-local, CGNAT and multicast addresses (against DNS rebinding). At most 5 redirects, and only to allowed names.
  • files: only folders the user picks (nuvaka.files.pick()). The pick is per device. In the app, write also covers reading; ask for read if you only read.
  • clipboard is this device's system clipboard; nuvaka.clipboard is the account's cross-device clipboard pool (nuvaka.pool in JS). For clipboard permissions write does not cover reading.
  • nuvaka.cloud: at install the user chooses which Nuvaka folders (or all) the extension can access; files outside are rejected with out_of_scope.
  • nuvaka.friends: username and friendship date only.
  • nuvaka.connections: list: name, type and address details of connections (host, port, username, database…); password and key fields are stripped.
  • nuvaka.push and notifications share the same notification limit.
  • Storage (nuvaka.storage), nuvaka.info, nuvaka.me, nuvaka.settings and the non-notification parts of nuvaka.ui need no permission.

Critical permissions

These critical scopes are confirmed again on every use even when granted at install; there is no permanent approval (only this time / 15 minutes / 1 hour):

  • nuvaka.mail.read
  • nuvaka.mail.send
  • nuvaka.connections.secrets
  • nuvaka.cloud.write

Details: Critical confirmation.

Dangerous pairs

If one of these reading permissions is requested together with net, the app shows an extra warning at install, because the extension could send what it reads to the internet:

files.read, nuvaka.cloud.read, nuvaka.notes.read, nuvaka.mail.read, nuvaka.connections.secrets, clipboard.read, nuvaka.clipboard.read

Example warning: "This extension reads your notes and can send them to: api.example.com". Avoid these pairs if you can; if you need one, explain in the reason why.

Code and permission matching

The package scan compares nuvaka.<name> uses in code with the permissions: using a namespace without its permission rejects the package; a permission that never appears in code produces a warning.

In codePermission needed
nuvaka.filesfiles
nuvaka.netnet
nuvaka.clipboardclipboard
nuvaka.notesnuvaka.notes
nuvaka.cloudnuvaka.cloud
nuvaka.poolnuvaka.clipboard
nuvaka.friendsnuvaka.friends
nuvaka.mailnuvaka.mail
nuvaka.connectionsnuvaka.connections
nuvaka.pushnuvaka.push
nuvaka.sharedshared (shared.imports)
nuvaka.ui.notifynotifications

The scan looks for nuvaka.notes, nuvaka["notes"] and const { notes } = nuvaka in all .js, .mjs and .html files, including comments and HTML text. The real boundary is still the permission check at run time.

Errors

A call without permission fails with code: "permission_required" and the missing scope (permission: "files.write"). A denied critical confirmation gives code: "permission_denied".

Nuvaka Apps API v1 · last updated 2026-09-27