libs.versions.toml
129 lines · 6.5 KB
Changed in: 0.5.0
| 1 | [versions] |
| 2 | # Toolchain |
| 3 | kotlin = "2.0.20" |
| 4 | agp = "8.5.2" |
| 5 | compose-multiplatform = "1.7.0" |
| 6 | coroutines = "1.8.1" |
| 7 | koin = "4.0.0" |
| 8 | |
| 9 | # Android target (keep aligned with the existing Stave Android module) |
| 10 | android-compileSdk = "34" |
| 11 | android-minSdk = "24" |
| 12 | android-targetSdk = "34" |
| 13 | androidx-activity-compose = "1.9.2" |
| 14 | |
| 15 | # KMP-compatible lifecycle ViewModel (works on Android + Desktop JVM + iOS) |
| 16 | androidx-lifecycle = "2.8.3" |
| 17 | |
| 18 | # UPnP — jUPnP is what the upstream Stave Android app already uses. |
| 19 | jupnp = "3.0.5" |
| 20 | |
| 21 | # Desktop-only: libvlc bindings (system libvlc must be installed: `sudo apt install vlc`) |
| 22 | vlcj = "4.8.3" |
| 23 | |
| 24 | # Desktop-only: Chromecast support. The Android side uses Google Play Services' |
| 25 | # CastFramework, which has no JVM/desktop port. We use sfuhrm's fork of |
| 26 | # chromecast-java-api-v2 — the original (su.litvak.chromecast:api-v2) was last |
| 27 | # released in 2019 and is dormant; sfuhrm's fork actively maintains the same |
| 28 | # protocol implementation with updated jackson/slf4j/protobuf deps. Package |
| 29 | # names inside the JAR are unchanged (still `su.litvak.chromecast.api.v2.*`); |
| 30 | # only the Maven coordinates differ. |
| 31 | chromecast-api = "0.12.20" |
| 32 | |
| 33 | # Coil 3 — Kotlin Multiplatform image loading for Compose (desktop + android). |
| 34 | coil = "3.0.4" |
| 35 | |
| 36 | # sh.calvin.reorderable — drag-to-reorder for LazyColumn in Compose Multiplatform. |
| 37 | # 2.4.x is the right branch for our Kotlin 2.0.20 + Compose 1.7.0 pinning. |
| 38 | reorderable = "2.4.3" |
| 39 | |
| 40 | # javax.servlet API — required at runtime by jUPnP's embedded Jetty 9.x stream server |
| 41 | # (Jetty marks javax.servlet-api as provided-scope; the app supplies it). |
| 42 | javax-servlet = "4.0.1" |
| 43 | |
| 44 | # Jetty 9.4.x — jUPnP 3.0.x uses Jetty 9.x as its default stream server transport, |
| 45 | # also marked provided-scope. We need jetty-server, jetty-servlet, jetty-client. |
| 46 | # Stay on 9.4.x (newest security release); 10.x switches to jakarta.servlet namespace which jUPnP doesn't target. |
| 47 | jetty = "9.4.58.v20250814" |
| 48 | |
| 49 | # SLF4J 2.0.x binding — jUPnP 3.0.x brings slf4j-api 2.x in transitively, so the |
| 50 | # binding has to match that line; 1.7.x bindings are flat-out ignored at runtime |
| 51 | # ("Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier"). |
| 52 | # Without a matching binding loaded, errors during stream-server startup are |
| 53 | # silently swallowed; slf4j-simple writes everything to stderr. |
| 54 | slf4j = "2.0.17" |
| 55 | |
| 56 | # Serialization, networking |
| 57 | kotlinx-serialization = "1.7.1" |
| 58 | okhttp = "4.12.0" |
| 59 | |
| 60 | # Testing |
| 61 | kotest = "5.9.1" |
| 62 | |
| 63 | # dbus-java — MPRIS2 Linux media integration (media-indicator popup + keyboard media keys) |
| 64 | dbus-java = "5.1.1" |
| 65 | |
| 66 | [libraries] |
| 67 | # Coroutines |
| 68 | kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } |
| 69 | kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" } |
| 70 | kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } |
| 71 | kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } |
| 72 | |
| 73 | # Lifecycle — the KMP artifact works on commonMain and supplies ViewModel + viewModelScope. |
| 74 | androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle" } |
| 75 | androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } |
| 76 | |
| 77 | # Koin — works on both Android and Desktop |
| 78 | koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } |
| 79 | koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" } |
| 80 | koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" } |
| 81 | koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } |
| 82 | |
| 83 | # UPnP — jUPnP. |
| 84 | jupnp-core = { module = "org.jupnp:org.jupnp", version.ref = "jupnp" } |
| 85 | jupnp-support = { module = "org.jupnp:org.jupnp.support", version.ref = "jupnp" } |
| 86 | |
| 87 | # Networking |
| 88 | okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } |
| 89 | |
| 90 | # Android Compose glue |
| 91 | androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } |
| 92 | |
| 93 | # Desktop: VLCJ |
| 94 | vlcj = { module = "uk.co.caprica:vlcj", version.ref = "vlcj" } |
| 95 | chromecast-api = { module = "de.sfuhrm:chromecast-java-api-v2", version.ref = "chromecast-api" } |
| 96 | |
| 97 | # Coil 3 (KMP) — image loader with AsyncImage composable, and the OkHttp-backed network fetcher. |
| 98 | coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } |
| 99 | coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" } |
| 100 | |
| 101 | # Drag-to-reorder for Compose LazyColumn / LazyRow / grids. |
| 102 | reorderable = { module = "sh.calvin.reorderable:reorderable", version.ref = "reorderable" } |
| 103 | |
| 104 | # Desktop: javax.servlet API for jUPnP's embedded Jetty |
| 105 | javax-servlet-api = { module = "javax.servlet:javax.servlet-api", version.ref = "javax-servlet" } |
| 106 | |
| 107 | # Desktop: Jetty 9.4.x — provided deps of jUPnP, supplied by us. |
| 108 | jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "jetty" } |
| 109 | jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "jetty" } |
| 110 | jetty-client = { module = "org.eclipse.jetty:jetty-client", version.ref = "jetty" } |
| 111 | |
| 112 | # Desktop: SLF4J 2.0 simple binding so jUPnP/Jetty log to stderr instead of being silent. |
| 113 | slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } |
| 114 | |
| 115 | # Testing |
| 116 | kotest-assertions = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" } |
| 117 | |
| 118 | # dbus-java (desktop-only) — MPRIS2 registration + multimedia-key support on Linux. |
| 119 | dbus-java-core = { module = "com.github.hypfvieh:dbus-java-core", version.ref = "dbus-java" } |
| 120 | dbus-java-transport-native-unixsocket = { module = "com.github.hypfvieh:dbus-java-transport-native-unixsocket", version.ref = "dbus-java" } |
| 121 | |
| 122 | [plugins] |
| 123 | kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } |
| 124 | kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } |
| 125 | kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } |
| 126 | compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" } |
| 127 | compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } |
| 128 | android-application = { id = "com.android.application", version.ref = "agp" } |
| 129 | android-library = { id = "com.android.library", version.ref = "agp" } |


