{ "$schema": "https://raw.githubusercontent.com/navidrome/navidrome/refs/heads/master/plugins/manifest-schema.json", "name": "Discord Rich Presence", "author": "Navidrome Team", "version": "0.1.0", "description": "Discord Rich Presence integration for Navidrome", "website": "https://github.com/navidrome/discord-rich-presence-plugin", "permissions": { "users": { "reason": "To process scrobbles on behalf of users" }, "http": { "reason": "To communicate with Discord API for gateway discovery and image uploads", "requiredHosts": ["discord.com"] }, "websocket": { "reason": "To maintain real-time connection with Discord gateway", "requiredHosts": ["gateway.discord.gg"] }, "cache": { "reason": "To store connection state and sequence numbers" }, "scheduler": { "reason": "To schedule heartbeat messages and activity clearing" }, "artwork": { "reason": "To get track artwork URLs for rich presence display" } }, "config": { "schema": { "type": "object", "properties": { "clientid": { "type": "string", "title": "Discord Application Client ID", "description": "The Client ID from your Discord Developer Application. Create one at https://discord.com/developers/applications", "minLength": 17, "maxLength": 20, "pattern": "^[0-9]+$" }, "users": { "type": "array", "title": "User Tokens", "description": "Discord tokens for each Navidrome user. WARNING: Store tokens securely!", "minItems": 1, "items": { "type": "object", "properties": { "username": { "type": "string", "title": "Navidrome Username", "description": "The Navidrome username to associate with this Discord token", "minLength": 1 }, "token": { "type": "string", "title": "Discord Token", "description": "The user's Discord token (keep this secret!)", "minLength": 1 } }, "required": ["username", "token"] } } }, "required": ["clientid", "users"] }, "uiSchema": { "type": "VerticalLayout", "elements": [ { "type": "Control", "scope": "#/properties/clientid" }, { "type": "Control", "scope": "#/properties/users", "options": { "elementLabelProp": "username", "detail": { "type": "HorizontalLayout", "elements": [ { "type": "Control", "scope": "#/properties/username" }, { "type": "Control", "scope": "#/properties/token", "options": { "format": "password" } } ] } } } ] } } }