Skip to main content

Capabilities

Capabilities protect privileged app surfaces. A plugin must declare a capability in its manifest and the user must grant it before the runtime allows the corresponding API call.

CapabilityAPI areasNotes
profile.readprofile.getCurrent()Reads the current user.
profile.writeprofile.update(), profile.updateAvatar()Updates local profile fields and avatar metadata.
users.readusers.getCurrent(), users.list(), users.readMembers()Reads users and server members.
users.manageusers.kick(), users.ban(), server.registerPluginUser()Can create plugin users and moderate members.
roles.readroles.list()Reads server roles.
roles.manageroles.setAssignments(), users.setRole()Changes role assignments or user roles.
messages.readmessages.readCurrent(), message bus latest snapshotsReads current channel messages.
messages.sendmessages.send(), messages.sendAsPluginUser()Sends messages as the current user or registered plugin user.
messages.editOwnmessages.edit()Edits plugin-owned messages.
messages.deleteOwnmessages.delete()Deletes plugin-owned messages.
messages.moderatemessages.moderateDelete()Moderation delete path.
messages.syncmessages.sync(), messages.import(), attachments.import()Syncs message arrays, imports historical messages locally, or imports files for those messages.
channels.readchannels.list(), channels.select()Reads and selects channels.
channels.managechannels.addTextChannel(), channels.addAudioChannel(), channels.addVideoChannel(), channels.remove(), channels.rename()Mutates channel or channel-section state.
server.readserver.getCurrent()Reads active server.
server.manageserver.updateIcon(), server.updatePermissions(), server.updateSettings()Updates server icon, permissions, or settings. server.updateIcon() resolves when the local icon update has been persisted or rejects if the current user is not allowed to manage the server icon.
p2p.datap2p.connectedPeers(), p2p.broadcastData(), p2p.sendData()Uses plugin peer data paths.
p2p.mediaReserved peer media features.Included for media-facing plugins.
media.playAudiomedia.playAudioClip()Plays an audio URL locally.
media.addAudioStreammedia.addCustomAudioStream()Adds a custom stream to voice handling.
media.addVideoStreammedia.addCustomVideoStream()Registers custom video stream contribution.
audio.volumemedia.setInputVolume(), media.setOutputVolume()Adjusts local voice volume.
audio.effectsReserved audio effect features.Included for audio processing plugins.
ui.settingsui.registerSettingsPage()Adds settings pages.
ui.pagesui.registerAppPage(), ui.registerComposerAction(), ui.registerProfileAction(), ui.registerToolbarAction()Adds app pages and action entry points, including View plugins menu actions.
ui.sidePanelui.registerSidePanel()Adds side panels.
ui.channelsSectionui.registerChannelSection()Adds channel sections.
ui.embedsui.registerEmbedRenderer()Renders custom embeds.
ui.domui.mountElement()Mounts plugin-owned DOM into app targets.
storage.localstorage.*, clientData.*Reads and writes plugin-local data.
storage.serverData.readserverData.read()Reads local per-user/per-server plugin data.
storage.serverData.writeserverData.write(), serverData.remove()Writes or removes local per-user/per-server plugin data.
events.server.publishevents.publishServer()Publishes declared server plugin events.
events.server.subscribeevents.subscribeServer()Subscribes to declared server plugin events.
events.p2p.publishevents.publishP2p(), messageBus.publish(), messageBus.sendLatestMessages()Publishes declared P2P/plugin bus events.
events.p2p.subscribeevents.subscribeP2p(), messageBus.subscribe()Subscribes to declared P2P/plugin bus events.

Request the fewest capabilities possible. Separate broad features into optional plugin modules when a single plugin would otherwise need many unrelated grants.