Discord Rich Presence for Plex (DRPP) is an application that displays your Plex status on Discord using Rich Presence.
- Automatically displays your Plex playback activity (movies, TV shows, music, clips) on Discord with poster artwork, progress, buttons, external links, and metadata.
- Web-based user interface for managing all settings, interactive Plex authentication, and viewing live logs.
- Ability to customise all fields shown in your Rich Presence for each media type using template strings. [Example]
- Support for Windows, Linux (including Docker), and macOS.
If you're on Linux, you can run DRPP with Docker.
- Download the latest release for your platform and extract it.
- Run the executable file.
- Open the web interface to configure DRPP:
- Click the DRPP icon in your system tray and select Web UI, or
- Navigate to http://localhost:8040, or
- Run the executable file again.
- Click Add User and complete the interactive Plex authentication flow.
On Windows and Linux, DRPP has an icon in the system tray. Clicking this allows you to launch the web interface in your default browser.
Information about each config property and templating is available in the web interface.
The web interface is meant for local access only and must not be exposed to the internet. Even if you expose it, all connections from external networks are blocked by default.
Discord must be running on the same machine as DRPP.
The "Share my activity" setting must be enabled in Discord for Rich Presence to work.
Navigate to Discord Settings → Activity Settings → Activity Privacy to enable it.
| Flag | Environment Variable | Default Value | Description |
|---|---|---|---|
--data-dir |
DRPP_DATA_DIR |
drpp in user config directoryUser config directory path%APPDATA% on Windows$XDG_CONFIG_HOME or $HOME/.config on Linux$HOME/Library/Application Support on macOS |
Path to data directory |
--config-file |
DRPP_CONFIG_FILE |
config.yml in data directory |
Path to config file |
--cache-file |
DRPP_CACHE_FILE |
cache.json in data directory |
Path to cache file |
--log-file |
DRPP_LOG_FILE |
Path to log file | |
--disable-web-ui |
DRPP_DISABLE_WEB_UI |
false |
Disable web interface |
--disable-systray |
DRPP_DISABLE_SYSTRAY |
false |
Disable system tray icon |
Environment variables take precedence over default values but are overridden by explicitly passed flags.
ghcr.io/phin05/discord-rich-presence-plex
services:
drpp:
container_name: drpp
image: ghcr.io/phin05/discord-rich-presence-plex:latest
restart: unless-stopped
ports:
- 127.0.0.1:8040:8040
environment:
DRPP_UID: 1000
DRPP_GID: 1000
volumes:
- ./data:/app/data
- /run/user/1000:/run/appOnce DRPP is running, navigate to http://localhost:8040. Click Add User and complete the interactive Plex authentication flow.
Make sure to bind the port only to 127.0.0.1 as shown above.
| Path | Purpose |
|---|---|
/app/data |
Directory for persistent config and cache storage |
/run/app |
Discord's runtime directory for inter-process communication |
Discord's runtime directory is determined by the first set environment variable from the list below, checked in the environment where Discord is running:
XDG_RUNTIME_DIRTMPDIRTMPTEMP
If none are set, /tmp is used.
For example, if XDG_RUNTIME_DIR is /run/user/1000, mount that directory into the container at /run/app.
| Variable | Description |
|---|---|
DRPP_UID |
UID of the user running Discord (find by running id) |
DRPP_GID |
GID of the user running Discord (find by running id) |
DRPP_NO_RUNTIME_DIR_CHOWN |
Set to true to skip ownership change of /run/app |
When both DRPP_UID and DRPP_GID are set, DRPP changes ownership of /run/app and /app to match the specified UID and GID to prevent permission issues.
To run Discord in a container as well, mount a shared directory from the host into both the Discord container (as Discord's runtime directory) and the DRPP container (at /run/app). Ensure that the shared directory is owned by the user the containerised Discord process runs as.
Example
Docker Compose example using kasmweb/discord
services:
kasmweb-discord:
container_name: kasmweb-discord
image: kasmweb/discord:1.14.0
restart: unless-stopped
ports:
- 127.0.0.1:6901:6901
shm_size: 512m
environment:
VNC_PW: password
XDG_RUNTIME_DIR: /run/user/1000
volumes:
- ./discord:/home/kasm-user/.config/discord
- ./runtime:/run/user/1000
user: 0:0
entrypoint: sh -c "chown -R kasm-user:kasm-user /home/kasm-user && chmod 700 /run/user/1000 && chown -R kasm-user:kasm-user /run/user/1000 && su kasm-user -c '/dockerstartup/kasm_default_profile.sh /dockerstartup/vnc_startup.sh /dockerstartup/kasm_startup.sh'"
drpp:
container_name: drpp
image: ghcr.io/phin05/discord-rich-presence-plex:latest
restart: unless-stopped
ports:
- 127.0.0.1:8040:8040
volumes:
- ./data:/app/data
- ./runtime:/run/app:ro
depends_on:
- kasmweb-discordDRPP's container image is Linux-based. Docker uses virtualisation to run Linux containers on Windows and macOS. In such cases, for DRPP to communicate with Discord, Discord needs to run in a Linux container as well, as per the instructions above.
DRPP downloads poster images from Plex and uploads them to an external image host for displaying in Discord. The following providers are available:
DRPP is written in Go, and unfortunately, antivirus programs frequently misidentify compiled Go binaries.
This issue is directly addressed in Go's official documentation:
Why does my virus-scanning software think my Go distribution or compiled binary is infected?
This is a common occurrence, especially on Windows machines, and is almost always a false positive. Commercial virus scanning programs are often confused by the structure of Go binaries, which they don’t see as often as those compiled from other languages.
In any case, if you believe the report is in error, please report a bug to the supplier of your virus scanner. Maybe in time virus scanners can learn to understand Go programs.
If you encounter this false positive issue, add an exception for DRPP's executable in your antivirus settings.
If you'd like to verify the safety of DRPP, everything is fully transparent:
- You can inspect the complete source code in this repository.
- The released executables are built automatically using GitHub Actions. [Workflow Runs]
- GitHub generates attestations to prove that the released executables are built using the exact code and automated workflow you see in this repository. [Attestations]