- Adds experimental support to jvm for configuring multi-release Jars to include
module-info.java
1.
Show
- Interesting KMP architecture sample
- GitHub signed commits
- https://kotlinlang.org/docs/whatsnew-eap.html#data-class-copy-function-to-have-the-same-visibility-as-constructor
- https://kotlinlang.org/docs/whatsnew-eap.html#concurrent-marking-in-garbage-collector
-Xrender-internal-diagnostic-names
- SoftRefLRUPolicyMSPerMB + ReservedCodeCacheSize JVM args
- https://checks.google.com/
- Auto complience tool
- Filter duplicate lint issues from the merged baseline and report.
- Gradle plugin to create Kotlin/JS projects using Vite
- https://github.com/LionZXY/detekt-decompose-rule
- Gradle 8.8 support
org.gradle.unsafe.isolated-projects=true
for Kotlin 2.0.20 (JVM/Android/KAPT only)-Xconsistent-data-class-copy-visibility
for Kotlin 2.0.20- Streamline kotlin configuration and JDK setup
- Project appearance in the IDE.
- Create a unified root task
updateBaseline
that depends automatically on all baseline tasks for all connected tools. - Create a special tasks to save all extra detektPlugins in a single folder for easier usage from the IDE.
- Configure Detekt in the IDE right away to use this folder for plugins via
.idea/detekt.xml
. - Also, set the project config file path in the same XML config.
- Research if it's possible to ask IDE to install the Detekt plugin if not installed.
- Configure Detekt in the IDE right away to use this folder for plugins via
- Kotlin Power-assert compiler plugin
- https://github.com/jacobras/Human-Readable/commit/041c5dedbd2aa1079616ceb445c93ab3c7547630
- https://github.com/WasmEdge/WasmEdge?tab=readme-ov-file#license
- https://github.com/eygraber/gradle-conventions/blob/master/conventions-detekt/src/main/kotlin/com/eygraber/conventions/detekt/register_detekt_task.kt
- takahirom/roborazzi#302 (comment)
- https://github.com/JakeWharton/kmp-missing-targets
- https://github.com/eygraber/gradle-conventions
- Kover plugin integration and support
- Only export the framework under an Xcode build as part of the pre-build step script ("XCODE_VERSION_MAJOR")
- Compose Screenshot Testing
- Code quality rules:
first()
on Flow (notStateFlow
or at leastSharedFlow
) isdangerous and easily can lead to infinite suspension.- Same for
Deffered.await()
,select{}
with no timeout option, etc.
- https://developers.google.com/android/guides/setup
- Show open-source licenses
com.google.android.gms:oss-licenses-plugin
- Strict version checking
com.google.android.gms:strict-version-matcher-plugin
- Show open-source licenses
- Support
-Xconsistent-data-class-copy-visibility
for Kotlin 2.0.20 - Support auto detection if
-Xjdk-release
can be used. Fail only for release builds. Warn otherwise.- If there's no
ct.sym
file in JDK but-Xjdk-release
is used, the compiler will stop with an error. The only workaround in that case is to remove-Xjdk-release
. - https://youtrack.jetbrains.com/issue/KT-29974#focus=Comments-27-9458958.0-0
- If there's no
- Kotlin MPP publication: add an option to support non-Gradle consumers
- Security setup
- Setup for securing API keys in
BuildConfigs
(generated code in general) and in the usual code.
- Setup for securing API keys in
- GIT hooks
- Spotless
- Detekt
- KtLint
- GraalVM native build + UPX compression
- IDEA Ext plugin (declare IDEA settings via gradle)
- Louvain algorithm to analyze class dependencies and rank deduced modules based on their conductance score. Lobzik is a Gradle plugin for helping to modularise large Android codebases.
- https://github.com/topjohnwu/libsu/blob/01570d643af91b0e271de018465a219eed8db322/service/build.gradle.kts#L21
- Disambiguate existing javadoc and sources tasks
- Check BuildConfig tasks (not called on IDE sync?!)
- CI improvements
- Repo/build/CI examples.
- Build Variants setup
- Compose improvements
- compose-report-to-html
- Decomposer
- Gradle Plugin TestKit (Docs)
- https://github.com/square/radiography
- https://github.com/JetBrains-Research/reflekt
- https://github.com/mikepenz/AboutLibraries
- Publication tasks configuration cache problems.
- https://github.com/BenWoodworth/Parameterize
- Detekt
- https://github.com/yandexmobile/detekt-rules-ui-tests
- https://detekt.dev/marketplace
- Custom detekt/lint rules
- Warn on nutable (var) fields in data classes or beans.
- Warn on data classes overall (public api, android app, etc.)
- По гайдлайнам если есть хоть 1 именованный параметр нужно все именовать
- Бед практис передавать мьютбл (collection, etc.) в параметрах
- Add lint check to warn about calls to mutableStateOf with a State object
- Forbid on
java.util.Locale
in Android or commonJvm code.- It's not linked to Android
Context
orConfiguration
and can lead to issues with localization. - Public declarations in the private companion object are still compiled as public in bytecode with additional deprecation annotation.
- It's better to use private in this case to simplify bytecode and a shrinker life.
- Replace set with list (for public) or array (for private) things if no
contains
method used? - Replace
setOf
withhashSetOf
(casted as read-onlySet
) when order is actually not important. - Prefer method reference to usual lambda with on action when acceptable.
- Replace .not() with ! operator.
- Architecture
- UseCase.
- Should be Main-safe.
- Should not use blocking operations.
- No platform-specific code or UI layer. E.g. should not have any dependencies on Android.
- Should have a single responsibility. Only one method.
- Should not have any state/fields.
- UseCase.
- It's not linked to Android
- Create detekt rules for Gradle plugins best practices
- e.g., not to use
org.gradle.api.tasks.TaskCollection.matching
,findByName
, etc. whennamed
orwithType
is enough (don't early create tasks). - e.g., a task must not use any Project objects at execution time.
- Also, warn on any
org.gradle.internal
usage because its is internal API. - https://docs.gradle.org/8.5/userguide/configuration_cache.html#config_cache:requirements
- https://marcelkliemannel.com/articles/2022/common-gradle-plugin-mistakes-and-good-practices/
- https://github.com/liutikas/gradle-best-practices
- e.g., not to use
- Linting
- https://github.com/ashtanko/kotlin-app-template/tree/main
- Github Action + git-hook + Issues Template
- https://github.com/danger/kotlin
- Infrastructure plugins
- https://github.com/slackhq/slack-gradle-plugin/
- https://github.com/avito-tech/avito-android
- palantir gradle baseline
- Gradle Core plugins
- Gradle configuration
- https://github.com/Kotlin/kotlinx.coroutines/blob/d12eb45/kotlinx-coroutines-core/build.gradle#L238
- Test Suites
- Testing Gradle Builds
- Gradle TestKit: https://docs.gradle.org/current/userguide/test_kit.html
- TODO:
testSourceSets(sourceSets.functionalTest)
- TODO:
- Gradle TestKit: https://docs.gradle.org/current/userguide/test_kit.html
- TWiStErRob's Quality plugin for Gradle that supports Android flavors
- Nebula-plugins
- Healthy defaults for a standard Gradle project.
- https://github.com/nebula-plugins/nebula-project-plugin
- Builds Javadoc and Sources jars.
- Doesn't fail javadoc if there are none found.
- Record information about the build and stores it in the .jar, via gradle-info-plugin.
- Easy specification of people involved in a project via gradle-contacts-plugin.
- Introduces Nebula Dependency Lock Plugin out of the box, supports Gradle's Locking dependency versions mechanism too.
- Introduces Nebula Facet Plugin. A routine pattern is wanting a new SourceSet with an accompanying Configuration for dependencies.
- Introduces IntegTest Plugin specifically for Integration Tests.
- Nebula Dependency Lock Plugin
- https://github.com/nebula-plugins/gradle-dependency-lock-plugin
- Allows people using dynamic dependency versions to lock them to specific versions.
- Support saving and checking hash or signature of dependency in a report.
- Also note for safety against supply chain attacks: dropbox/dependency-guard#103
- Plugin to gather information about the environment
- https://github.com/nebula-plugins/gradle-info-plugin
- Noninvasively collect information about the environment, and make information available to other plugins in a statically typed way.
- When possible lazily calculate info.
- https://github.com/nebula-plugins/gradle-contacts-plugin
- Structure to define the owners of a project, then contributing this back to other plugins.
- Linter tool for identifying and reporting on patterns of misuse or deprecations in Gradle scripts (groovy-only).
- Gradle plugin for providing reusable dependency resolution rules.
- Gradle capabilities and transforms to ease the migration from Java EE to Jakarta EE.
- Gradle plugin for constructing linux packages, specifically RPM and DEBs.
- Publishing related plugins
- Test harness for Gradle plugins, leveraging Spock.
- Adds lot of NodeJS-based technologies as part of build without having Node.js installed locally.
- Kotlin library providing extensions to assist with Gradle iterop and backwards compatibility.
- Gradle plugin introducing a provided dependency configuration and marking a dependency as optional.
- Base SCM Plugin for gathering information or performing actions (Archived).
- Healthy defaults for a standard Gradle project.
- SgtSilvio gradle plugins
- Example: https://github.com/SgtSilvio/gradle-proguard/blob/61e7230/build.gradle.kts
- Gradle plugin to ease using and producing (multi-arch) OCI (Open Container Initiative, prev. Docker) images.
without requiring external tools.
- https://github.com/SgtSilvio/gradle-oci
- https://github.com/SgtSilvio/oci-registry (OCI registry Java library that allows serving OCI artifacts to pull operations).
- https://github.com/SgtSilvio/gradle-oci-junit-jupiter.
- Gradle plugin to ease defining project metadata (urls, license, scm).
- module name, readable name, url, docUrl, organization, license, developers, issue management, github.
- https://github.com/SgtSilvio/gradle-metadata
- Gradle plugin to ease defining Javadoc links.
- Gradle plugin that configures sensible defaults.
- https://github.com/SgtSilvio/gradle-defaults
- UTF 8 for Java compilation and Javadoc
- Reproducible artifacts
- Granular test reports per test case (method instead of class)
- iurysza
- A Gradle Plugin for visualizing your project's structure, powered by mermaidjs.
- A project setup to bootstrap kotlin library development.
- https://github.com/BenWoodworth/Parameterize
- https://github.com/kotlin-hands-on/kotlin-swift-interopedia
- https://github.com/drewhamilton/Poko/
- https://telegra.ph/Compose-stabilityConfigurationPath-11-30
- https://github.com/yandexmobile/detekt-rules-ui-tests
- https://github.com/VKCOM/vkompose/
- https://github.com/saveourtool/diktat
- https://github.com/Kotlin/kotlinx-benchmark/
- https://github.com/Anamorphosee/stacktrace-decoroutinator
- https://gitlab.com/opensavvy/ci-templates
- https://github.com/gmazzo/gradle-codeowners-plugin
- https://github.com/gmazzo/gradle-docker-compose-plugin
- https://github.com/gmazzo/gradle-report-publications-plugin
- !! https://github.com/gmazzo/gradle-android-manifest-lock-plugin
- Shadowing + minification
- https://github.com/GradleUp/gr8 (Gr8 = Gradle + R8)
- https://github.com/nbadal/ktlint-intellij-plugin/pull/501/files
- Task used by the UI and Android tests to check minification results and keep track of binary size.
- A Gradle plugin that infers Proguard/R8 keep rules for androidTest sources.
- dProtect obfuscator
- Optimize app images
- Control licenses
- GitHub CI/CD, workflows and repo organization.
- Add automatic adding PR comment with Gradle Job Summary
- https://github.com/actions/dependency-review-action
- Compare artifacts in the commit (with prev commit) or PR (with upstream)
- https://github.com/square/leakcanary/tree/main/.github
- MythicDrops repo organization. MegaLinter.io checks. kodiakhq bot.
- MythicDrops/mythicdrops-gradle-plugin#108
- https://github.com/MythicDrops/mythicdrops-gradle-plugin?tab=readme-ov-file#maven-publish-plugin
- Configures published Maven POMs to include
compileOnly
dependencies asprovided
. - Configures the project to sign published artifacts with GPG if
PGP_KEY
andPGP_PWD
environment variables are available.
- Configures published Maven POMs to include
- https://github.com/MythicDrops/mythicdrops-gradle-plugin?tab=readme-ov-file#base-project-plugin
- Applies the nebula.project Gradle plugin.
- Applies the com.adarshr.test-logger Gradle plugin (with Mocha theme).
- Configures all test tasks to use JUnit Jupiter.
- Applies the org.shipkit.shipkit-auto-version Gradle plugin.
- Karol Wrótniak tools
- https://github.com/koral--/gradle-pitest-plugin
- https://github.com/koral-- (note profile readme)
- Screenshot testing https://github.com/pedrovgs/Shot
- Stores publishing
- CI security scanning of Android app using AppSweep (API KEY REQUIRED)
- Java 9 modularity support (JPMS)
- https://github.com/Kotlin/kotlinx.coroutines/blob/d12eb45/buildSrc/src/main/kotlin/Java9Modularity.kt
- KotlinCrypto/secure-random#13
- KotlinCrypto/core#58
- KotlinCrypto/core#56
- JetBrains/java-annotations#103
- oshai/kotlin-logging#365
- https://github.com/05nelsonm/gradle-kmp-configuration-plugin/pull/50/files
- https://github.com/05nelsonm/gradle-kmp-configuration-plugin/pull/45/commits/cc603b37d2e5bd09f9b391edcf0ff3ccdc26dec2
- Common utils
- States and Events
- Builds organization (multiple flavors, build types, build targets)
- Validate & diff resulting artifacts
- Gradle task to report native libs from dependencies (dependency + names of the native binaries)
- Gradle plugin for generating Android / KMP string resources from Google Spreadsheets.
- 🐘 A template to let you started with custom Gradle Plugins + Kotlin in a few seconds
- Jsmints is a suite of libraries and gradle plugins for working with Kotlin JS, with a focus on testing and version updating.
- A Palantir set of Gradle plugins that configure default code quality tools for developers.
- Gradle plugin for detecting use of legacy APIs which modern Java versions supersede.
- Check ABI compatibility at build time
- Kotlin/JS Fast Configuration
- https://github.com/turansky/kfc-plugins
- https://github.com/turansky/seskar (Kotlin/JS sugar)
- Publish Kotlin/JS to NPM and JSR (https://jsr.io/).
- KtLint-cli setup
- Trace the recomposition of a Composable with its cause without boilerplate code
- Gradle Plugin that allows you to decompile bytecode compiled with Jetpack Compose Compiler Plugin into Java and check it
calf-file-picker
with JS and Wasm support. And other compat widgets.- A Kotlin Symbol Processor to list sealed object instances safely in generated code.
- Disable klib signature clash checks for JS compilations (Compose)
- multiplatform libs to work w/ maven without requiring users to explicitly depend on the -jvm artifact.
- https://kotlinlang.slack.com/archives/C8C4JTXR7/p1706909911878839
- Kotlinx Serialization achieves this by editing the POM for the unflavoured module
- Arrow does the same
- Coroutines