# Versions verified against the official sources on 2026-08-18, not inherited # from docs/planning/PRODUCT_PLAN.md's own numbers — which that document asks # for explicitly. See docs/history/DEVELOPMENT_LOG.md for what was checked. [versions] agp = "9.3.1" kotlin = "2.4.10" ksp = "2.3.11" composeBom = "2026.08.00" coreKtx = "1.19.0" activityCompose = "1.13.0" lifecycle = "2.11.0" navigationCompose = "2.9.8" coroutines = "1.11.0" hilt = "2.60.1" hiltNavigationCompose = "1.4.0" junit = "4.13.2" androidxTestJunit = "1.3.0" espresso = "3.7.0" room = "2.8.4" sqlite = "2.7.0" robolectric = "4.16.1" androidxTestCore = "1.7.0" testRunner = "1.7.0" datastore = "1.2.1" work = "2.11.2" # 1.1.0 is the newest STABLE androidx.biometric, confirmed against # dl.google.com/dl/android/maven2/androidx/biometric/group-index.xml on # 2026-08-19: 1.4.0 is alpha only, biometric-ktx has never had a stable # release, and biometric-compose is alpha. A privacy app does not ship an # alpha in the one component that decides whether the app opens. biometric = "1.1.0" # Pinned, not inherited. androidx.biometric 1.1.0 asks for fragment 1.2.5 and # the graph settles on 1.5.1 — a 2022 library that would become MainActivity's # base class, beside activity 1.13.0 and lifecycle 2.11.0. 1.9.0 is the current # stable, checked the same day and the same way as biometric above. fragment = "1.9.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" } androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" } androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } compose-ui = { group = "androidx.compose.ui", name = "ui" } compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } compose-material3 = { group = "androidx.compose.material3", name = "material3" } compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" } kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "coroutines" } 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" } androidx-hilt-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltNavigationCompose" } androidx-hilt-lifecycle-viewmodel-compose = { group = "androidx.hilt", name = "hilt-lifecycle-viewmodel-compose", version.ref = "hiltNavigationCompose" } androidx-hilt-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltNavigationCompose" } hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigationCompose" } androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } androidx-room-testing = { group = "androidx.room", name = "room-testing", version.ref = "room" } androidx-work-runtime = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "work" } androidx-datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore" } androidx-biometric = { group = "androidx.biometric", name = "biometric", version.ref = "biometric" } androidx-fragment = { group = "androidx.fragment", name = "fragment", version.ref = "fragment" } androidx-sqlite-bundled = { group = "androidx.sqlite", name = "sqlite-bundled", version.ref = "sqlite" } robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" } androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidxTestCore" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidxTestJunit" } androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "testRunner" } androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "testRunner" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } room = { id = "androidx.room", version.ref = "room" }