libs.versions.toml
Each line, with the release that last changed it.
| 0.5.0 | 1 | [versions] |
| 2 | # Toolchain — bump as new stable releases land and re-sync. | |
| 3 | agp = "8.7.3" | |
| 4 | kotlin = "2.0.21" | |
| 5 | ksp = "2.0.21-1.0.28" | |
| 6 | hilt = "2.52" | |
| 7 | compileSdk = "35" | |
| 8 | minSdk = "26" | |
| 9 | targetSdk = "35" | |
| 10 | ||
| 11 | # AndroidX / Compose | |
| 12 | coreKtx = "1.15.0" | |
| 13 | appcompat = "1.7.0" | |
| 14 | lifecycle = "2.8.7" | |
| 15 | activityCompose = "1.9.3" | |
| 16 | composeBom = "2024.11.00" | |
| 17 | tvFoundation = "1.0.0-alpha11" | |
| 18 | tvMaterial = "1.0.0" | |
| 19 | navigationCompose = "2.8.4" | |
| 20 | hiltNavigationCompose = "1.2.0" | |
| 21 | media3 = "1.5.0" | |
| 22 | room = "2.6.1" | |
| 23 | datastore = "1.1.1" | |
| 24 | ||
| 25 | # UPnP — jUPnP 3.0.3 (maintained fork of the abandoned Cling project). | |
| 26 | # Published to Maven Central, unlike Cling. Requires Jetty 9.4.x for its HTTP transport | |
| 27 | # (jUPnP's AndroidUpnpServiceConfiguration pins the AsyncServletStreamServer built on Jetty); | |
| 28 | # we pin 9.4.48 because that's what jupnp upstream builds/tests against, and we're on minSdk 26 | |
| 29 | # so the 9.4.14 ceiling older projects hit for minSdk 21 doesn't apply. | |
| 30 | jupnp = "3.0.3" | |
| 31 | jetty = "9.4.48.v20220622" | |
| 32 | slf4j = "2.0.16" | |
| 33 | ||
| 34 | # Image loading + HTTP + kotlinx | |
| 35 | coil = "3.0.2" | |
| 36 | okhttp = "4.12.0" | |
| 37 | kotlinxCoroutines = "1.9.0" | |
| 38 | kotlinxSerialization = "1.7.3" | |
| 39 | ||
| 40 | # Cast (play flavor only) | |
| 41 | castFramework = "22.1.0" | |
| 42 | mediaRouter = "1.7.0" | |
| 43 | carApp = "1.7.0-rc01" | |
| 44 | androidxMedia = "1.7.0" | |
| 45 | ||
| 46 | [libraries] | |
| 47 | androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } | |
| 48 | androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } | |
| 49 | androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" } | |
| 50 | androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" } | |
| 51 | androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" } | |
| 52 | ||
| 53 | compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" } | |
| 54 | compose-ui = { module = "androidx.compose.ui:ui" } | |
| 55 | compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" } | |
| 56 | compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } | |
| 57 | compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } | |
| 58 | compose-material3 = { module = "androidx.compose.material3:material3" } | |
| 59 | compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } | |
| 60 | ||
| 61 | androidx-tv-foundation = { module = "androidx.tv:tv-foundation", version.ref = "tvFoundation" } | |
| 62 | androidx-tv-material = { module = "androidx.tv:tv-material", version.ref = "tvMaterial" } | |
| 63 | ||
| 64 | androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } | |
| 65 | androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" } | |
| 66 | ||
| 67 | hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } | |
| 68 | hilt-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" } | |
| 69 | ||
| 70 | media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" } | |
| 71 | media3-session = { module = "androidx.media3:media3-session", version.ref = "media3" } | |
| 72 | media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3" } | |
| 73 | media3-datasource-okhttp = { module = "androidx.media3:media3-datasource-okhttp", version.ref = "media3" } | |
| 74 | ||
| 75 | room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" } | |
| 76 | room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } | |
| 77 | room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } | |
| 78 | ||
| 79 | datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "datastore" } | |
| 80 | ||
| 81 | jupnp-core = { module = "org.jupnp:org.jupnp", version.ref = "jupnp" } | |
| 82 | jupnp-support = { module = "org.jupnp:org.jupnp.support", version.ref = "jupnp" } | |
| 83 | jupnp-android = { module = "org.jupnp:org.jupnp.android", version.ref = "jupnp" } | |
| 84 | ||
| 85 | jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "jetty" } | |
| 86 | jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "jetty" } | |
| 87 | jetty-client = { module = "org.eclipse.jetty:jetty-client", version.ref = "jetty" } | |
| 88 | ||
| 89 | # jUPnP logs through SLF4J; slf4j-jdk14 routes to java.util.logging which Android does implement, | |
| 90 | # so logs surface via logcat without extra config. | |
| 91 | slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } | |
| 92 | slf4j-jdk14 = { module = "org.slf4j:slf4j-jdk14", version.ref = "slf4j" } | |
| 93 | ||
| 94 | coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } | |
| 95 | coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" } | |
| 96 | coil-gif = { module = "io.coil-kt.coil3:coil-gif", version.ref = "coil" } | |
| 97 | ||
| 98 | okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } | |
| 99 | ||
| 100 | kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } | |
| 101 | kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" } | |
| 102 | ||
| 103 | # Cast — play flavor only. Referenced from the play sourceSet's dependencies block. | |
| 104 | play-services-cast-framework = { module = "com.google.android.gms:play-services-cast-framework", version.ref = "castFramework" } | |
| 105 | androidx-mediarouter = { module = "androidx.mediarouter:mediarouter", version.ref = "mediaRouter" } | |
| 106 | androidx-car-app = { module = "androidx.car.app:app", version.ref = "carApp" } | |
| 107 | androidx-media = { module = "androidx.media:media", version.ref = "androidxMedia" } | |
| 108 | ||
| 109 | [plugins] | |
| 110 | android-application = { id = "com.android.application", version.ref = "agp" } | |
| 111 | kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } | |
| 112 | kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } | |
| 113 | kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } | |
| 114 | ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } | |
| 115 | hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } |


