
Opinionated Gradle plugins delivering sensible defaults for app modules: automatic namespace generation, Compose integration, DI and baseline-profile tooling, code formatting, and optimized build/test setup.
A module in a large project spends most of its build file repeating the same setup: the same
target platforms, the same compiler flags, the same test dependencies. These plugins move that
setup out of the build file and leave behind a scaffold {} block where a module declares only
the choices it actually has to make.
plugins {
id("io.github.thomaskioko.gradle.plugins.multiplatform")
}
scaffold {
addJvmTarget()
addIosTargets()
addAndroidTarget()
useMetro()
}Alongside the plugins are a KSP code generator that writes the navigation graph for an annotated presenter, and a ktlint rule set for the conventions a type cannot enforce.
https://thomaskioko.github.io/app-gradle-plugins/
scaffold {}../gradlew build # the root build
./gradlew spotlessApplyAll # format everything
./gradlew buildHealthAll # check dependencies
./gradlew dokkaAll # build the API reference
./deploy_website.sh --local # read the site while editing itReleasing is documented in RELEASING.md.
Copyright 2025 Thomas Kioko
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
A module in a large project spends most of its build file repeating the same setup: the same
target platforms, the same compiler flags, the same test dependencies. These plugins move that
setup out of the build file and leave behind a scaffold {} block where a module declares only
the choices it actually has to make.
plugins {
id("io.github.thomaskioko.gradle.plugins.multiplatform")
}
scaffold {
addJvmTarget()
addIosTargets()
addAndroidTarget()
useMetro()
}Alongside the plugins are a KSP code generator that writes the navigation graph for an annotated presenter, and a ktlint rule set for the conventions a type cannot enforce.
https://thomaskioko.github.io/app-gradle-plugins/
scaffold {}../gradlew build # the root build
./gradlew spotlessApplyAll # format everything
./gradlew buildHealthAll # check dependencies
./gradlew dokkaAll # build the API reference
./deploy_website.sh --local # read the site while editing itReleasing is documented in RELEASING.md.
Copyright 2025 Thomas Kioko
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.