IodidDOCUMENTATION

libraries.mdx

/doc/libraries

PUBLIC DOCUMENTATION

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

LibraryVersionpom.xmlLinkRole in Iodid
R4J (Riot API for Java)2.8.1:259 com.github.stelar7:R4Jgithub.com/stelar7/R4JRiot client — RiotApi, DDragonAPI, LoLAPI, MatchAPI, MatchListBuilder. Provides canonical enums LeagueShard, RegionShard, GameQueueType, TierType, TierDivisionType, LaneType
Jedis5.1.0:339 redis.clients:jedis:5.1.0github.com/redis/jedisRedis driver — used via RedisClient/RedisKey. Cache only, never authoritative store
mongodb-driver-sync5.8.0:274 org.mongodb:mongodb-driver-sync:5.8.0github.com/mongodb/mongo-java-driverSynchronous MongoDB driver — sole LoL runtime store (MongoDB nosql layer)
Spring Framework7.0.8:18 ${spring.version} → :112 spring-context, :117 spring-webmvc, :122 spring-testspring.ioControllers, validation LolApiParameters, LolApiResponses, LolApiExceptionHandler, error envelope LolApiError
Jackson Databind2.21.4:133 jackson-databind:2.21.4, :138 jackson-datatype-jsr310:2.21.4github.com/FasterXML/jacksonLoL JSON serialization + java.time types. Also used for TypeReference<List<String>> match ids (MatchService.java:57)
Caffeine3.1.8:243 com.github.ben-manes.caffeine:3.1.8github.com/ben-manes/caffeineLocal in-memory cache — secondary cache beyond Redis
FastUtil8.5.16:107 it.unimi.dsi:fastutil:8.5.16fastutil.di.unimi.itHigh-performance primitive structures for statistical aggregations
JDA (Java Discord API)6.3.1:208 net.dv8tion:JDA:6.3.1github.com/discord-jda/JDABeebot Discord bot — non-LoL, not used by the Iodid flow. Present only for Discord integration in the monorepo
Tomcat Embed11.0.10:19 ${tomcat.version} → :129 tomcat-embed-coretomcat.apache.orgEmbedded HTTP runtime for Spring MVC
HikariCP6.2.1:325 com.zaxxer:HikariCP:6.2.1github.com/brettwooldridge/HikariCPConnection pool (legacy MariaDB)
Lombok1.18.42:335 org.projectlombok:lombok:1.18.42projectlombok.orgTests/utilities only — forbidden in operational LoL classes (AGENTS.md)
SLF4J / Logback2.1.0-alpha1 / 1.4.11:213 slf4j-api, :300 logback-core/classicslf4j.org / logback.qos.chLogging via BotLogger

References pom.xml:15

Excerpt of properties (pom.xml:13):

xml
<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/target and java.version must stay aligned (25).
  • spring.version is the single property for all Spring dependencies; bumping there propagates to spring-context, spring-webmvc, spring-test.
  • Other versions are inline in <dependency> (e.g. jedis:5.1.0 at :341, R4J:2.8.1 at :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 EnumWrapperFileWhat it adds
TierType, TierDivisionTypeTierDivisionUtilssrc/main/java/com/safjnest/lol/utils/TierDivisionUtils.java:13getMmr(division, lp) (:78), getMmrRange(tier) (:119), getTierFromMmr (:136), isHighElo (:21), getFormattedRank (:36), getAverageRank (:49), descendingRankedDivisions (:25)
GameQueueTypeGameQueueTypeUtilssrc/main/java/com/safjnest/lol/utils/GameQueueTypeUtils.java:11canonicalQueue (:38) with TEAM_BUILDER_RANKED_SOLO -> RANKED_SOLO_5X5, hasLane (:30), isRankedSolo (:48), prettyName (:60), getMapEmoji (:80)
LeagueShard, RegionShardLeagueShardUtilssrc/main/java/com/safjnest/lol/utils/LeagueShardUtils.java:14getActives (:64), getAccountRegion (:45), cacheRegion (:52), getRegionCode (:37), fromOrdinal (:28)
LaneTypeLaneTypeUtilssrc/main/java/com/safjnest/lol/utils/LaneTypeUtils.javaplayables() — filters only TOP,JUNGLE,MID,BOT,UTILITY, used by LolApiParameters.role (src/main/java/com/safjnest/spring/controller/LolApiParameters.java:171)
Champion (DDragon)ChampionUtilssrc/main/java/com/safjnest/lol/utils/ChampionUtils.java:16getChampion(id), findChampion(name) with sanitization, getChampionProfilePic, sanitizeChampionName
Patch stringPatchUtilssrc/main/java/com/safjnest/lol/utils/PatchUtils.java:16getPatch() (:20), patchMajor (:53), getRecentPatches(3) (:32), fetchPatches from DDragon (:82)
Season/splitSeasonUtilssrc/main/java/com/safjnest/lol/utils/SeasonUtils.java:13getCurrentSeasonRange (: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):

java
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 ChampionService and local caches.
  • Jackson versions 2.21.4 must stay aligned between jackson-databind and jackson-datatype-jsr310 (same implicit property, two entries at :133 and :138).