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.
| Manifest | Scope | What users see | Risk | Enforced by | API |
|---|---|---|---|---|---|
"notifications": true | notifications | Shows notifications | low | app | nuvaka.ui.notify |
"background": true | background | Runs in the background (while the app is open) | low | app | required for entry.background |
"startup": true | startup | Starts when the app starts | low | app | — |
"clipboard": "write" | clipboard.write | Writes to the clipboard | medium | app | nuvaka.clipboard.writeText |
"clipboard": "read" | clipboard.read | Reads the clipboard | high | app | nuvaka.clipboard.readText |
"net": ["host.name", …] | net | Talks to these internet addresses | medium | app (proxy) | nuvaka.net.fetch |
"files": "read" | files.read | Reads files in folders you pick | high | app | nuvaka.files.folders/pick/list/readText/readBytes |
"files": "write" | files.write | Writes and deletes files in folders you pick | high | app | nuvaka.files.writeText/writeBytes/mkdir/remove |
"nuvaka.notes": "read" | nuvaka.notes.read | Reads your notes | high | server | nuvaka.notes.list/get |
"nuvaka.notes": "write" | nuvaka.notes.write | Edits and deletes your notes | high | server | nuvaka.notes.create/update/delete |
"nuvaka.cloud": "read" | nuvaka.cloud.read | Reads your Nuvaka files | high | server | nuvaka.cloud.roots/list/read |
"nuvaka.cloud": "write" | nuvaka.cloud.write | Writes and deletes your Nuvaka files | critical | server | nuvaka.cloud.upload/delete |
"nuvaka.clipboard": "read" | nuvaka.clipboard.read | Reads your clipboard pool | high | server | nuvaka.pool.list |
"nuvaka.clipboard": "write" | nuvaka.clipboard.write | Writes to your clipboard pool | medium | server | nuvaka.pool.add |
"nuvaka.friends": "read" | nuvaka.friends.read | Sees your friends list | medium | server | nuvaka.friends.list |
"nuvaka.mail": "read" | nuvaka.mail.read | Reads your mail | critical | server | nuvaka.mail.accounts/folders/messages/get |
"nuvaka.mail": "send" | nuvaka.mail.send | Sends mail as you | critical | server | nuvaka.mail.accounts/send |
"nuvaka.connections": "list" | nuvaka.connections.list | Sees names and addresses of your saved connections | medium | server | nuvaka.connections.list |
"nuvaka.connections": "secrets" | nuvaka.connections.secrets | Reads passwords and keys of your saved connections | critical | server | nuvaka.connections.list/secret |
"nuvaka.push": true | nuvaka.push | Sends notifications to all your devices | low | server | nuvaka.push |
(derived from shared.imports) | shared | Reads data shared by other extensions | medium | server | nuvaka.shared.get |
Notes on values
net: requests go through the app's proxy.httpsonly; 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,writealso covers reading; ask forreadif you only read.clipboardis this device's system clipboard;nuvaka.clipboardis the account's cross-device clipboard pool (nuvaka.poolin JS). For clipboard permissionswritedoes not cover reading.nuvaka.cloud: at install the user chooses which Nuvaka folders (or all) the extension can access; files outside are rejected without_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.pushandnotificationsshare the same notification limit.- Storage (
nuvaka.storage),nuvaka.info,nuvaka.me,nuvaka.settingsand the non-notification parts ofnuvaka.uineed 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.readnuvaka.mail.sendnuvaka.connections.secretsnuvaka.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 code | Permission needed |
|---|---|
nuvaka.files | files |
nuvaka.net | net |
nuvaka.clipboard | clipboard |
nuvaka.notes | nuvaka.notes |
nuvaka.cloud | nuvaka.cloud |
nuvaka.pool | nuvaka.clipboard |
nuvaka.friends | nuvaka.friends |
nuvaka.mail | nuvaka.mail |
nuvaka.connections | nuvaka.connections |
nuvaka.push | nuvaka.push |
nuvaka.shared | shared (shared.imports) |
nuvaka.ui.notify | notifications |
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