emulnk

Project Url: EmuLnk/emulnk
Introduction: Emulator companion app that turns your second screen into a themed dashboard, built for dual-display handhelds
More: Author   ReportBugs   
Tags:

EmuLnk

The DS experience, for every emulator.
Show live game data on your second screen, or on top of the game.

Release   Android 13+   Kotlin   Downloads Discord

Get it on Obtainium


EmuLnk connects to emulators over UDP, reads game memory in real time, and renders it as themed HTML pages. It supports three modes: full-screen dashboards on a second screen, floating overlay widgets on top of the game, or both at once (bundle). Themes are HTML/CSS/JS WebViews driven by live data from JSON profiles. Themes can also write back to game memory, run macros, play sounds, and trigger haptic feedback.

Screenshots coming soon

Supported Emulators

Emulator Systems Fork
RetroArch SNES, Genesis, NES, GB, GBC, GBA, PS1, N64 retroarch-lnk
Dolphin GameCube, Wii dolphin-lnk
PPSSPP PSP ppsspp-lnk
melonDS NDS, DSi melonds-lnk
Azahar 3DS azahar-lnk

[!NOTE] Each emulator fork adds the EmuLnk binary UDP protocol. Install the fork alongside EmuLnk to use it.

How It Works

flowchart TB
    subgraph S1["Screen 1"]
        EMU["Emulator + Overlay Widgets"]
    end

    subgraph BG[" "]
        APP["EmuLnk App"]
    end

    subgraph S2["Screen 2"]
        THEME["Theme Dashboard"]
    end

    EMU -- "identity · UDP" --> APP
    APP -- "memory read · UDP" --> EMU
    APP -- "live data · JS Bridge" --> THEME

    style S1 fill:#1a1730,stroke:#B47CFF,color:#B47CFF
    style S2 fill:#1a1730,stroke:#00E5FF,color:#00E5FF
    style BG fill:none,stroke:none
    style EMU fill:#252142,stroke:#B47CFF,color:#e0e0e0
    style APP fill:#252142,stroke:#B47CFF,color:#e0e0e0
    style THEME fill:#252142,stroke:#00E5FF,color:#e0e0e0
  1. Detect: Sends an EMLKV2 handshake over UDP; emulator responds with JSON containing game_id, game_hash, and platform
  2. Match: Hash resolves to an exact profile, or serial falls back to a compatible one
  3. Poll: Data points are read from emulator memory at a configurable rate (default 5 Hz)
  4. Render: Live data is pushed to the theme WebView (full-screen dashboard or floating overlay widgets) via JavaScript bridge

Installation

Download the latest APK from Releases or import the full EmuLnk suite into Obtainium:

[!TIP] obtainium.json: Includes EmuLnk app + all emulator forks + repo tracking, grouped under one category. If you imported EmuLnk before the package IDs were corrected, delete the affected RetroArch, Dolphin, or PPSSPP entries from Obtainium and re-import this file.

Building from Source

git clone https://github.com/EmuLnk/emulnk.git
cd emulnk
./gradlew assembleDebug

Requires Android SDK 35 and JDK 11.

Creating Themes

Themes are self-contained folders with HTML, CSS, JS, and a theme.json manifest. See the full documentation:

Resource Description
Getting Started First theme walkthrough
Theme Format Manifest and file structure
Theme API Data contract and updateData()
Bridge Methods JavaScript bridge reference (emulink.*)
Profile Format Data point definitions
Platform Quirks System-specific memory notes

Browse community themes and profiles in emulnk-repo.

Project Repos

Repo Description
emulnk Android companion app
emulnk-repo Themes, profiles, and system configs
retroarch-lnk RetroArch fork with UDP protocol
dolphin-lnk Dolphin fork with UDP protocol
ppsspp-lnk PPSSPP fork with UDP protocol
melonds-lnk melonDS fork with UDP protocol
azahar-lnk Azahar fork with UDP protocol

License

PolyForm Noncommercial License 1.0.0

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools