# Latest stable versions as of 2026-08-28 (checked against Google Maven / # Maven Central; prereleases deliberately skipped). zxing-embedded checked # 2026-08-25. [versions] agp = "9.3.2" kotlin = "2.4.10" compose-multiplatform = "1.12.0" # material3 ships on its own release train, separate from the CMP version. compose-material3 = "1.9.0" androidx-activityCompose = "1.13.0" # Declared rather than inherited because this # code now calls its extensions directly (SharedPreferences.edit, String # .toUri), and a transitive it merely inherited could change under it. androidx-core-ktx = "1.19.0" zxing-embedded = "4.3.0" # Markdown rendering for assistant replies. The widely-used Compose # Multiplatform renderer; markdown is somebody else's specification and a # hand-written subset disagrees with it at the edges, one bug report at a # time. # # Read the version from `maven-metadata.xml`, not from the search API: # `search.maven.org/solrsearch` still answers 0.26.0 with 0.27.0 only as # release candidates, which is what pinned this nineteen releases behind # and cost us table support -- tables arrived in 0.30.0 and simply # rendered as run-together text until then. # https://repo1.maven.org/maven2/com/mikepenz/multiplatform-markdown-renderer-m3/maven-metadata.xml # Latest stable there, checked 2026-08-29. markdown-renderer = "0.45.0" # Syntax highlighting for a tool call's input. Same reasoning as the markdown # renderer: a language's lexical rules are somebody else's specification. # Latest stable, checked 2026-08-31 against Maven Central. highlights = "1.1.0" # The support ExifInterface rather than android.media's, which lint warns off: # the framework one is missing formats and the fixes for parsing hostile # images, and images here arrive from outside the phone. Latest stable, # checked 2026-08-31 against Google Maven. androidx-exifinterface = "1.4.2" # Declared rather than inherited for the same reason as core-ktx: SessionScreen # now calls repeatOnLifecycle/LocalLifecycleOwner directly, to hold the event # stream open only while the screen is on screen. Latest stable, checked # 2026-08-29 against Google Maven; activity-compose alone would have pulled # 2.9.4. androidx-lifecycle = "2.11.0" # The Kotlin formatter, run at its defaults (see CODE_RULES rule 27). ktfmt # itself is Kotlin-org owned and has almost nothing to configure, which is # the point; this is the Gradle wrapper for it. Checked 2026-08-28. ktfmt-gradle = "0.27.0" # Backports java.time (and more) to API 24, which UsageScreen needs: its # reset countdown is OffsetDateTime/Duration, both API 26. Checked # 2026-08-28 against Google Maven. desugar-jdk-libs = "2.1.5" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core-ktx" } androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } # In-app QR scanner: a ready-made scanning Activity (camera preview, runtime # permission prompt, flashlight toggle) reached through the AndroidX Activity # Result API (ScanContract, added in 4.3.0). Fully offline -- no Play # Services / ML Kit model download involved. zxing-embedded = { module = "com.journeyapps:zxing-android-embedded", version.ref = "zxing-embedded" } desugar-jdk-libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-jdk-libs" } # The -m3 flavour: it takes its colours and type from the ambient Material 3 # theme, so the app's Catppuccin scheme is what it draws with. markdown-renderer = { module = "com.mikepenz:multiplatform-markdown-renderer-m3", version.ref = "markdown-renderer" } highlights = { module = "dev.snipme:highlights", version.ref = "highlights" } androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exifinterface" } # Declared directly rather than through the plugin's `compose.*` accessors, # which are deprecated as of CMP 1.11. compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose-multiplatform" } # Names composables in a system trace, which is how a per-frame cost on the # phone gets attributed to a composable rather than to "Compose". Inert until # a trace is being recorded. Its own release train: 1.12.0 was the newest # stable on Google Maven on 2026-09-02. compose-runtime-tracing = { module = "androidx.compose.runtime:runtime-tracing", version = "1.12.0" } compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "compose-multiplatform" } compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "compose-material3" } compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose-multiplatform" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } # For the :link subproject (wg-app-link/app), which resolves its plugins # from the build including it rather than from its own catalog. androidLibrary = { id = "com.android.library", version.ref = "agp" } composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" } composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "ktfmt-gradle" }