• v3.3.0 0e7e70c923

    v3.3.0
    All checks were successful
    CI / build-and-test (push) Successful in 1m25s
    Stable

    joeyr released this 2026-07-18 15:11:16 -05:00 | 81 commits to main since this release

    Added

    • Rune tooltips now say what each rune does. Hovering any perk on a rune board (runes and stat shards alike, plus the header keystone icon) shows its description under the name — e.g. "Triumph — Takedowns restore 10% of your missing health…". The text comes from the running League client's own perk catalog (GET /lol-perks/v1/perks, a read-only localhost call), so it always matches the client's exact patch and language; if the catalog hasn't resolved yet, tooltips fall back to the name alone.
    Downloads
  • v3.2.2 27f3468597

    v3.2.2
    All checks were successful
    CI / build-and-test (push) Successful in 1m25s
    Stable

    joeyr released this 2026-07-18 14:51:20 -05:00 | 82 commits to main since this release

    Changed

    • Internal maintenance — no user-facing changes. The op.gg scrapers now share one common module (position slugs, URL scheme, embedded-JSON extraction, error mapping), the main-process startup was decomposed into focused wiring functions, and the renderer store gained a single bridge accessor with this-free action types.
    • Tooling: type-checked ESLint now gates CI (typecheck → lint → tests → build), and the repo declares engines.node >=22.19, an .nvmrc, and an .editorconfig. A handful of latent nits the new lint surfaced were fixed (dead stores, untyped JSON parses, a non-Error promise rejection, a zero-width space in a comment).
    Downloads
  • v3.2.1 5609f97b44

    v3.2.1
    All checks were successful
    CI / build-and-test (push) Successful in 1m8s
    Stable

    joeyr released this 2026-07-18 10:52:43 -05:00 | 89 commits to main since this release

    Changed

    • Rune boards now sit two per row (2x2 for the usual four combos). Each full-width card in v3.2.0 left the right half of the window empty; the combo cards now share rows in a two-column grid, falling back to one per row in narrow windows so the perk rows never crush.

    Installers (Windows x64): LoL-Companion-3.2.1-setup.exe (NSIS) and LoL-Companion-3.2.1-portable.exe attached below.

    Downloads
  • v3.2.0 1469cb4fba

    v3.2.0
    All checks were successful
    CI / build-and-test (push) Successful in 1m16s
    Stable

    joeyr released this 2026-07-17 18:09:33 -05:00 | 90 commits to main since this release

    Added

    • Full rune boards in the Rune Import section. Every recommended combo now renders the complete rune page the way the League client shows it — all four primary-tree rows, the secondary-tree rows, and the three stat-shard rows, with every rune icon on the board and the page's actual picks highlighted (the rest dimmed). Previously each combo was a single compact row showing only the keystone icon and text stats.

    Changed

    • Suggested Picks disappears once you lock in. Counter suggestions exist to help choose your pick, so after your own champion is locked they're dead weight — the section is now dropped at that point and the freed space goes to the full rune boards (which appear only after lock-in).
    Downloads
  • v3.1.3 603386467d

    v3.1.3
    All checks were successful
    CI / build-and-test (push) Successful in 1m45s
    Stable

    joeyr released this 2026-07-15 22:09:50 -05:00 | 91 commits to main since this release

    Fixed: the imported rune combo now shows up in the League client itself, not just the app's toast.

    v3.1.1/v3.1.2 only reworded the companion's own success message. The real rune page name written into the client (visible in its rune-page dropdown) still read just "LoLC: Lux Support" with no way to tell which combo had landed. The page name now carries an abbreviated combo suffix too, e.g. "LoLC: Lux Supp Sorc+Dom", truncated to fit the LCU's ~25-char page-name cap.

    Downloads
  • v3.1.2 1a647df9e3

    v3.1.2
    All checks were successful
    CI / build-and-test (push) Successful in 1m4s
    Stable

    joeyr released this 2026-07-15 21:02:16 -05:00 | 92 commits to main since this release

    Fixed

    • Rune import success message now leads with the page name. v3.1.1 led with the combo (Imported "Sorcery + Domination" as "LoLC: Lux Support"), but the "LoLC: ..." page name is what you actually see in the client'''s own rune-page dropdown, so the message now leads with that and puts the combo in parentheses: Imported "LoLC: Lux Support" (Sorcery + Domination) — applied in your client.
    Downloads
  • v3.1.1 99195fe627

    v3.1.1
    All checks were successful
    CI / build-and-test (push) Successful in 1m5s
    Stable

    joeyr released this 2026-07-15 20:42:09 -05:00 | 93 commits to main since this release

    Verified against a real League client (locked Lux Support, imported the top Sorcery+Domination page — confirmed applied and active in the client).

    Fixed

    • Rune import success message now names the imported combo. It previously only echoed the page name (Imported "LoLC: Lux Support"), so there was no way to tell which of the listed rune pages had actually been applied when several rows exist for the same champion. It now also names the combo, e.g. Imported "Sorcery + Domination" as "LoLC: Lux Support" — applied in your client.
    Downloads
  • v3.1.0 572dc42a23

    v3.1.0
    All checks were successful
    CI / build-and-test (push) Successful in 1m6s
    Stable

    joeyr released this 2026-07-15 17:51:21 -05:00 | 95 commits to main since this release

    Added

    • One-click rune import (build importer, runes-first). When you lock in your champion, the app fetches op.gg's recommended rune pages for that champion + role (same region/tier filters as the counters data) and shows a new Rune Import section: one row per keystone-tree combo with that exact page's own win rate, pick share, and games — click Import to write it into the running League client as the active page.
      • Off by default. Enable it in Settings → Rune import. While off, the app stays fully observation-only: nothing is scraped on lock-in, the section is hidden, and the main process refuses import requests.
      • Slot-safe. The companion maintains exactly one page of its own (name prefix LoLC:) and only ever overwrites that page — it never deletes a rune page you created. If every slot holds one of your pages, it asks you to free one instead.
      • Narrow write boundary. This release relaxes the app's read-only LCU contract to a property-tested write allowlist (amended Req 6): lol-perks rune pages (and later lol-item-sets) only; champ-select, lobby, matchmaking, and gameflow writes remain refused at the boundary. Imports are the only writes, and only ever fire on your explicit Import click.
      • Item sets are the planned follow-up on the same boundary (docs/build-importer-plan.md).
    Downloads
  • v3.0.2 a06ff121e5

    v3.0.2
    All checks were successful
    CI / build-and-test (push) Successful in 1m3s
    Stable

    joeyr released this 2026-07-08 10:30:30 -05:00 | 98 commits to main since this release

    Internal cleanup — no user-facing behavior change. Typecheck, 508 tests, build, and a dev smoke launch all green.

    Fixed

    • debug.log no longer grows unbounded. The logger appended at debug level across every run with rotation never landing — the dev-tree copy had reached 23 MB. The log now rotates at startup: debug.log holds the current run, debug.log.old the previous one, and anything older is dropped.

    Changed

    • startAssistant broken up. The scouting-report and benchmark-harvest subsystems are wired by dedicated wireScout / wireHarvest functions constructed before the live poller, which references them directly — the three mutable "forward hook" callbacks are gone, and the inbound IPC handler is registered last so it captures the real wiring.
    • The live-metrics and scout overlay windows share one createClickThroughOverlayWindow factory, and the three "mark the publisher ready" blocks share one publishWhenLoaded helper.
    • The default overlay-metric and scout-section lists are derived from DEFAULT_SETTINGS instead of being re-listed in src/main/index.ts.
    Downloads
  • v3.0.1 5d74e0c935

    v3.0.1
    All checks were successful
    CI / build-and-test (push) Successful in 1m7s
    Stable

    joeyr released this 2026-07-07 20:16:14 -05:00 | 99 commits to main since this release

    Fixed

    • Scouting report: champions with an apostrophe now load their mastery and "On champ" stats. Champions such as Kai'Sa, Kha'Zix, Cho'Gath, Vel'Koz, Rek'Sai, Kog'Maw, Bel'Veth, and K'Sante failed to resolve to a champion id because the in-game Live Client Data API and the LCU champion list spell the apostrophe with different characters (a straight ' vs. a curly ’), and the name→id lookup was an exact string match. The affected player'''s row still showed rank and role, but Mastery and On-champ stats stayed blank. The lookup is now apostrophe- and punctuation-tolerant (it also covers spacing/period differences like "Dr. Mundo" and "Nunu & Willump").
    Downloads