Permissions & Security
Plugins request only the capabilities their feature needs. Users review the publisher, requested permissions and compatibility before enabling a plugin; new permissions require a new grant. A community bundle's version, artifact or descriptor digest change also invalidates its previous grants. Disablement or revocation is effective at the host boundary and removes the corresponding contribution.
Plugin API v1 permissions
| Permission | Host capability |
|---|---|
library.read | Safe library summaries, never file paths. |
library.metadata.read | Safe metadata needed for enrichment. |
library.folders.read | Configured source folders and the library's folder structure, never absolute host file paths. |
metadata.propose | Field-level, user-reviewable metadata proposals. |
library.organize.propose | A computed reorganization/rename plan for user review. The host is the only party that ever moves or renames a file — this permission never grants filesystem access, and there is no matching "apply" permission yet. |
playback.read | Current playback state without playback control. |
network.connect, network.fetch | Restricted, host-mediated network access. |
storage.private | Small namespaced plugin state subject to a quota. |
jobs.schedule | Host-owned bounded background jobs. |
ui.contribute | Declarative UI contributions. |
diagnostics.write | Bounded structured diagnostics. |
network.iroh:music-hub-network and
storage.addon:music-hub-network are reserved for the bundled Tape Music Hub
Network core add-on. They are not in the community-bundle allowlist.
library.organize.propose is declare-only in v0.1: no Host API method is
wired to it yet, so a plugin cannot act on it until a future release adds one.
Requesting it today only reserves the intent for review.
The host denies a call when the plugin is disabled, the permission is not granted, input fails validation, or a quota, rate limit or timeout is exceeded. Plugin code never receives raw database handles, local file paths, Node/Electron globals, shell access, app configuration, service credentials, pairing secrets or mobile bearer tokens.
Plugins must never auto-apply remote metadata. Return proposals with source and evidence; the host requires an explicit per-field decision, records provenance, and can provide undo where the underlying host operation supports it.