[versions] agp = "9.3.1" # Kotlin is capped by KSP and Hilt, which build against 2.3.x — 2.4 is ahead of # both, and Hilt's annotation processing runs through KSP. kotlin = "2.3.21" ksp = "2.3.11" hilt = "2.60.1" coreKtx = "1.19.0" lifecycle = "2.11.0" activityCompose = "1.13.0" composeBom = "2026.08.00" # material3 is pinned ahead of the BOM, which is still on 1.4.0. The expressive # API — MaterialExpressiveTheme, MotionScheme, MaterialShapes, ButtonGroup, # LoadingIndicator, FloatingToolbar — is `internal` in 1.4.0 and only becomes # public in the 1.5 train, which has not left alpha. Everything else still # comes from the BOM, so this is the one artifact off the stable train. material3 = "1.5.0-alpha26" navigation = "2.9.8" # material3-adaptive ships on its own train, independent of the Compose BOM. adaptive = "1.3.0" serialization = "1.11.0" okhttp = "5.5.0" coil = "3.5.0" browser = "1.10.0" hiltNavigation = "1.4.0" exifinterface = "1.4.2" # camera-compose ships on the same train; CameraXViewfinder is the Compose-native # viewfinder, so the story camera needs no AndroidView wrapper. camerax = "1.6.2" h3 = "4.5.0" maplibreCompose = "0.14.0" firebaseBom = "34.18.0" googleServices = "4.5.0" # Must match the version AGP embeds in the APK for on-device coverage — the # `.ec` files a mismatched runtime writes fail to parse in the report task. # Set in both places: here for the report, android.testCoverage for the APK. jacoco = "0.8.13" junit = "4.13.2" androidxJunit = "1.3.0" testRunner = "1.7.0" # Matches the coroutines version the app resolves to; runTest and setMain have # to come from the same release as the runtime they are driving. coroutinesTest = "1.10.2" robolectric = "4.16" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" } androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" } androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx-ui = { group = "androidx.compose.ui", name = "ui" } androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" } androidx-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core" } androidx-material3-adaptive-navigation-suite = { group = "androidx.compose.material3", name = "material3-adaptive-navigation-suite", version.ref = "material3" } androidx-adaptive = { group = "androidx.compose.material3.adaptive", name = "adaptive", version.ref = "adaptive" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "browser" } androidx-camera-core = { group = "androidx.camera", name = "camera-core", version.ref = "camerax" } androidx-camera-camera2 = { group = "androidx.camera", name = "camera-camera2", version.ref = "camerax" } androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" } androidx-camera-compose = { group = "androidx.camera", name = "camera-compose", version.ref = "camerax" } androidx-exifinterface = { group = "androidx.exifinterface", name = "exifinterface", version.ref = "exifinterface" } h3 = { group = "com.uber", name = "h3-android", version.ref = "h3" } maplibre-compose = { group = "org.maplibre.compose", name = "maplibre-compose", version.ref = "maplibreCompose" } firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" } firebase-messaging = { group = "com.google.firebase", name = "firebase-messaging" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigation" } kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "serialization" } okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } okhttp-logging = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" } coil-network-okhttp = { group = "io.coil-kt.coil3", name = "coil-network-okhttp", version.ref = "coil" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidxJunit" } androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "testRunner" } androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "coroutinesTest" } robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" } androidx-test-core = { group = "androidx.test", name = "core", version.ref = "testRunner" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" }