
In Android development, you're constantly dealing with the same set of three: Kotlin, the Compose Compiler, and KSP.
They seem like a friendly group, but their update schedules are always completely different! You upgrade Kotlin, and the Compose Compiler isn't compatible. You change something, and KSP throws a build error because of an internal API change...
To better manage this "dependency triangle" situation, the main idea is to use Renovate's configuration to treat them as a single unit. The simple plan is: "Raise all Kotlin ecosystem dependencies at the same time!"
🧑🏻💻 Brief overview of the renovate.json file
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base",
"group:all",
":dependencyDashboard",
"schedule:daily"
],
"baseBranches": ["main"],
"commitMessageExtra": "{{{currentValue}}} to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{prettyNewMajor}}{{else}}{{#if isSingleVersion}}{{prettyNewVersion}}{{else}}{{#if newValue}}{{{newValue}}}{{else}}{{{newDigestShort}}}{{/if}}{{/if}}{{/if}}{{/if}}",
"packageRules": [
{
"matchPackagePatterns": ["androidx.compose.compiler:compiler"],
"groupName": "kotlin"
},
{
"matchPackagePatterns": ["org.jetbrains.kotlin.*"],
"groupName": "kotlin"
},
{
"matchPackagePatterns": ["com.google.devtools.ksp"],
"groupName": "kotlin"
}
]
}
👉 architecture-samples/renovate.json at main · android/architecture-samples
Roughly summarized, here are the key points:
- groupName: "kotlin" to bundle dependencies This setting specifies that the three elements—the Compose Compiler, Kotlin, and KSP—should be treated as belonging to the "same group." This allows Renovate to update them all together at once.
- schedule: daily for a calm update pace This checks for updates once a day. You'll receive pull requests (PRs) on a daily basis, preventing a huge influx of dependency updates all at once, which makes things much easier to manage.
- commitMessageExtra to see changes at a glance The version difference, like "2.0.10 → 2.0.20," is automatically added to the PR title. It's a small tweak, but surprisingly useful.
Setting up your configuration this way significantly reduces the tragedy of "Kotlin got updated, but Compose broke..."
🧑🏻💻 What We Found While Using It
Once this setup is in place, you can feel much more confident testing updates for everything Kotlin-related. Renovate diligently checks daily, automatically creating a PR whenever a new version drops.
But there's one small warning:
The Compose Compiler sometimes takes a little extra time to catch up to the latest Kotlin version. So, don't just merge the PR when you see it—it's highly recommended to verify the CI status first.
KSP is similar; because it depends on Kotlin's internal workings, it's safer to update it along with Kotlin and run your tests together.
🧑🏻💻 Summary: Teach Renovate that "These Three Are a Set"
The configuration we discussed treats the trio of Kotlin, the Compose Compiler, and KSP as a single group.
- Bundle all Kotlin-related dependencies for simultaneous updates.
- Check for updates at a manageable daily pace.
- See version differences directly in the PR title.
Just implementing this significantly reduces the problems caused by versions getting out of sync and breaking your build.
💡 Key Takeaway: Use Renovate less as an "automatic update tool" and more as a "dependency rulebook."
We simply need to tell Kotlin, Compose, and KSP to cooperate and "work together."

