A modern, high-performance League of Legends statistics and analytics platform
Features • Quick Start • Documentation • API • Contributing
SummonerAPI v2 is a full-stack web application that provides comprehensive League of Legends player statistics, match history, champion analytics, and live build aggregation. Built with modern technologies and best practices, it offers a fast, responsive, and intuitive interface for analyzing player performance.
⚠️ LEGAL NOTICE
SummonerAPI v2 was created under Riot Games' "Legal Jibber Jabber" policy using assets owned by Riot Games. Riot Games does not endorse or sponsor this project.This project is not affiliated with, endorsed by, or sponsored by Riot Games. Riot Games and all associated properties are trademarks or registered trademarks of Riot Games, Inc.
You must have your own Riot Games API key and comply with their Terms of Service to use this application.
- ⚡ Lightning Fast: Powered by Spring Boot 3.5, React 18, and Vite for optimal performance
- 🎯 Real-time Data: Direct integration with Riot Games API for live match data
- 📊 Advanced Analytics: Champion builds, win rates, match history, and performance metrics
- 🔒 Production Ready: Built-in rate limiting, caching, security, and monitoring
- 🐳 Docker Native: One-command deployment with Docker Compose
- 📱 Responsive Design: Beautiful UI that works seamlessly on all devices
- 🌍 Multi-region: Support for all League of Legends regions
- 🔄 Auto-updates: Scheduled champion build aggregation from high-level gameplay
- Summoner Lookup: Search and view detailed summoner profiles across all regions
- Match History: Comprehensive match history with detailed statistics and performance metrics
- Champion Statistics: In-depth champion analytics including win rates, KDA, and play rates
- Live Builds: Automated aggregation of champion builds from high-ELO matches
- Ranked Overview: Current season rankings, LP gains, and ranked progression
- Profile Icons: Dynamic profile icon display with Community Dragon integration
- Intelligent Caching: Multi-layer caching with Caffeine for reduced API calls and faster responses
- Rate Limiting: Configurable per-IP rate limiting with customizable windows and thresholds
- Database Persistence: PostgreSQL with Flyway migrations for schema management
- API Documentation: Interactive Swagger/OpenAPI documentation
- Health Monitoring: Spring Boot Actuator endpoints for application health
- Security: Spring Security integration with CSRF protection and secure headers
- Code Quality: Integrated Checkstyle, PMD, SpotBugs, and JaCoCo for code quality assurance
- Comprehensive Testing: Unit and integration tests with Vitest for frontend, JUnit for backend
| Technology | Version | Purpose |
|---|---|---|
| Java | 21 | Programming Language |
| Spring Boot | 3.5.6 | Application Framework |
| Spring Security | 3.x | Authentication & Authorization |
| Spring Data JPA | 3.x | Data Access Layer |
| PostgreSQL | 16 | Primary Database |
| Flyway | 11.13.2 | Database Migrations |
| Caffeine | 3.2.2 | In-Memory Caching |
| Lombok | 1.18.42 | Boilerplate Reduction |
| SpringDoc OpenAPI | 2.8.13 | API Documentation |
| Technology | Version | Purpose |
|---|---|---|
| React | 18.3.1 | UI Framework |
| Vite | 5.2.8 | Build Tool |
| React Router | 6.28.0 | Client-side Routing |
| TanStack Query | 5.51.21 | Data Fetching & Caching |
| Day.js | 1.11.11 | Date Manipulation |
| Vitest | 1.3.1 | Testing Framework |
| ESLint | 8.57.0 | Code Linting |
- Docker & Docker Compose - Containerization
- Maven - Dependency Management & Build Tool
- GitHub Actions - CI/CD Pipeline
- Nginx - Reverse Proxy (optional)
- Java 21 or higher (Eclipse Temurin recommended)
- Node.js 18+ and npm 9+
- Docker and Docker Compose (for containerized deployment)
- PostgreSQL 16 (if running without Docker)
- Riot Games API Key (Get one here)
⚠️ Required: You must have your own API key to use this application⚠️ Never commit your API key to version control or share it publicly⚠️ Read and comply with Riot's API Terms of Service
The fastest way to get started:
# 1. Clone the repository
git clone https://github.com/zerox80/SummonerAPIv2.git
cd SummonerAPIv2
# 2. Configure environment variables
cp .env.example .env
# Edit .env and add your RIOT_API_KEY
# 3. Start the application
docker-compose up -d
# 4. Access the application
# Frontend: http://localhost:8080
# Swagger UI: http://localhost:8080/swagger-ui.htmlFor development with hot-reload:
# 1. Clone and configure
git clone https://github.com/zerox80/SummonerAPIv2.git
cd SummonerAPIv2
cp .env.example .env
# Edit .env with your settings
# 2. Start PostgreSQL (via Docker or local install)
docker run -d \
--name summoner-db \
-e POSTGRES_DB=summoner_db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-p 5432:5432 \
postgres:16
# 3. Build and run backend
./mvnw clean install
./mvnw spring-boot:run
# 4. In another terminal, run frontend dev server
npm install
npm run dev
# Frontend dev server: http://localhost:5173 (with proxy to :8080)
# Backend API: http://localhost:8080The application is configured via environment variables defined in .env. Copy .env.example to .env and customize:
# Your Riot Games API key (REQUIRED)
RIOT_API_KEY=YOUR_RIOT_API_KEY
# Primary region for API calls
RIOT_API_REGION=euw1SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/summoner_db
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=postgresRATE_LIMIT_ENABLED=true # Enable/disable rate limiting
RATE_LIMIT_WINDOW_MS=60000 # Window size (60 seconds)
RATE_LIMIT_MAX_REQUESTS=60 # Max requests per window per IP
RATE_LIMIT_PATHS=/api/**,/search # Protected paths
RATE_LIMIT_TRUST_PROXY=false # Trust X-Forwarded-For headers
RATE_LIMIT_INCLUDE_HEADERS=true # Include X-RateLimit-* headersBUILD_AGG_ENABLED=false # Enable scheduled build aggregation
BUILD_AGG_QUEUE_ID=420 # Queue ID (420 = Ranked Solo/Duo)
BUILD_AGG_PAGES=1 # Number of pages to fetch
BUILD_AGG_MATCHES_PER_SUMMONER=6 # Matches per summoner to analyze
BUILD_AGG_MAX_SUMMONERS=50 # Max summoners to fetch
BUILD_AGG_CHAMPIONS= # Comma-separated champion IDs
BUILD_AGG_CRON=0 15 3 * * * # Cron schedule (default: 3:15 AM UTC)
BUILD_AGG_TRIGGER_ENABLED=false # Allow manual POST triggersAPP_HTTP_PORT=8080 # HTTP port for the application
SPRING_PROFILES_ACTIVE=prod # Spring profile (use 'prod' for production)
DDRAGON_DEFAULT_LOCALE=de_DE # Default locale for Data DragonFor production deployments, additional configuration is available in:
src/main/resources/application.properties- Base configurationsrc/main/resources/application-prod.properties- Production overrides
- Understand the system
- Revisit the Overview and Features sections to internalize the product vision.
- Skim the Project Structure tree so you know where backend services, the React frontend, scripts, and infrastructure live.
- Configure your environment
- Install the prerequisites from Quick Start (Java 21, Node 18+, Docker, PostgreSQL, Riot API key).
- Copy
.env.example→.env, then setRIOT_API_KEY, database credentials, and any overrides such asAPP_HTTP_PORTbefore starting services. - If you use a local PostgreSQL instance, keep the
SPRING_DATASOURCE_*values aligned with your container or local install.
- Run the stack
- Backend (hot reload):
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
- Frontend (Vite dev server):
cd frontend npm install npm run dev - Full Docker stack:
docker compose up --build
- Backend (hot reload):
- Use the application
- Web UI: open
http://localhost:5173, search for a Riot ID such asFaker#KR1, and navigate the Summoner → Match History → Champions flows. - REST API: visit
http://localhost:8080/swagger-ui.htmlto explore/api/profile,/api/matches, and/api/champions. - Health checks: run
curl http://localhost:8080/actuator/healthto confirm the backend is up.
- Web UI: open
- Develop with confidence
- Backend tests:
./mvnw verify - Frontend unit tests:
cd frontend && npm run test - Linting/formatting:
npm run lintand (if enabled)./mvnw spotless:apply
- Backend tests:
- Troubleshoot & observe
- Tail backend logs with
./mvnw spring-boot:run -Dspring-boot.run.arguments=--logging.level.root=DEBUG - Inspect metrics via
http://localhost:8080/actuator/metricsand rate-limit headers on API responses. - Toggle scheduled build aggregation through the
build.agg.*environment variables documented above.
- Tail backend logs with
Following these steps takes a new contributor from clone → configuration → running stack → productive development in minutes.
SummonerAPIv2/
├── .github/workflows/ # CI/CD pipelines
├── config/ # Build tools configuration
│ └── checkstyle/ # Code style rules
├── frontend/ # React frontend application
│ └── src/
│ ├── api/ # API client & queries
│ ├── components/ # Reusable React components
│ ├── data/ # Static data & translations
│ ├── hooks/ # Custom React hooks
│ ├── layouts/ # Page layouts
│ ├── pages/ # Route pages
│ ├── providers/ # Context providers
│ ├── sections/ # Page sections
│ ├── styles/ # CSS stylesheets
│ └── utils/ # Utility functions
├── nginx/ # Nginx configuration examples
├── scripts/ # Build and utility scripts
├── src/
│ ├── main/
│ │ ├── java/ # Java source code
│ │ │ └── com/zerox80/riotapi/
│ │ │ ├── config/ # Spring configuration
│ │ │ ├── controller/ # REST controllers
│ │ │ ├── dto/ # Data transfer objects
│ │ │ ├── entity/ # JPA entities
│ │ │ ├── exception/ # Custom exceptions
│ │ │ ├── repository/ # Data repositories
│ │ │ ├── scheduler/ # Scheduled tasks
│ │ │ ├── security/ # Security configuration
│ │ │ ├── service/ # Business logic
│ │ │ └── util/ # Utility classes
│ │ └── resources/
│ │ ├── db/migration/ # Flyway SQL migrations
│ │ ├── static/ # Built frontend assets
│ │ └── templates/ # Thymeleaf templates
│ └── test/ # Backend tests
├── docker-compose.yml # Docker Compose configuration
├── Dockerfile # Multi-stage Docker build
├── pom.xml # Maven dependencies
└── package.json # NPM dependencies
The frontend is a modern React single-page application (SPA) built with Vite. It follows a component-based architecture designed for maintainability, scalability, and performance.
- State Management: The application uses a combination of local component state (
useState,useReducer) for UI state and TanStack Query (useQuery) for managing server state. TanStack Query handles data fetching, caching, and synchronization with the backend API, significantly simplifying data management and improving performance. - Routing: Client-side routing is managed by React Router. The application uses a declarative routing approach, with routes defined in
App.jsxand organized into pages. - Component Structure: Components are organized by feature and type.
pages/: Top-level components that correspond to a specific URL route.sections/: Large, composite components that make up a significant part of a page (e.g.,MatchHistory,RankedOverview).components/: Smaller, reusable components used across the application (e.g.,Button,Tooltip,MetricTile).
- Styling: The application uses plain CSS with a BEM-like naming convention. Styles are organized by component, promoting modularity and avoiding style conflicts. A global stylesheet (
global.css) defines base styles and variables. - API Communication: All communication with the backend is handled through a centralized API client (
api/client.js), which provides a consistent interface for making HTTP requests and handling errors. Custom hooks in thehooks/directory wrap these API calls with TanStack Query for easy consumption in components.
This project includes comprehensive code documentation with 100% coverage of all public APIs, classes, methods, and functions. Every public interface is thoroughly documented to help developers understand, use, and contribute to the codebase effectively.
All Java classes, methods, and functions include detailed JavaDoc documentation following the official JavaDoc standard:
Complete Coverage:
- Every public class has comprehensive class-level documentation explaining purpose, key features, and usage examples
- Every public method includes detailed parameter descriptions, return value documentation, and behavior explanations
- All configuration classes document Spring Boot configurations, their purposes, and setup requirements
- All API endpoints document request/response formats, error handling, and usage examples
- All service layer implementations explain business logic, algorithms, and data processing flows
- All JPA entities document relationship mappings, constraints, and database schema details
- All repository interfaces document query methods, custom implementations, and data access patterns
Key Documented Components:
config/- Spring configuration classes with detailed setup explanations and environment variable documentationcontroller/- REST API endpoints with complete request/response documentation and error scenariosservice/- Business logic with algorithm explanations, data processing flows, and performance considerationsentity/- JPA entities with relationship mappings, constraints, and database field documentationrepository/- Data access layer with query methods, custom implementations, and caching strategiesdto/- Data transfer objects with field descriptions, validation rules, and usage contextsmodel/- Domain models with comprehensive field documentation and business meaning
Documentation Standards:
- JavaDoc format: Official JavaDoc syntax with
@param,@return,@throws, and@seetags - Comprehensive examples: Real-world usage examples for complex APIs
- Performance notes: Important performance considerations and optimization guidance
- Error handling: Complete documentation of exceptions and error conditions
- Version information:
@sinceand@versiontags for API compatibility tracking
All JavaScript modules, functions, React hooks, and JSX components include comprehensive JSDoc documentation:
Complete Coverage:
- Every module has detailed module-level documentation explaining purpose, features, and usage patterns
- Every exported function includes parameter documentation, return value descriptions, and practical examples
- All React hooks document state management patterns, dependencies, and usage guidelines
- All utility functions explain input validation, edge cases, and performance considerations
- All React components document props, default values, and usage examples
- API client methods document request formats, error handling, and response structures
Key Documented Components:
api/client.js- HTTP client with comprehensive request/response handling and error documentationhooks/- Custom React hooks with detailed state management patterns and dependency explanationsutils/- Utility functions with complete formatting logic, validation rules, and edge case handlingdata/- Static data structures and curated content with field documentation and usage contextscomponents/- React components with complete prop documentation, examples, and accessibility features
Documentation Standards:
- JSDoc format: Standard JSDoc syntax with
@param,@returns,@example, and@typedeftags - Type safety: Complete TypeScript-style type annotations for better IDE support
- Practical examples: Real-world usage examples demonstrating common patterns
- Accessibility: Documentation of accessibility features and ARIA attributes
- Performance: Performance considerations and optimization notes for critical functions
All Python scripts and functions include comprehensive Google Style docstrings:
Complete Coverage:
- Every module has detailed module-level documentation explaining purpose and features
- Every function includes comprehensive parameter documentation, return value descriptions, and usage examples
- All utility functions explain error handling, edge cases, and performance considerations
- Script entry points document command-line usage, arguments, and configuration options
Key Documented Components:
scripts/install_maven.py- Installation utility with complete argument documentation and error handling
Documentation Standards:
- Google Style: Consistent Google Python Style Guide format
- Complete examples: Command-line usage examples and configuration scenarios
- Error handling: Documentation of exceptions and error conditions
- Platform considerations: Cross-platform compatibility notes and requirements
# Generate JavaDoc HTML documentation
./mvnw javadoc:javadoc
# Output: target/site/apidocs/index.html
# Generate documentation with custom options
./mvnw javadoc:javadoc -DadditionalJOption=-Xdoclint:none# Install documentation generator
npm install -g jsdoc
# Generate JSDoc HTML documentation
jsdoc frontend/src/**/*.js -d docs/jsdoc
# Output: docs/jsdoc/index.html
# Generate documentation with custom template
jsdoc -c jsdoc.conf.json frontend/src/**/*.jsMost modern IDEs will automatically display the inline documentation:
- IntelliJ IDEA: Hover over methods/classes to see JavaDoc/JSDoc
- VS Code: Install "Document This" extension for enhanced documentation
- WebStorm: Built-in JSDoc support with type hints and examples
- Eclipse: JavaDoc integration with hover tooltips
Once the application is running, access the interactive Swagger UI:
🔗 http://localhost:8080/swagger-ui.html
GET /api/summoner/{region}/{summonerName}- Get summoner by nameGET /api/summoner/{region}/by-puuid/{puuid}- Get summoner by PUUID
GET /api/matches/{region}/{puuid}- Get match history for a summoner- Query params:
page,size,start(pagination)
- Query params:
GET /api/champions- List all championsGET /api/champions/{championId}- Get champion detailsGET /api/champions/{championId}/builds- Get champion buildsPOST /api/champions/{championId}/aggregate- Trigger build aggregation (if enabled)
GET /search?q={query}®ion={region}- Search for summoners
GET /ddragon/versions- Get available DDragon versionsGET /ddragon/champions- Get champion dataGET /ddragon/items- Get item dataGET /ddragon/summoner-spells- Get summoner spell data
All API responses follow a consistent format:
{
"data": { /* response data */ },
"timestamp": "2025-10-03T23:42:50Z",
"status": 200
}Error responses include detailed error information:
{
"error": "SUMMONER_NOT_FOUND",
"message": "Summoner not found in region EUW1",
"timestamp": "2025-10-03T23:42:50Z",
"status": 404
}# Run all tests with coverage
./mvnw clean verify
# Run only unit tests
./mvnw test
# Run only integration tests
./mvnw integration-test
# Generate code coverage report
./mvnw jacoco:report
# Report available at: target/site/jacoco/index.html# Run all tests
npm test
# Run tests with coverage
npm run test -- --coverage
# Run tests with UI
npm run test:ui
# Run tests in watch mode
npm run test -- --watch# Run all quality checks (Checkstyle, PMD, SpotBugs)
./mvnw verify
# Run Checkstyle only
./mvnw checkstyle:checkstyle
# Run PMD only
./mvnw pmd:pmd
# Run SpotBugs only
./mvnw spotbugs:spotbugs
# Lint frontend code
npm run lint
# Auto-fix linting issues
npm run lint:fix# Build optimized Docker image
docker build -t summonerapi:latest .
# Or use docker-compose
docker-compose buildThe Dockerfile uses a multi-stage build:
- Stage 1: Builds the frontend with Vite (optimized production bundle)
- Stage 2: Builds the backend with Maven (includes frontend assets)
- Stage 3: Creates minimal runtime image with JRE 21
# Build frontend
npm run build
# Output: src/main/resources/static/
# Build backend (includes frontend)
./mvnw clean package -DskipTests
# Output: target/riot-api-spring-2.0.jar
# Run the JAR
java -jar target/riot-api-spring-2.0.jar-
Configure environment:
cp .env.example .env # Edit .env with production values -
Set production profile:
SPRING_PROFILES_ACTIVE=prod
-
Deploy:
docker-compose up -d
-
Monitor logs:
docker-compose logs -f app
Example Kubernetes manifests can be created based on the Docker image. Key considerations:
- Use ConfigMaps for non-sensitive configuration
- Use Secrets for sensitive data (API keys, DB credentials)
- Set appropriate resource limits
- Configure health checks using
/actuator/health - Use HPA for auto-scaling based on CPU/memory
- Configure ingress for external access
An example Nginx configuration is provided in nginx/summonerapi.conf.example:
# Copy and configure
cp nginx/summonerapi.conf.example /etc/nginx/sites-available/summonerapi.conf
# Edit domain and SSL settings
nano /etc/nginx/sites-available/summonerapi.conf
# Enable site
ln -s /etc/nginx/sites-available/summonerapi.conf /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx# Run in development mode with auto-reload
./mvnw spring-boot:run
# Run with specific profile
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
# Debug mode (port 5005)
./mvnw spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"# Start dev server with hot reload
npm run dev
# Dev server runs on http://localhost:5173
# API requests are proxied to http://localhost:8080Flyway migrations are located in src/main/resources/db/migration/:
# Migrations run automatically on application startup
# To create a new migration:
# 1. Create a file: V{version}__{description}.sql
# 2. Example: V003__add_user_table.sql
# 3. Write your SQL migration
# 4. Restart the application-
Backend:
- Add entity in
entity/ - Create repository in
repository/ - Implement service in
service/ - Add controller in
controller/ - Write tests in
test/
- Add entity in
-
Frontend:
- Create component in
components/ - Add API call in
api/ - Create page in
pages/(if needed) - Add routing in
App.jsx - Write tests
- Create component in
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
./mvnw verify && npm test - Commit with conventional commits:
git commit -m "feat: add amazing feature" - Push to your fork:
git push origin feature/amazing-feature - Open a Pull Request
We follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting, etc.)refactor:Code refactoringtest:Adding or updating testschore:Maintenance tasks
- Backend: Follow Google Java Style Guide (enforced by Checkstyle)
- Frontend: Follow Airbnb JavaScript Style Guide (enforced by ESLint)
- Run
./mvnw checkstyle:checkstyleandnpm run lintbefore committing
- Update the README.md with details of changes if applicable
- Ensure all tests pass and code quality checks succeed
- Update documentation for any API changes
- The PR will be merged once approved by maintainers
This project is not endorsed by Riot Games and does not reflect the views or opinions of Riot Games or anyone officially involved in producing or managing Riot Games properties. Riot Games and all associated properties are trademarks or registered trademarks of Riot Games, Inc.
By using this application, you acknowledge and agree to the following:
- This project uses the Riot Games API under their Developer Terms of Service
- All game data, assets, and content are property of Riot Games, Inc.
- This is an unofficial, third-party application and is not affiliated with, endorsed by, or sponsored by Riot Games
- Users must comply with the Riot Games API Terms of Service
- Users must comply with the Riot Games Terms of Service
IMPORTANT: To use this application, you must:
- Obtain your own Riot Games API key from https://developer.riotgames.com/
- Comply with Riot's API Usage Policy
- Never share or expose your API key publicly
- Respect rate limits imposed by Riot Games
- Use the API only for non-commercial, educational, or personal purposes (unless you have a production API key)
- This application does not collect, store, or sell personal user data
- Match and summoner data is cached temporarily for performance optimization
- All data is sourced directly from the Riot Games API
- No analytics, tracking, or third-party data sharing is performed
- Users are responsible for their own API key security and usage
This software is provided "as is", without warranty of any kind, express or implied. The authors and contributors are not liable for any damages or issues arising from the use of this software.
⚠️ The application may stop working if Riot Games changes their API⚠️ Your API key may be rate-limited or revoked if you violate Riot's terms⚠️ The accuracy of data depends on the Riot Games API⚠️ This is a personal project and may contain bugs or incomplete features
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- ✅ Freedom to use: Use this software for any purpose (subject to API terms above)
- ✅ Freedom to study: Examine and modify the source code
- ✅ Freedom to share: Redistribute copies to help others
- ✅ Freedom to improve: Distribute your modified versions
⚠️ Share-alike: Derivative works must also be GPL-licensed⚠️ No warranty: Software is provided "as is" without warranty
Note: While this code is GPL-licensed, you must still comply with Riot Games' API Terms of Service when using their API.
- Riot Games - For providing the League of Legends API and game data
- Community Dragon - For additional game assets and resources
- Data Dragon - For champion, item, and spell data
- Spring Boot - For the amazing backend framework
- React - For the powerful frontend library
- Vite - For the blazing-fast build tool
League of Legends and Riot Games are trademarks or registered trademarks of Riot Games, Inc. League of Legends © Riot Games, Inc.
All game assets, data, and content displayed in this application are the intellectual property of Riot Games, Inc. and are used in accordance with their API Terms of Service.
- Author: Mavi
- Repository: github.com/zerox80/SummonerAPIv2
- Issues: Report a bug or request a feature
- For bugs or feature requests: Open an issue on GitHub
- For API-related issues: Contact Riot Games Developer Support
- For security vulnerabilities: Please report privately via GitHub Security Advisories
Note: This is a personal project maintained in spare time. Response times may vary.
- Real-time match spectator
- Advanced analytics dashboards
- Multi-language support (i18n)
- Champion mastery tracking
- Tier lists and meta analysis
- Friend comparison tools
- Mobile app (React Native)
- WebSocket for live updates
- Machine learning for win prediction
- Automated champion build aggregation
- Rate limiting system
- PostgreSQL persistence
- Docker containerization
- CI/CD pipeline
- Comprehensive testing
- API documentation
- Code quality tools
Made with ❤️ for the League of Legends community
⭐ Star this repo if you find it helpful! ⭐
This is an educational, open-source hobby project created for personal use and learning purposes by a solo developer.
I am not affiliated with or endorsed by Riot Games - this is just a passion project for the LoL community.
All League of Legends data, assets, and content are property of Riot Games, Inc.
Always respect the Riot Games API Terms of Service and Terms of Service.
League of Legends © Riot Games, Inc.