Libraries
Iodid stack — versions, links, pom.xml references and notes on R4J enums.
All versions are defined in pom.xml:13 (properties) and referenced in <dependencies> blocks. Always check pom.xml:15 for the actual version bump.
Table
| Library | Version | pom.xml | Link | Role in Iodid |
|---|---|---|---|---|
| R4J (Riot API for Java) | 2.8.1 | :259 com.github.stelar7:R4J | github.com/stelar7/R4J | Riot client — RiotApi, DDragonAPI, LoLAPI, MatchAPI, MatchListBuilder. Provides canonical enums LeagueShard, RegionShard, GameQueueType, TierType, TierDivisionType, LaneType |
| Jedis | 5.1.0 | :339 redis.clients:jedis:5.1.0 | github.com/redis/jedis | Redis driver — used via RedisClient/RedisKey. Cache only, never authoritative store |
| mongodb-driver-sync | 5.8.0 | :274 org.mongodb:mongodb-driver-sync:5.8.0 | github.com/mongodb/mongo-java-driver | Synchronous MongoDB driver — sole LoL runtime store (MongoDB nosql layer) |
| Spring Framework | 7.0.8 | :18 ${spring.version} → :112 spring-context, :117 spring-webmvc, :122 spring-test | spring.io | Controllers, validation LolApiParameters, LolApiResponses, LolApiExceptionHandler, error envelope LolApiError |
| Jackson Databind | 2.21.4 | :133 jackson-databind:2.21.4, :138 jackson-datatype-jsr310:2.21.4 | github.com/FasterXML/jackson | LoL JSON serialization + java.time types. Also used for TypeReference<List<String>> match ids (MatchService.java:57) |
| Caffeine | 3.1.8 | :243 com.github.ben-manes.caffeine:3.1.8 | github.com/ben-manes/caffeine | Local in-memory cache — secondary cache beyond Redis |
| FastUtil | 8.5.16 | :107 it.unimi.dsi:fastutil:8.5.16 | fastutil.di.unimi.it | High-performance primitive structures for statistical aggregations |
| JDA (Java Discord API) | 6.3.1 | :208 net.dv8tion:JDA:6.3.1 | github.com/discord-jda/JDA | Beebot Discord bot — non-LoL, not used by the Iodid flow. Present only for Discord integration in the monorepo |
| Tomcat Embed | 11.0.10 | :19 ${tomcat.version} → :129 tomcat-embed-core | tomcat.apache.org | Embedded HTTP runtime for Spring MVC |
| HikariCP | 6.2.1 | :325 com.zaxxer:HikariCP:6.2.1 | github.com/brettwooldridge/HikariCP | Connection pool (legacy MariaDB) |
| Lombok | 1.18.42 | :335 org.projectlombok:lombok:1.18.42 | projectlombok.org | Tests/utilities only — forbidden in operational LoL classes (AGENTS.md) |
| SLF4J / Logback | 2.1.0-alpha1 / 1.4.11 | :213 slf4j-api, :300 logback-core/classic | slf4j.org / logback.qos.ch | Logging via BotLogger |
References pom.xml:15
Excerpt of properties (pom.xml:13):
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>25</maven.compiler.source> <!-- pom.xml:15 -->
<maven.compiler.target>25</maven.compiler.target> <!-- pom.xml:16 -->
<java.version>25</java.version> <!-- pom.xml:17 -->
<spring.version>7.0.8</spring.version> <!-- pom.xml:18 -->
<tomcat.version>11.0.10</tomcat.version> <!-- pom.xml:19 -->
</properties>
maven.compiler.source/targetandjava.versionmust stay aligned (25).spring.versionis the single property for all Spring dependencies; bumping there propagates tospring-context,spring-webmvc,spring-test.- Other versions are inline in
<dependency>(e.g.jedis:5.1.0at:341,R4J:2.8.1at:261). A bump requires editing the<version>directly in the dependency.
To add a new library: add <dependency> in pom.xml:104, verify scope (compile vs runtime vs test), and update this table.
R4J — enums re-exported via utils
R4J (2.8.1, pom.xml:261) provides raw enums. Iodid does not expose these enums directly to controllers: it wraps them in typed utility classes that add validation, canonicalization and pretty-name (AGENTS.md — "Use existing utilities before adding new mapping logic"):
| R4J Enum | Wrapper | File | What it adds |
|---|---|---|---|
TierType, TierDivisionType | TierDivisionUtils | src/main/java/com/safjnest/lol/utils/TierDivisionUtils.java:13 | getMmr(division, lp) (:78), getMmrRange(tier) (:119), getTierFromMmr (:136), isHighElo (:21), getFormattedRank (:36), getAverageRank (:49), descendingRankedDivisions (:25) |
GameQueueType | GameQueueTypeUtils | src/main/java/com/safjnest/lol/utils/GameQueueTypeUtils.java:11 | canonicalQueue (:38) with TEAM_BUILDER_RANKED_SOLO -> RANKED_SOLO_5X5, hasLane (:30), isRankedSolo (:48), prettyName (:60), getMapEmoji (:80) |
LeagueShard, RegionShard | LeagueShardUtils | src/main/java/com/safjnest/lol/utils/LeagueShardUtils.java:14 | getActives (:64), getAccountRegion (:45), cacheRegion (:52), getRegionCode (:37), fromOrdinal (:28) |
LaneType | LaneTypeUtils | src/main/java/com/safjnest/lol/utils/LaneTypeUtils.java | playables() — filters only TOP,JUNGLE,MID,BOT,UTILITY, used by LolApiParameters.role (src/main/java/com/safjnest/spring/controller/LolApiParameters.java:171) |
Champion (DDragon) | ChampionUtils | src/main/java/com/safjnest/lol/utils/ChampionUtils.java:16 | getChampion(id), findChampion(name) with sanitization, getChampionProfilePic, sanitizeChampionName |
| Patch string | PatchUtils | src/main/java/com/safjnest/lol/utils/PatchUtils.java:16 | getPatch() (:20), patchMajor (:53), getRecentPatches(3) (:32), fetchPatches from DDragon (:82) |
| Season/split | SeasonUtils | src/main/java/com/safjnest/lol/utils/SeasonUtils.java:13 | getCurrentSeasonRange (:41), getCurrentSplitRange (:22), getSeasonRange(year) (:66), reading rsc/testing/lol_testing/split.json |
Example — queue validation in a controller (src/main/java/com/safjnest/spring/controller/LolApiParameters.java:61):
GameQueueType canonical = GameQueueTypeUtils.canonicalQueue(queue);
if (canonical == RANKED_SOLO_5X5 || canonical == RANKED_FLEX_SR) return canonical;
throw invalid("queue", "must be RANKED_SOLO_5X5, RANKED_FLEX_SR or TEAM_BUILDER_RANKED_SOLO");
This ensures the persisted and indexed value is always canonical, regardless of what the client sends.
Notes
- JDA is listed for monorepo completeness but is not a Iodid flow dependency. Do not import it in
com.safjnest.lol.*. Reference:AGENTS.md— primary LoL stack does not include JDA. - FastUtil and Caffeine are operational LoL dependencies; do not remove them without checking
ChampionServiceand local caches. - Jackson versions
2.21.4must stay aligned betweenjackson-databindandjackson-datatype-jsr310(same implicit property, two entries at:133and:138).
