Colton Idle
07/20/2026, 1:56 PMJohn
07/20/2026, 1:59 PMbuild-logic is the 99th percentile you speak of. if making structural changes to the project is something you want to optimize for, then yeah, putting your logic into a precompiled plugin is probably the way to go.John
07/20/2026, 2:05 PMColton Idle
07/20/2026, 2:07 PMColton Idle
07/20/2026, 2:10 PMJohn
07/20/2026, 2:12 PMbuild-logic doing? are all of its tasks UP-TO-DATE or FROM-CACHE?John
07/20/2026, 2:13 PMColton Idle
07/20/2026, 2:19 PM> Task :buildSrc:checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :buildSrc:generateExternalPluginSpecBuilders UP-TO-DATE
> Task :buildSrc:extractPrecompiledScriptPluginPlugins UP-TO-DATE
> Task :buildSrc:compilePluginsBlocks UP-TO-DATE
> Task :buildSrc:generatePrecompiledScriptPluginAccessors UP-TO-DATE
> Task :buildSrc:generateScriptPluginAdapters UP-TO-DATE
> Task :buildSrc:compileKotlin UP-TO-DATE
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Configure project :app
Local build
> Task :prepareKotlinBuildScriptModel UP-TO-DATE
and then I updated my android app version from 1.1 to 1.2 and hit sync and it took 33 seconds. lol
> Task :buildSrc:checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :buildSrc:generateExternalPluginSpecBuilders UP-TO-DATE
> Task :buildSrc:extractPrecompiledScriptPluginPlugins UP-TO-DATE
> Task :buildSrc:compilePluginsBlocks UP-TO-DATE
> Task :buildSrc:generatePrecompiledScriptPluginAccessors UP-TO-DATE
> Task :buildSrc:generateScriptPluginAdapters UP-TO-DATE
> Task :buildSrc:compileKotlin UP-TO-DATE
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Configure project :app
Local build
> Task :prepareKotlinBuildScriptModel UP-TO-DATE
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
BUILD SUCCESSFUL in 29s
9 actionable tasks: 9 up-to-dateJohn
07/20/2026, 2:26 PMJohn
07/20/2026, 2:26 PMJohn
07/20/2026, 2:27 PMColton Idle
07/20/2026, 2:31 PMJohn
07/20/2026, 2:32 PMColton Idle
07/20/2026, 2:35 PMColton Idle
07/20/2026, 2:36 PMJohn
07/20/2026, 2:43 PMJohn
07/20/2026, 2:43 PMColton Idle
07/20/2026, 2:48 PMColton Idle
07/20/2026, 4:10 PMColton Idle
07/20/2026, 4:11 PMVampire
07/20/2026, 4:31 PMesp since its something that gets published to the "public web"Yeah, well, if that is an issue, you can buy a Develocity license and so have your build scans private and also much more functionality like comparing two build scans and so on. 🙂
Seemingly the only change that meaningfully improved things was converiting to a binary kotlin plugin away from *.gradle.kts.Yes. If you are concerned about non-CC-hit builds, not having precompiled Kotlin DSL script plugins but only Groovy DSL precompiled script plugins, or even only normal plugins written in any JVM language (be it Groovy, Kotlin, Java, or whatever other language you prefer) is indeed a performance push. Because for precompiled Kotlin DSL script plugins, you for example always have the extra step to generate the accessors for the script plugins which can also be significant time as it needs to apply all the plugins from the
plugins { ... } block to find out which accessors to generate to then compile the actual script plugins.Vampire
07/20/2026, 4:32 PMbuildSrc or an included build-logic build should not have a significant performance impact either way. Since Gradle 8 the buildSrc is extremely similar to an included build and only different in slight but slippy details.John
07/20/2026, 4:39 PMJohn
07/20/2026, 4:40 PMVampire
07/20/2026, 4:47 PMidk why execution is included in this. i thought for sync it would only configure?The main build, yes. But the build logic still needs to be built of course, so I guess the execution comes from there. But the details sections should tell you.
John
07/20/2026, 4:51 PMVampire
07/20/2026, 4:56 PMJohn
07/20/2026, 4:59 PMColton Idle
07/20/2026, 5:36 PMVampire
07/20/2026, 5:57 PM*.gradle.kts file
precompiled Groovy DSL script plugin => *.gradle file
And I think what Colton meant was anything that is published, so is (pre-)compiled once at the time it is published.
With something that is built separately, published, and then just consumed like any other plugin you of course gain the most performance.
But from all things that live in buildSrc or a included build-logic build I think the only significant performance drain is, if you use precompiled Kotlin DSL script plugins as the accessors need to be generated for them.
Everything else is probably not so much performance relevant.
But like always with performance, don't trust any statistics you didn't falsify yourself, but measure your concrete case and options.
precompiled Kotlin DSL script plugins are basically a tradeoff off performance on recompilation against syntactic sugar.John
07/20/2026, 6:34 PMVampire
07/20/2026, 6:56 PMBinary plugins refer to plugins that are compiled and distributed as JAR files.So a plugin you have as
.kt file but in buildSrc or build-logic is not distributed as JAR file, so is not a binary plugin as per that definition.
And a plugin you have as .gradle.kts but in a dedicated plugin project that you build a jar from and publish to a repository falls under that definition, so actually is a binary plugin.
🙂Vampire
07/20/2026, 6:58 PMVampire
07/20/2026, 6:58 PMVampire
07/20/2026, 6:59 PMVampire
07/20/2026, 6:59 PMColton Idle
07/21/2026, 12:55 PMColton Idle
07/21/2026, 12:55 PMVampire
07/21/2026, 2:14 PMColton Idle
07/21/2026, 3:42 PMVampire
07/21/2026, 3:56 PMJohn
07/21/2026, 3:59 PMi feel like i know 0 about it, but somehow ive gotten stuck as the build expert on my team. lmaothis is how it happens...