Skip to content

Architecture Overview

Layer Technology Role
Frontend SolidJS + Kobalte + Vite UI (dashboard / settings / updates / licenses)
Backend Rust / Tauri v2 Media retrieval, Discord integration, settings management
Android native Kotlin Notification access, foreground service, JNI bridge
src/ Frontend (SolidJS)
components/ UI components (panels, cards, etc.)
locales/{ja,en}.json i18n strings (auto-selected from OS language at startup)
src-tauri/
src/
adb/ ADB client and dumpsys parser
apk_label/ App name resolution by pulling APKs (+disk cache)
artwork/ ArtworkResolver plugin group (Niconico, YouTube, etc.)
android/discord.rs C FFI wrapper for the Discord Social SDK
commands/app.rs IPC commands exposed to the frontend
tray.rs, config.rs ... Tray / settings / i18n / shutdown handling
gen/android/ Android project (Kotlin)
app/src/main/java/... MediaCollectorService (notification access) /
MediaInfoService (FGS) / MediaBridge (JNI) etc.
site/ Documentation site (Astro Starlight)
scripts/ Build helper scripts (license generation, etc.)
  • Desktop: the adb module parses dumpsys media_session → frontend fetches via the IPC command get_media_info every 5 seconds → updates Discord IPC only on change
  • Android: Kotlin-side events (notification posted/removed + a 30-second safety timer) flow into Rust through the JNI MediaBridge.updateMediaInfo and are delivered to the frontend as the Tauri event media-updated (normally event-driven, with a 30-second safety polling interval as backup)

Tauri commands callable from the frontend (commands/app.rs):

Command Environment Purpose
get_adb_status Desktop Get ADB connection status
get_media_info Common Get current media information
connect_discord / disconnect_discord Common Control the Discord connection
update_discord_presence Common Update Rich Presence
get_discord_status Common Get Discord connection status
get_rpc_enabled / set_rpc_enabled Android Persist the RPC toggle
get_settings / update_settings Common Read/write settings
list_media_apps Android (empty-array stub on desktop) List apps for the whitelist
get_notification_access_status / open_notification_access_settings Android (success-path stubs on desktop) Check & open notification access permission
get_signing_fingerprint Android (None on desktop) Get the APK signing fingerprint
check_android_update / download_android_update / install_android_update Android Check, download, and install Android updates
get_install_permission_status / open_install_permission_settings Android Check & open the unknown-apps install permission
  • adb_client — ADB protocol
  • discord-rich-presence — desktop Discord IPC
  • Discord Social SDK (Android) — not committed to the repository due to its terms; CI downloads it each time (see Release)

For design philosophy and implementation details, see also the comments in the source code.