Capabilities Reference

Capabilities are the permission contract between your plugin and the tenants who install it. Declare every capability you need. In V2 (isolated-vm runtime), undeclared access is blocked at the sandbox boundary. Over-declaring — claiming capabilities you don't use — is a review rejection reason and reduces trust with tenants.

Risk levels

Low risk — no sensitive data, no external calls. Implicit consent on install.

Medium risk — sensitive data access or external network calls. Consent dialog shown to tenant before install.

High risk — destructive or wide-scope operations. Consent dialog with explicit warning. Review requires written justification.

All capabilities

CapabilityRiskGrants
content:readLowRead posts, pages, media metadata (title, slug, status, content)
content:writeMediumCreate and update posts, pages
content:deleteHighPermanently delete posts and pages
schema:readLowView collection schemas and field definitions
schema:modifyHighAdd custom fields and collections to the tenant database
ui:sidebarLowInject a sidebar widget in the admin dashboard
ui:post_editorLowAdd a toolbar button or side panel to the post editor
ui:dashboardLowAdd a card to the admin dashboard overview
ui:settingsLowAdd a section under /admin/settings
email:sendMediumSend transactional emails via Resend using the tenant's sender domain
network:fetchMediumMake HTTP requests to domains declared in network_access.allowedDomains
members:readMediumRead member emails, display names, and subscription tiers
members:writeHighCreate, update, and manage member records
commerce:readLowRead product catalog and order records
commerce:writeHighCreate and update products and process orders

Minimal capability principle

// Correct — declare only what you actually use
{
  "capabilities": ["members:read", "network:fetch"]
}

// Wrong — grabbing extra permissions "just in case"
{
  "capabilities": ["content:read", "content:write", "content:delete",
                   "members:read", "members:write", "network:fetch",
                   "email:send", "schema:read"]
}