Life is too short to google for dependencies and versions
We now support only Gradle 8+. Use Gradle 8+ or stick to version 0.60.3 if you can't yet.
Update the priority of artifact version key rules so that the longest match takes precedence, rather than the final key length.
That should fix the keys of androidx.wear.compose
libraries.
Some version keys were wrongly marked as unused following version 0.60.0. That's now fixed. Thanks to the reporters and people that helped in reproducing the issue!
Several Accompanist libraries were deprecated following this announcement. As a result, we updated removed them from refreshVersions. As usual, it won't break projects because we update the dependency notations with the equivalent string literal. Also, relevant inline comments with links will be added to assist migration.
AndroidX.core.performance.playServices
AndroidX.core.performance.testing
CashApp.sqlDelight.drivers.android
CashApp.sqlDelight.extensions.androidPaging3
CashApp.sqlDelight.extensions.coroutines
CashApp.sqlDelight.gradlePlugin
CashApp.sqlDelight.dialects.hSql
CashApp.sqlDelight.drivers.jdbc
CashApp.sqlDelight.dialects.mySql
CashApp.sqlDelight.drivers.native
CashApp.sqlDelight.dialects.postgreSql
CashApp.sqlDelight.extensions.rxJava2
CashApp.sqlDelight.extensions.rxJava3
CashApp.sqlDelight.drivers.jdbcSqlite
CashApp.sqlDelight.drivers.sqlJs
CashApp.sqlDelight.drivers.webWorker
Google.accompanist.adaptive
Google.accompanist.testHarness
Google.android.play.appUpdateKtx
Google.android.play.appUpdate
Google.android.play.assetDeliveryKtx
Google.android.play.assetDelivery
Google.android.play.featureDeliveryKtx
Google.android.play.featureDelivery
Google.android.play.reviewKtx
Google.android.play.review
Google.horologist.annotations
Google.horologist.auth.composables
Google.horologist.auth.data.phone
Google.horologist.auth.data.watchOAuth
Google.horologist.auth.data
Google.horologist.auth.ui
Google.horologist.compose.material
Google.horologist.dataLayer.grpc
Google.horologist.dataLayer.phone
Google.horologist.dataLayer.watch
Google.horologist.healthComposables
Google.horologist.media3.audioOffload
Google.horologist.media3.logging
Google.horologist.media3.outputSwitcher
Google.horologist.networkAwareness.db
Google.horologist.networkAwareness.okHttp
Google.horologist.networkAwareness.ui
refreshVersions
taskNow, running the refreshVersions
task repeatedly will be much faster, because it now supports
configuration cache fully! That also means that it's ready for Gradle 9 when it'll be released.
refreshVersions
configured for the buildSrc
too.buildSrc
too, a log would claim that new files were created after running the refreshVersions
task, when they were only modified, or not touched at all. We fixed it.refreshVersions
task, there would still be a log saying that versions.properties
and libs.versions.toml
(if any) were updated or created. Now, it's only shown if there are actual changes.refreshVersions
task, it would always claim that some versions were hardcoded as it counted project dependencies. We are now filtering those out, and we updated the wording to reflect that they might not be actually hardcoded, as is the case when versions come from a Gradle plugin.AndroidX.appSearch.debugView
AndroidX.appSearch.ktx
AndroidX.benchmark.baselineProfileGradlePlugin
AndroidX.camera.viewFinder
AndroidX.core.i18n
AndroidX.core.locationAltitude
AndroidX.core.telecom
AndroidX.core.testing
AndroidX.credentials.playServicesAuth
AndroidX.credentials
AndroidX.emoji2.picker
AndroidX.glance.material3
AndroidX.glance.material
AndroidX.graphics.path
AndroidX.graphics.shapes
AndroidX.media3.container
AndroidX.media3.effect
AndroidX.media3.muxer
AndroidX.mediaRouter.testing
AndroidX.privacySandbox.plugins.library
AndroidX.privacySandbox.sdkRuntime.client
AndroidX.privacySandbox.sdkRuntime.core
AndroidX.privacySandbox.tools.apiCompiler
AndroidX.privacySandbox.tools.apiGenerator
AndroidX.privacySandbox.tools.apiPackager
AndroidX.privacySandbox.tools.core
AndroidX.privacySandbox.tools
AndroidX.privacySandbox.ui.client
AndroidX.privacySandbox.ui.core
AndroidX.privacySandbox.ui.provider
AndroidX.room.gradlePlugin
AndroidX.tracing.perfetto.handshake
AndroidX.wear.compose.material3
AndroidX.wear.compose.uiTooling
AndroidX.wear.protoLayout.expression
AndroidX.wear.protoLayout.material
AndroidX.wear.protoLayout.renderer
AndroidX.wear.protoLayout
AndroidX.window.extensions.core
Google.android.playServices.deviceToDeviceInteractions
Google.android.playServices.gamesV2.nativeC
Google.android.playServices.gamesV2
Google.android.playServices.matter
Google.android.playServices.mlKit.naturalLanguage.smartReply
Google.android.playServices.mlKit.vision.barcodeScanning.codeScanner
Google.android.playServices.mlKit.vision.textRecognition.chinese
Google.android.playServices.mlKit.vision.textRecognition.devanagari
Google.android.playServices.mlKit.vision.textRecognition.japanese
Google.android.playServices.mlKit.vision.textRecognition.korean
Google.android.playServices.tfLite.accelerationService
Google.android.playServices.tfLite.gpu
Google.android.playServices.tfLite.java
Google.android.playServices.tfLite.support
Google.android.playServices.threadNetwork
Google.mlKit.vision.entityExtraction
Google.mlKit.vision.faceMeshDetection
Kotlin.gradlePlugin
Yesterday, Google released a BoM for Jetpack Compose. Today we're introducing first-class support for it.
To take advantage of it, you just need to add the dependency on platform(AndroidX.compose.bom)
.
Just like Firebase.bom
, make sure you add it before any dependent dependency:
dependencies {
implementation(platform(AndroidX.compose.bom)) // Add this FIRST
implementation(AndroidX.compose.material3) // Related dependencies AFTER
implementation(AndroidX.compose.material3.windowSizeClass) // Same as above
}
In case you need to use a pre-release version (alpha, beta, rc…), use the withVersionPlaceholder()
function as such:
dependencies {
implementation(platform(AndroidX.compose.bom)) // Enables the BoM and depends on it
implementation(AndroidX.compose.icons.extended) // Uses version defined in the BoM
implementation(AndroidX.compose.material3.withVersionPlaceholder()) // Separate version in versions.properties
}
Since last changes in the Version class, versions like 1.7.20-RC and 1.7.20-Beta would be marked as stable instead of respectively ReleaseCandidate and Beta because the logic expected a number in all cases.
The number is now optional for all pre-versions, except milestones.
To prevent future recurrence of such regression, this commit also adds tests that assert the expected stability level of many known versions from various libraries.
AndroidX.asyncLayoutInflater.appcompat
AndroidX.compose.bom
AndroidX.dataStore.core.okio
AndroidX.graphics.core
AndroidX.input.motionPrediction
AndroidX.paging.testing
AndroidX.test.espresso.device
AndroidX.tv.foundation
AndroidX.tv.material
Firebase.dynamicModuleSupport
Google.firebase.dynamicModuleSupport
Disable the old refreshVersionsDependenciesMapping
and migrateToRefreshVersionsDependenciesConstants
Gradle tasks.
versionFor
could not work as it should have if it was used in multiple modules with different values: the refreshVersions
task would only display the updates of some of them, and mark the other ones as unused. This has been fixed.refreshVersionsCleanup
task would log that the gradle/libs.versions.toml
file was modified even if it wasn't, and didn't exist in the first place. This is now fixed.AndroidX.media3.dataSource
ApolloGraphQL.adapters
ApolloGraphQL.api
ApolloGraphQL.ast
ApolloGraphQL.httpCache
ApolloGraphQL.idlingResource
ApolloGraphQL.mockserver
ApolloGraphQL.normalizedCacheSqlite
ApolloGraphQL.normalizedCache
ApolloGraphQL.runtime
ApolloGraphQL.testingSupport
Google.horologist.dataLayer
KotlinX.serialization.bom
KotlinX.serialization.json.okio
Spring.boot.web
Thanks to all the folks that contributed in this release!
Versions Catalogs are Gradle 7.4+ solution for storing dependencies and versions in a centralized file.
Gradle will automatically recognize the gradle/libs.versions.toml
file… and so will refreshVersions!
It is similar in spirit to the versions.properties
file, and we are happy to add support for it:
./gradlew refreshVersions
will now add available updates as comments inside the gradle/libs.versions.toml
file../gradlew refreshVersionsMigrate --mode=VersionCatalogAndVersionProperties
will generate a versions catalog and migrate your build to use it if you don't have one already.Currently, we only support the default versions catalog. If you need support for multiple versions catalogs, add your 👍 on this issue.
This is a big and new feature, so feel free to provide feedback in this thread, and report issues with the right info if there's no existing one here.
versionFor
, and Jetpack Compose!versionFor
was helpful when you need to access a version located in the versions.properties
file, but if there was no dependency using it, you'd never see any updates.
For projects/modules using Jetpack Compose from Google, that meant you'd never see any updates for the compiler, and you'd need to look it up yourself.
Also, the version entry would be marked as unused, or would be the wrong one if you shared it with other Compose artifacts since the compiler now has its own versioning track.
Now, passing a dependency notation such as AndroidX.compose.compiler
to versionFor
is exactly the same as if you used the dependency somewhere in the project:
You'll get all the updates, and if the version is not yet specified in the versions.properties
file, as usual, refreshVersions will try to find the latest most stable version available, plus it will also add the available comments for any newer, less stable version.
That makes it even easier to start a project with Jetpack Compose!
With this in a build.gradle.kts
file:
android {
composeOptions {
kotlinCompilerExtensionVersion = versionFor(AndroidX.compose.compiler) // Kotlin DSL
kotlinCompilerExtensionVersion = versionFor(project, AndroidX.compose.compiler) // Groovy DSL
}
}
AndroidX.compose.compiler
is equivalent to "androidx.compose.compiler:compiler:_"
.
You'll get that in the versions.properties
file if you were on version 1.3.0-rc01
:
version.androidx.compose.compiler=1.3.0-rc01
## # available=1.3.0-rc02
## # available=1.3.0
To make it easy to start new projects, new modules, or using a common library, we spent a lot of time adding built-in dependency notations for Kotlin, kotlinx, AndroidX, and more.
However, it wasn't so easy to know that they exist. That's why we made a dedicated page where you can find them all! Let us know how helpful it is to you!
rejectVersionIf { … }
had an issue: its removal would not be taken into account until the Gradle daemon would be killed. This now behaves correctly.pluginManagement { … }
, which might have led to Gradle plugin updates being missed by refreshVersions. Now, we look up these repositories as well.AndroidX.appSearch.builtInTypes
AndroidX.compose.runtime.tracing
AndroidX.core.uwb
AndroidX.core.uwb.rxJava3
AndroidX.health.connect.client
AndroidX.javascriptEngine
AndroidX.lifecycle.runtime.compose
AndroidX.room.paging.guava
AndroidX.room.paging.rxJava2
AndroidX.room.paging.rxJava3
AndroidX.tracing.perfetto
CashApp.molecule.gradlePlugin
CashApp.molecule.runtime
CashApp.molecule.test
Google.accompanist.drawablePainter
Google.accompanist.flowLayout
Google.accompanist.navigationAnimation
Google.accompanist.navigationMaterial
Google.accompanist.permissions
Google.accompanist.placeholder
Google.accompanist.placeholder.material
Google.accompanist.webView
Google.ambient.crossDevice
Google.horologist.audio
Google.horologist.audio.ui
Google.horologist.composables
Google.horologist.compose.layout
Google.horologist.compose.tools
Google.horologist.media
Google.horologist.media.data
Google.horologist.media.ui
Google.horologist.media3.backend
Google.horologist.networkAwareness
Google.horologist.tiles
Square.okHttp3.mockWebServer3
Square.okHttp3.mockWebServer3.junit4
Square.okHttp3.mockWebServer3.junit5
Square.okHttp3.android
Square.okHttp3.brotli
Square.okHttp3.coroutines
Square.okHttp3.dnsOverHttps
Square.okHttp3.sse
Square.okHttp3.tls
Square.okHttp3.urlConnection
Arrow.core
Arrow.fx.coroutines
Arrow.fx.stm
Arrow.optics
Arrow.optics.kspPlugin
Arrow.optics.reflect
Arrow.stack
Arrow.analysis.gradlePlugin
Koin.navigation
Testing.kotest.extensions.property.arbs
Testing.kotest.extensions.property.datetime
Ktor.client.contentNegotiation
Ktor.client.contentNegotiationTests
Ktor.client.gson
Ktor.client.jackson
Ktor.client.java
Ktor.client.okHttp
Ktor.client.resources
Ktor.plugins.events
Ktor.plugins.http
Ktor.plugins.http.cio
Ktor.plugins.io
Ktor.plugins.network
Ktor.plugins.networkTls
Ktor.plugins.networkTlsCertificates
Ktor.plugins.resources
Ktor.plugins.serialization
Ktor.plugins.serialization.gson
Ktor.plugins.serialization.jackson
Ktor.plugins.serialization.kotlinx
Ktor.plugins.serialization.kotlinx.cbor
Ktor.plugins.serialization.kotlinx.json
Ktor.plugins.serialization.kotlinx.tests
Ktor.plugins.serialization.kotlinx.xml
Ktor.server.auth
Ktor.server.auth.jwt
Ktor.server.auth.ldap
Ktor.server.autoHeadResponse
Ktor.server.cachingHeaders
Ktor.server.callId
Ktor.server.callLogging
Ktor.server.cio
Ktor.server.compression
Ktor.server.conditionalHeaders
Ktor.server.contentNegotiation
Ktor.server.cors
Ktor.server.dataConversion
Ktor.server.defaultHeaders
Ktor.server.doubleReceive
Ktor.server.forwardedHeader
Ktor.server.freeMarker
Ktor.server.hostCommon
Ktor.server.hsts
Ktor.server.htmlBuilder
Ktor.server.httpRedirect
Ktor.server.httpRedirect
Ktor.server.jte
Ktor.server.locations
Ktor.server.methodOverride
Ktor.server.metrics
Ktor.server.metricsMicrometer
Ktor.server.mustache
Ktor.server.partialContent
Ktor.server.pebble
Ktor.server.resources
Ktor.server.sessions
Ktor.server.statusPages
Ktor.server.testSuites
Ktor.server.thymeleaf
Ktor.server.velocity
Ktor.server.webjars
Ktor.server.websockets
Ktor.server
Ktor.plugins.websocketSerialization
Ktor.plugins.websockets
Testing.assertj.core
Testing.assertj.db
Testing.assertj.guava
Testing.assertj.jodaTime
Testing.assertj.swing
Testing.hamcrest
Testing.hamcrest.core
Testing.hamcrest.library
JetBrains.exposed.core
JetBrains.exposed.dao
JetBrains.exposed.jdbc
KotlinX.dataframe
KotlinX.dataframe.arrow
KotlinX.dataframe.core
KotlinX.dataframe.excel
KotlinX.dataframe.dataframe
KotlinX.deeplearning.api
KotlinX.deeplearning.onnx
KotlinX.deeplearning.visualization
KotlinX.lincheck
KotlinX.lincheck.jvm
KotlinX.multik.api
KotlinX.multik.default
KotlinX.multik.jvm
KotlinX.multik.native
Spring.boms.springCloud
Thanks to all the folks that contributed in updating the built-in dependency notations!
CashApp.molecule
Google.accompanist
Google.horologist
and Square.okHttp3
Ktor
JetBrains.exposed
, Testing.assertj
, Testing.hamcrest
Spring.boms.springCloud
KotlinX.multik
, KotlinX.lincheck
, KotlinX.deeplearning
Arrow
And thanks to the GitHub sponsors of the maintainers @LouisCAD and @jmfayard who didn't count the hours spent on this project since 2018-2019!
We hope you save a lot of time thanks to this project and can therefore leave work early, or pursue more valuable tasks and projects. 😉
If you're not a sponsor yet, please consider becoming one, as a company, as an individual, or even both, it means a lot to us! Just click the heart button at the top of the GitHub repo webpage, follow the steps, and your heart. Thank you!