Proximity voice chat for League of Legends. Hear nearby players (allies and enemies) with volume that scales by in-game distance, tied to minimap vision — if you can't see them, you can't hear them.
Standalone Windows desktop app built with Tauri 2 + WebView2. No Overwolf, no third-party voice service, no telemetry. Registered + approved on the Riot Developer Portal (App ID 809090).
Download the latest lolproxchat.exe from Releases. Single portable executable — no installer.
Requirements:
- Windows 10 1809+ or Windows 11
- WebView2 Runtime (ships with Windows 11; pushed via Edge on Windows 10)
- League of Legends in Borderless mode (Settings → Video → Window Mode → Borderless). Required — DX9 true fullscreen takes exclusive GPU output and no transparent overlay can render over it.
Launch the exe before or during a League match. The panel auto-attaches beside the minimap once a game is detected.
Windows will show one of these on first launch (the exe isn't code-signed; this is the standard treatment for any unsigned binary downloaded from the internet):
- "Windows protected your PC" (SmartScreen) → More info → Run anyway.
- "This app has been blocked for your protection" (Mark of the Web) → right-click
lolproxchat.exe→ Properties → check Unblock → OK → re-launch.
Subsequent launches don't prompt.
Every release body includes a SHA-256 hash. Compare it against your downloaded exe to confirm you got the official build (defends against in-transit tampering, mirror reposts, typosquatted re-uploads):
# PowerShell
Get-FileHash lolproxchat.exe
# WSL / git-bash
sha256sum lolproxchat.exeEvery release exe is also auto-submitted to VirusTotal via a GitHub Action. Scan permalinks land in the release body within ~30 seconds of publish — verifiable against 70+ antivirus engines before downloading.
- Make sure LoL is in Borderless mode.
- Launch
lolproxchat.exe. The panel appears in the middle of the screen showing the current lifecycle ("Waiting for League of Legends", "In champion select", etc.). - Once you load into a match, the panel jumps to the left edge of the minimap. Other players running LoLProxChat in the same match appear within a few seconds.
- Always Open mic is the default — just talk. MIC = self-mute, VOL = mute everyone, MUTE per row = silence a specific player.
For the rest — every Settings toggle, troubleshooting, log-grab flow, uninstall — see the user guide.
| Doc | When to read |
|---|---|
| User guide | Day-to-day usage, every Settings toggle, troubleshooting, reporting bugs |
| Architecture | How it actually works — CV pipeline, WebRTC flow, server design |
| Threat model | What the design protects, what it doesn't, what we collect (and what we don't) |
| Compliance | Relationship to Riot's third-party policy + Developer Portal status |
| Self-hosting | Run your own signaling server |
| Contributing | Build, test, release flow + code style |
| Security policy | How to report vulnerabilities |
| Changelog | What changed in each release |
- Game detection — reads the LCU and Live Client Data APIs for game phase + player roster. No memory reads, no injection.
- Position — Win32 BitBlt of the minimap region + HSV color filter + blob detection + ONNX champion classifier locates your champion icon. Position is in game coordinates.
- Signaling — players in the same match join a deterministic WebSocket room (room ID = hash of sorted player names) on a self-hosted Node server.
- Voice — WebRTC peer-to-peer audio between players (Opus 128 kbps, DTLS-SRTP). No audio touches any server.
- Proximity volume — AES-GCM-encrypted position blobs flow peer-to-peer; the server decrypts them just long enough to compute pairwise volumes (quadratic falloff up to 1200 game units, then quantized into 5 buckets + ±5% jitter to limit side-channel precision). Clients never see decrypted peer positions.
For depth, see docs/architecture.md.
LoLProxChat collects no analytics, no telemetry, no fingerprinting, no persistent user identifiers. The only data that leaves your machine is your summoner name (for room routing — same name visible on the match scoreboard), AES-GCM-encrypted position blobs (decrypted server-side, never logged), WebRTC signaling, and the voice audio itself (DTLS-SRTP, peer-to-peer, never touches the server). Want to keep your public IP private even from peers in your match? Settings → Hide IP (Force TURN) routes voice through the TURN relay. See docs/threat-model.md for the full breakdown.
PolyForm Noncommercial 1.0.0 — source available for personal and noncommercial use only.
Champion icon assets from the League of Legends Wiki (CC BY-SA 3.0) were used for model training only and are not distributed with this software.
- LeagueMinimapDetectionCNN — reference code for minimap detection
- League of Legends Wiki — champion icon assets used for classifier training
- Tauri — desktop app framework
- Cloudflare Realtime TURN — managed TURN relay infrastructure
- Every user who's filed an issue or attached a log — your reports made this app actually work.