Windows desktop tool for talking to the local League of Legends LCU API: port/token discovery, GET/POST/PATCH calls, and live event streaming across multiple LCU domains (summoner, champ select, gameflow).
The League client hosts a local HTTPS + WebSocket server on 127.0.0.1 (LeagueClientUx.exe), used internally by its own Chromium-based UI. This project discovers that server's port/token via WMI and talks to it directly, giving you:
- A general-purpose REST tester for any LCU endpoint (GET, with quick-pick shortcuts for common ones)
- A live event log via the LCU's WebSocket push channel (
OnJsonApiEvent), showing state changes as they happen - A read-only champ select preview: teammates with their picked/hovered champion, and the reroll bench
This is unofficial and read-only by design. The LCU API is not publicly documented or supported by Riot Games, and this project does not send any request that mutates game state (no picks, no bans, no bench swaps).
src/
├── DKDev.LolClientTool.Core/ Contracts and domain models, zero external dependencies
├── DKDev.LolClientTool.Infrastructure/ WMI discovery, HttpClient, WebSocket client, Data Dragon catalog
└── DKDev.LolClientTool.Desktop/ WPF UI (MVVM via CommunityToolkit.Mvvm), DI composition root
Each project has its own README with more detail: Core, Infrastructure, Desktop.
- Core knows nothing about WMI, HttpClient, or WPF.
- Desktop never references Infrastructure types directly outside of DI registration in
App.xaml.cs. - A new LCU domain means a new interface in Core plus a new implementation in Infrastructure.
- LCU endpoint paths live as
constfields inside the owning Infrastructure service, never as magic strings in a ViewModel. - Async everywhere; no blocking
.Result/.Wait(). - LCU client not running is an explicit result (
null/LcuApiResult<T>.Fail(...)), not an exception on the normal control-flow path.
- .NET 8 SDK
- Windows 10/11 (WPF and
System.Management/WMI are Windows-only) - League client running, for anything beyond building the solution
dotnet build
Run DKDev.LolClientTool.Desktop from your IDE, or dotnet run --project src/DKDev.LolClientTool.Desktop. The League client must be running for Connect to succeed; discovery fails gracefully (no exception) if it isn't.