Skip to content

How It Works

This page explains the flow from media detection to display in Discord, and what data is sent to external services.

【Desktop version (Windows)】
App in WSA ──(ADB / 127.0.0.1:58526)──▶ WSA RPC Bridge ──IPC──▶ Discord client
dumpsys every 5 seconds │
└─ App name resolution (APK pull + cache)
Thumbnail resolution (supported apps only)
【Android version】
Music app's MediaSession ──▶ NotificationListenerService ──JNI▶ Rust ──Discord Social SDK──▶ Discord app
(notification access) On-device only, event-driven
  1. ADB connection — Connects to the local ADB server (127.0.0.1:5037) targeting 127.0.0.1:58526, which WSA’s developer mode exposes. All communication stays within the same PC
  2. Media retrieval — Runs adb shell dumpsys media_session every 5 seconds and parses track title, artist, playback state, and playback position from active sessions
  3. App name resolution — The display name of the playing app is resolved by pulling its APK over ADB and parsing it, cached in %LOCALAPPDATA%\wsa-rpc-bridge\ApkCache
  4. Send to Discord — Only when detected content changes, connects to a logged-in Discord client via IPC and updates Rich Presence
  1. Media session monitoring — Uses notification access permission (NotificationListenerService) to obtain active sessions from MediaSessionManager. Only whitelisted apps are targeted, preferring sessions that are actively playing
  2. On-device processing — Retrieved information is passed to the Rust side via JNI and delivered to the UI as events (normally event-driven, with a 30-second safety polling interval as backup)
  3. Keep-alive — A foreground service (type mediaPlayback) keeps the process alive. The persistent notification can be toggled in settings
  4. Send to Discord — Connects directly to the Discord app on the device using the Discord Social SDK (bundled library) and updates Rich Presence. You never log in to Discord from this app

Only when Rich Presence is enabled is the following sent:

Item Content
Track title Shown as the details line
Artist name Shown as the thumbnail image caption
Playing app name Shown as the player name
Playback position & duration Shown as an elapsed-time bar (timestamps)
Thumbnail image URL Supported apps only (see below)
  • Album names are detected but not sent to Discord (used only for duplicate detection and the persistent notification)
  • Displayed content follows Discord’s specifications and may also be visible to other users such as friends

Through the plugin structure for supported apps (ArtworkResolver), the thumbnail URL is resolved depending on the playing app.

  • Currently supported:
    • Vocalo Collection (jp.nicovideo.nicobox) — sends the track title to Niconico’s search API and retrieves the thumbnail URL of the matching video
    • YouTube / YouTube Music family (com.google.android.youtube, com.google.android.apps.youtube.music, app.morphe.android.youtube, app.morphe.android.apps.youtube.music) — sends search queries derived from the title and artist names to YouTube’s search API (www.youtube.com/youtubei/v1/search) and retrieves the thumbnail URL (i.ytimg.com) of the matching video
  • The image itself is never downloaded or saved; only the URL is held temporarily in memory and passed to Discord
  • This request occurs only while a supported app is playing; details are described in the Privacy Policy
Data Windows Android
Settings %APPDATA%\wsa-rpc-bridge\config.json Internal storage
Whitelist ― (feature not present; all sessions are targeted) Internal storage
APK name resolution cache %LOCALAPPDATA%\wsa-rpc-bridge\ApkCache ―
Operation logs %LOCALAPPDATA%\com.wsarpcbridge.app\logs (rust.log / webview.log) App internal storage (files/logs)

There is no telemetry, automatic crash reporting, or advertising.