- JavaScript 52.1%
- TypeScript 43.5%
- CSS 4.4%
| .github/workflows | ||
| assets | ||
| markdown | ||
| scripts | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| CHANGELOG.md | ||
| index.css | ||
| index.js | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| pengu.d.ts | ||
| pengu.yml | ||
| README.en-US.md | ||
| README.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
A League of Legends Client Enhancement Plugin for Pengu Loader
Sona
简体中文
·
English
Quick Start
·
Report Bug
·
Request Feature
Open Sona from the icon beside the Play button, or press F1 at any time.
Table of Contents
- Introduction
- Features
- Screenshots
- Installation
- Usage
- Architecture
- Notes
- Development
- License
- Acknowledgements
- Important Notice
Introduction
Sona is a free and open-source League of Legends client enhancement plugin built on top of Pengu Loader. It runs inside the League Client Chromium environment and communicates with the client through LCU REST APIs and WebSocket events.
Sona focuses on practical quality-of-life improvements: champion select tools, match history lookup, OP.GG build recommendations, lobby and social enhancements, client beautification, custom avatars, replay tools, and a convenient in-client settings panel.
Features
Match and Champion Select
| Feature | Description | |
|---|---|---|
| ⚡ | Auto Accept | Automatically accepts queue pop, with an optional random delay and the ability to decline after accepting. |
| 🎯 | Auto Pick / Auto Ban Queue | Configure multiple candidate champions. Sona skips unavailable champions by priority. |
| 🔄 | ARAM Bench No Cooldown | Removes bench swap cooldown in ARAM. |
| 🔵 | Side Indicator | Reports whether your team is blue side or red side in champion-select chat. |
| 📊 | Team Power Analysis | Uses matches from the current mode to calculate win rate, KDA, and a 3.0–16.0 strength score. |
| 🌟 | Champion Select Assist | Shows teammate win rate, KDA, particles, champion tier badges, and clickable match history. |
| 🔒 | Privacy / Streamer Mode Support | Keeps teammate analysis working when names are hidden, restores real names beside client aliases, and tracks player swaps. |
| 📈 | Game Analysis Popup | Displays team strength analysis after entering game, including win rate, KDA, rank, and premade groups. |
| 🚪 | Champion Select Quit Button | Adds a quick exit button to non-custom champion select so you can return to the lobby. |
| 🔁 | Auto Return to Lobby | Returns to lobby after a game, with optional auto queue and retry logic. |
| 🛡️ | Balance Buff Tooltip | Shows mode-specific champion balance modifiers in ARAM and other supported modes. |
| 👍 | Auto Honor | Randomly honors teammates after the game. |
| 🧩 | Lobby Enhancement | Click lobby member avatars for match history and show recent performance above banners. |
Smart Builds
| Feature | Description | |
|---|---|---|
| 🧠 | Smart Builds, Runes and Summoner Spells | Automatically syncs item sets after champion lock-in and remembers manually saved runes and spells per champion/mode. |
| 🧭 | Position-aware Recommendations | Uses your assigned role in ranked, the champion's most common role elsewhere, and offers a Top/Jungle/Mid/ADC/Support selector. |
| 🧰 | OP.GG Recommendation Panel | Shows mode-aware items, runes, summoner spells, augments, and matchups during champion select. |
| 📦 | Managed Item Sets | Creates Sona-managed client item sets while preserving user-created item sets. |
| 🛟 | Multi-mode Fallbacks | Supports standard and special modes and fills missing recommendation sections from available data. |
Match History
| Feature | Description | |
|---|---|---|
| 🔍 | Player Lookup | Search any player by Riot ID. |
| 🏷️ | Mode Filter | Filter match history by queue using SGP query tags. |
| 📋 | Match Details | View champions, KDA, items, runes, spells, CS, gold, damage, map, and time. |
| 📎 | Game ID Copy | Copy Game ID for replay tools. |
Social
| Feature | Description | |
|---|---|---|
| ✏️ | Unlock Status Message | Removes the client-side lock from status editing. |
| 📱 | Enhanced Availability | Supports extra statuses such as offline and mobile, with startup restore. |
| 🖼️ | Custom Profile Background | Use any skin as your profile background, with search and lazy loading. |
| 🎏 | Custom Banner | Locally display any challenge banner. |
| 👥 | Premade Friend Marker | Marks friends in the same premade with matching colors. |
| ⏱️ | Enhanced Friend Status | Shows in-game friends' mode and elapsed game time in the social sidebar. |
| 🎭 | Rank Disguise | Disguise the rank shown in friend cards. |
| 🚫 | Remove Crest | Remove profile crest decoration. |
| 🧹 | Reset Avatar | Restore the default client avatar. |
Beautify
| Feature | Description | |
|---|---|---|
| 🎨 | Beautify Page | A dedicated page for client visual customization. |
| 🖼️ | Custom Home Wallpaper | Use images or videos from assets as the home background. Supports blur, tint, crop, and positioning. |
| 🪄 | Wallpaper Mode and Scene Glass | Hides home activity content, clears sidebar backgrounds, and adjusts blur/tint for mode-select and lobby scenes. |
| 🎲 | Random Wallpaper | Randomly applies one wallpaper on each client start while avoiding immediate repeats when possible. |
| 🧊 | Friends Sidebar Glass | Independently adjusts the social sidebar blur and tint. |
| 🧭 | Top Navigation Styling | Adjusts navbar blur and optionally hides icon separators and the bottom border. |
| 🧑🎤 | Custom Avatars | Manage multiple local avatars and sync them between friends who both use Sona, with an offline cache fallback. |
| 🌈 | Flowing Summoner Names | Configures a smooth looping gradient and syncs it across the friends list, lobby, and champion select. |
| 📦 | Asset Manager | Records paths under assets and can normalize absolute paths containing sona/assets. |
Tools and Interface
| Feature | Description | |
|---|---|---|
| 🎬 | Replay Tool | Download and watch replays by Game ID. |
| 💾 | Settings Backup | Back up and restore client settings by account. |
| 🎁 | Selective Battle Pass Rewards | Review pending choice rewards and claim only the items you select. |
| 🪟 | Window Effects | Blur, acrylic, mica, and other visual effects depending on platform support. |
| ✨ | Global Particles | Adds star-like particles to the client background. |
| 🚀 | Quick Lobby | Skips mode selection from Play and opens a configured queue lobby directly. |
| 🗂️ | Game Mode Filter | Hides unwanted queue entries from the PvP mode-selection page. |
| 🧹 | Client UI Cleanup | Can hide the TFT entry, right-navbar labels, and esports broadcast popup. |
| 🎨 | Restore Chromas Tab | Restores the hidden Chromas sub-tab on supported collection pages. |
| 🔔 | Update Checker | Checks releases on startup and lets you open or skip a new version. |
| 🌐 | Internationalization | Supports Simplified Chinese, English, and automatic language detection. |
| 🔧 | Debug Panel | LCU, chat, replay, builds, status-payload inspection, and mock game-analysis tools for advanced users. |
Screenshots
Champion Select Assist
Champion Tier Badges
Build Recommendations
Augment Recommendations
Lobby Enhancement
Enhanced Friend Status
Installation
Requirements
- Latest Pengu Loader
- League of Legends client
Steps
- Install Pengu Loader from the Pengu Loader releases.
- Start Pengu Loader and make sure it shows
ready. - Download the Sona release package from this repository's Releases page. Do not use the source-code archive as a plugin package.
- Open the Pengu Loader plugins folder.
- Extract the
sonafolder from the release package into the plugins folder. - Refresh Pengu Loader and restart the League client.
The installed sona folder should contain the built index.js and index.css files.
Usage
- Start the League client.
- Click the Sona icon beside the Play button, or press
F1. - Configure features in the Tools, Beautify, and Settings pages.
- Settings are saved automatically and restored on next launch.
Architecture
League Client (Ember.js + Chromium)
|
Pengu Loader
|
Sona Plugin
|
React UI + Feature Modules + DOM Injections
|
LCU REST APIs / WebSocket Events / DataStore
Core modules:
LCUManager: wraps LCU REST APIs and WebSocket events.InjectorManager: keeps DOM injections alive through client re-renders.SonaStore: typed configuration, DataStore persistence, and change listeners.- Feature modules: independent lifecycle units for auto accept, OP.GG builds, custom avatars, lobby enhancement, and more.
- Lightweight i18n: dictionary-based Chinese/English translations with automatic client-language detection.
Notes
- Sona requires Pengu Loader and cannot run standalone.
- Sona communicates with the League Client through LCU APIs. It does not modify game files or inject into the game process.
- Custom avatars and flowing names use hidden status payloads; both friends need Sona enabled to see each other's synchronized effects.
- Build recommendations use third-party data sources such as OP.GG and ARAM.GG, while client actions go through LCU APIs and DOM integration.
- Some features depend on client state, region, queue type, or third-party API availability and may not always return data.
- Rank disguise only affects friend-card display and does not alter real ranked data.
Development
npm install
npm run dev
npm run build
Project structure:
sona/
├── src/
│ ├── index.tsx
│ ├── App.tsx
│ ├── i18n/
│ ├── lib/
│ │ ├── lcu.ts
│ │ ├── features.ts
│ │ ├── features/
│ │ ├── store.ts
│ │ ├── injections.ts
│ │ ├── InjectorManager.ts
│ │ └── assets.ts
│ ├── components/
│ ├── styles/
│ └── types/
├── assets/
├── markdown/
├── CHANGELOG.md
├── pengu.d.ts
├── package.json
└── LICENSE
License
This project is licensed under AGPL-3.0. See LICENSE for details.
Acknowledgements
Sona learned a lot from the League client plugin community. Special thanks to:
- BakaFT / BetterTencentLCU
- imunproductive / upl
- BakaFT / CustomHookLoader
- nomi-san / balance-buff-viewer
- LeagueAkari / LeagueAkari
Important Notice
This project does not accept sponsorship.
This project does not accept Pull Requests.
Feedback, ideas, and bug reports are welcome through Issues.