EARHORNMUSIC UPnP · Android TV · Phones · Android Auto · GNU/Linux
Release 0.5.0

libs.versions.toml

Each line, with the release that last changed it.

0.5.01[versions]
2# Toolchain
3kotlin = "2.0.20"
4agp = "8.5.2"
5compose-multiplatform = "1.7.0"
6coroutines = "1.8.1"
7koin = "4.0.0"
8
9# Android target (keep aligned with the existing Stave Android module)
10android-compileSdk = "34"
11android-minSdk = "24"
12android-targetSdk = "34"
13androidx-activity-compose = "1.9.2"
14
15# KMP-compatible lifecycle ViewModel (works on Android + Desktop JVM + iOS)
16androidx-lifecycle = "2.8.3"
17
18# UPnP — jUPnP is what the upstream Stave Android app already uses.
19jupnp = "3.0.5"
20
21# Desktop-only: libvlc bindings (system libvlc must be installed: `sudo apt install vlc`)
22vlcj = "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.
31chromecast-api = "0.12.20"
32
33# Coil 3 — Kotlin Multiplatform image loading for Compose (desktop + android).
34coil = "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.
38reorderable = "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).
42javax-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.
47jetty = "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.
54slf4j = "2.0.17"
55
56# Serialization, networking
57kotlinx-serialization = "1.7.1"
58okhttp = "4.12.0"
59
60# Testing
61kotest = "5.9.1"
62
63# dbus-java — MPRIS2 Linux media integration (media-indicator popup + keyboard media keys)
64dbus-java = "5.1.1"
65
66[libraries]
67# Coroutines
68kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
69kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" }
70kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
71kotlinx-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.
74androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle" }
75androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
76
77# Koin — works on both Android and Desktop
78koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
79koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" }
80koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" }
81koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" }
82
83# UPnP — jUPnP.
84jupnp-core = { module = "org.jupnp:org.jupnp", version.ref = "jupnp" }
85jupnp-support = { module = "org.jupnp:org.jupnp.support", version.ref = "jupnp" }
86
87# Networking
88okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
89
90# Android Compose glue
91androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" }
92
93# Desktop: VLCJ
94vlcj = { module = "uk.co.caprica:vlcj", version.ref = "vlcj" }
95chromecast-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.
98coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
99coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
100
101# Drag-to-reorder for Compose LazyColumn / LazyRow / grids.
102reorderable = { module = "sh.calvin.reorderable:reorderable", version.ref = "reorderable" }
103
104# Desktop: javax.servlet API for jUPnP's embedded Jetty
105javax-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.
108jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "jetty" }
109jetty-servlet = { module = "org.eclipse.jetty:jetty-servlet", version.ref = "jetty" }
110jetty-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.
113slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
114
115# Testing
116kotest-assertions = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" }
117
118# dbus-java (desktop-only) — MPRIS2 registration + multimedia-key support on Linux.
119dbus-java-core = { module = "com.github.hypfvieh:dbus-java-core", version.ref = "dbus-java" }
120dbus-java-transport-native-unixsocket = { module = "com.github.hypfvieh:dbus-java-transport-native-unixsocket", version.ref = "dbus-java" }
121
122[plugins]
123kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
124kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
125kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
126compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" }
127compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
128android-application = { id = "com.android.application", version.ref = "agp" }
129android-library = { id = "com.android.library", version.ref = "agp" }