lol-tui
A terminal UI showing real-time League of Legends game intelligence — CS/min
tracking, a kill and objective event feed, and per-player rank, role and
pre-made party detection.
Downloads
Intel Macs and Linux are not supported. No binaries are
published for them; --update on those platforms says so plainly
rather than failing oddly. Building from source is the only option there.
Each archive holds a single executable at its root — lol_tui on
macOS, lol_tui.exe on Windows. Those links always point at the
newest release; to pin a version, replace latest in the URL with
the tag, e.g. /releases/download/v1.3.2/….
macOS
1. Install the Tesseract runtime
The macOS binary links dynamically against Homebrew's Tesseract and Leptonica,
which power the CS scoreboard OCR. Without them the app will not launch at all.
brew install tesseract
That one command is enough — Homebrew pulls in Leptonica and the rest of the
chain. If you don't have Homebrew, install it from
brew.sh first.
2. Download and extract
Downloading with curl is the smoothest path: Gatekeeper's
quarantine flag is applied by the downloading application, and
browsers set it while curl does not. Do this and you skip the
"unverified developer" dance entirely.
cd ~/Downloads
curl -L -o lol_tui.tar.gz \
https://dist.lab.jykntr.net/releases/download/latest/lol_tui-macos-aarch64.tar.gz
tar -xzf lol_tui.tar.gz
If you download through a browser, still extract from Terminal with
tar -xzf. Finder's Archive Utility copies the quarantine flag onto
the extracted binary; tar does not.
3. Install it on your PATH
mkdir -p ~/.local/bin
mv lol_tui ~/.local/bin/
chmod +x ~/.local/bin/lol_tui
Add it to your PATH if it isn't already — in ~/.zshrc:
export PATH="$HOME/.local/bin:$PATH"
Prefer a directory you own over /usr/local/bin. The self-updater
replaces the binary in place, so a user-owned location means
--update never needs sudo.
4. If macOS blocks it anyway
If you downloaded through a browser or extracted with Finder, the first run
fails with "lol_tui cannot be opened because the developer cannot be
verified". That's expected — the binary is unsigned and unnotarized, not
broken. Check for the flag:
xattr -l ~/.local/bin/lol_tui
If you see com.apple.quarantine, remove it:
xattr -d com.apple.quarantine ~/.local/bin/lol_tui
Alternatively run it once, let it be blocked, then open
System Settings → Privacy & Security and click
Open Anyway. Once cleared, the approval sticks — and it
survives a self-update, because --update fetches over the network
directly rather than through a browser, so nothing re-applies the flag.
Right-click → Open, the classic workaround, applies to .app
bundles and no longer bypasses Gatekeeper on recent macOS. Use
xattr or the Privacy & Security panel.
Windows
1. Download and extract
Grab lol_tui-windows-x86_64.zip
and extract it — for example to C:\Users\<you>\bin. It holds a
single lol_tui.exe and needs no extra runtime libraries; the OCR
dependencies are compiled in.
2. Clear the Mark of the Web
Windows tags downloaded files, and SmartScreen blocks unrecognized ones. Since
this binary isn't code-signed with a certificate Microsoft recognizes, you'll
likely see "Windows protected your PC". Click More info,
then Run anyway.
To clear it ahead of time, right-click the zip before
extracting → Properties → tick Unblock.
Unblocking the zip first means the extracted .exe comes out clean.
In PowerShell:
Unblock-File -Path C:\Users\<you>\bin\lol_tui.exe
3. Run it
lol_tui.exe
Use Windows Terminal or PowerShell for correct colors and Unicode. The legacy
cmd.exe console renders the UI poorly.
Self-update
lol_tui --update
This checks for a newer release, downloads the asset for your platform, shows
a progress bar, and replaces the running executable in place. Restart the app
afterwards. If you're already current it says so and downloads nothing. Run it
from a normal shell, not while the TUI is open — it prints to stdout and asks
for confirmation before replacing the binary.
On launch, lol-tui quietly checks whether a newer release exists and, if so,
shows a line in the status bar. The check is network-only and never downloads
anything on its own. If it fails — no network, host unreachable — it is
silently ignored and the app starts normally.
lol_tui --no-update-check # skip the check for one run
To turn it off permanently, in your config file:
update_check = false
| Platform | Config file |
| macOS | ~/Library/Application Support/lol-tui/config.toml |
| Windows | %APPDATA%\lol-tui\config.toml |
| Linux | ~/.config/lol-tui/config.toml |
Updating from v1.3.1 or earlier. Those builds fetch updates
from the old github.com/jykntr/lol-tui-dist repo. Running
--update on one still works and lands you on v1.3.2, which is
the first version that updates from here. After that you're on the normal
path. Versions before v1.3.0 have no --update flag at all —
download from the table above, overwriting the old binary.
Troubleshooting
macOS: dyld: Library not loaded: …libtesseract.5.dylib
Tesseract isn't installed, or Homebrew moved to a newer major version of the
library. Run brew install tesseract; if it's already there,
brew upgrade tesseract and then update lol-tui so both sides line up.
macOS: zsh: permission denied
The executable bit was lost in extraction. Run chmod +x lol_tui.
Windows: VCRUNTIME140.dll was not found
Install the Microsoft Visual C++ Redistributable.
--update fails with "permission denied"
The binary sits somewhere your user can't write, typically
/usr/local/bin or C:\Program Files. Move it somewhere
you own and re-run, or re-run elevated.
--update says the release has no asset for this platform
A release was just tagged and its binaries are still building. Wait a few
minutes and try again.
--update can't reach the update server
Downloads are self-hosted rather than served by GitHub, so a home-network or
power outage takes them offline. Nothing is wrong with your install — the app
runs fine without it. Try again later, or download from the table above.
The app sits on "Waiting for game…"
That's the idle state. lol-tui watches the League Live Client API on
127.0.0.1:2999, which only exists while a game is actually in
progress — champion select and the client lobby don't count. It picks the game
up automatically once loading starts.