|
| 1 | +[//]: # (title: Google Summer of Code with Kotlin 2025) |
| 2 | + |
| 3 | +This article contains the [list of project ideas](#project-ideas) for Google Summer of Code with Kotlin 2025, |
| 4 | +and [contributor guidelines](#kotlin-contributor-guidelines-for-google-summer-of-code-gsoc) |
| 5 | + |
| 6 | +> Kotlin resources: |
| 7 | +> * [Kotlin GitHub repository](https://github.com/jetbrains/kotlin) |
| 8 | +> * [Kotlin Slack](https://surveys.jetbrains.com/s3/kotlin-slack-sign-up) and the [#gsoc](https://slack-chats.kotlinlang.org/c/gsoc) Slack channel |
| 9 | +> |
| 10 | +> If you got any questions, [contact us](mailto:[email protected]) via [email protected] |
| 11 | +> |
| 12 | +{style="note"} |
| 13 | + |
| 14 | +## Kotlin contributor guidelines for Google Summer of Code (GSoC) |
| 15 | + |
| 16 | +### Getting started |
| 17 | + |
| 18 | +1. Check out the [GSoC FAQ](https://developers.google.com/open-source/gsoc/faq) and the [program announcement](https://summerofcode.withgoogle.com/). |
| 19 | + |
| 20 | +2. Familiarize yourself with the Kotlin language: |
| 21 | + * The official [Kotlin website](https://kotlinlang.org/) is a great place to start. |
| 22 | + * Read the official [documentation](getting-started.md) to get a better understanding of the language. |
| 23 | + * Take a look at the Kotlin courses on [JetBrains Academy](https://lp.jetbrains.com/academy/learn-kotlin/) or the Android team's [Training options](https://developer.android.com/courses/). |
| 24 | + * Follow the [Kotlin X](https://twitter.com/kotlin) account to stay up to date on the latest news and developments. |
| 25 | + * Check out the [Kotlin YouTube channel](https://www.youtube.com/@Kotlin) for tutorials, tips, and the latest updates. |
| 26 | + |
| 27 | +3. Get to know the Kotlin open source community: |
| 28 | + * Explore the general [Kotlin contribution guidelines](contribute.md). |
| 29 | + * [Join the Kotlin Slack channel](https://surveys.jetbrains.com/s3/kotlin-slack-sign-up) to connect with other developers and get help with any questions you may have. |
| 30 | + * [Join the #gsoc channel](https://slack-chats.kotlinlang.org/c/gsoc) to ask questions and get support from the GSoC team. |
| 31 | + |
| 32 | +### How to apply |
| 33 | + |
| 34 | +1. Check out the [project ideas](#project-ideas) and select the one you would like to work on. |
| 35 | +2. If you are not familiar with Kotlin, [read the introductory info on the Kotlin website](getting-started.md). |
| 36 | +3. Refer to the [GSoC contributor guidelines](https://google.github.io/gsocguides/student/writing-a-proposal). |
| 37 | +4. Apply via the [GSoC website](https://summerofcode.withgoogle.com/). |
| 38 | + * We suggest that you write a working code sample relevant to the proposed project. You can also show us any code sample that you are particularly proud of. |
| 39 | + * Describe why you are interested in Kotlin and your experience with it. |
| 40 | + * If you participate in open source projects, please reference your contribution history. |
| 41 | + * If you have a GitHub, Twitter account, blog, or portfolio of technical or scientific publications, please reference them as well. |
| 42 | + * Disclose any conflicts with the GSoC timeline due to other commitments, such as exams and vacations. |
| 43 | + |
| 44 | +Thank you! We look forward to reading your applications! |
| 45 | + |
| 46 | +## Project ideas |
| 47 | + |
| 48 | +### Build Server Protocol: add Kotlin support [Medium, 175 hrs] |
| 49 | + |
| 50 | +The Kotlin team wants to expand official Kotlin support not only for Gradle and Maven build systems, |
| 51 | +but any other build system as well and support them natively in JetBrains IDE with minimal effort. |
| 52 | +On the other hand, we also want to provide basic Kotlin support in non-JetBrains IDE – |
| 53 | +one part of such support is to be able to get Kotlin specific information from any build system supporting Kotlin. |
| 54 | + |
| 55 | +The solution to these requirements could be a [Build Server Protocol](https://build-server-protocol.github.io) (BSP) |
| 56 | +that provides an abstraction layer between build system and IDE. |
| 57 | + |
| 58 | +The goal of this project would be implementing a prototype which uses the BSP protocol to get all required for |
| 59 | +IDEA information from a user project to be able to work with Kotlin code in the project. |
| 60 | +To limit the scope of this prototype – user project will be using Gradle to build itself. |
| 61 | + |
| 62 | +**Skills required (preferred)** |
| 63 | + |
| 64 | +* Kotlin |
| 65 | +* Understanding how to write Gradle plugins |
| 66 | +* _Bonus_: understanding how to write IntelliJ IDEA plugins |
| 67 | + |
| 68 | +**Possible mentor** |
| 69 | + |
| 70 | +Yahor Berdnikau, and the JetBrains team |
| 71 | + |
| 72 | +**Tasks for applicants** |
| 73 | + |
| 74 | +* **Task #1**. |
| 75 | + Why are you interested in this project? |
| 76 | + |
| 77 | +* **Task #2**. |
| 78 | + Practice assignment: |
| 79 | + create a Gradle plugin which exposes a specific task. This task should on the presence of |
| 80 | + Kotlin Gradle Plugin get all the Kotlin sources structure and output to the file. Having tests is a bonus |
| 81 | + |
| 82 | +### Support Android and iOS targets in Kotlin Multiplatform for an existing Google service [Medium, 175 hrs] |
| 83 | + |
| 84 | +This project aims to create an open-source Kotlin Multiplatform (KMP) library that supports an existing Google service |
| 85 | +on at least Android and iOS. This project will showcase best practices in creating KMP libraries for existing services, |
| 86 | +with a focus on appropriate production implementation (for example, proper API key management, allowing user-managed API keys, |
| 87 | +client throttling). |
| 88 | + |
| 89 | +**Expected outcomes** |
| 90 | + |
| 91 | +* A new Kotlin Multiplatform library with support for an existing Google service |
| 92 | +* Sample code and documentation |
| 93 | + |
| 94 | +**Skills required (preferred)** |
| 95 | + |
| 96 | +* Kotlin |
| 97 | +* Kotlin Multiplatform |
| 98 | +* Mobile development (Android and iOS) |
| 99 | + |
| 100 | +**Possible mentor** |
| 101 | + |
| 102 | +Matt Dyor, and the Google team |
| 103 | + |
| 104 | +### Add Kotlin Multiplatform support in Bazel [Hard, 350 hrs] |
| 105 | + |
| 106 | +Bazel's support for Kotlin is evolving, but proper Kotlin Multiplatform (KMP) integration remains a challenge. |
| 107 | +This project aims to improve [Bazel's KMP support](https://github.com/bazelbuild/rules_kotlin/issues/567) |
| 108 | +by addressing dependency resolution issues, enhancing `rules_kotlin` and `rules_jvm_external` compatibility, |
| 109 | +and enabling cross-platform builds. |
| 110 | + |
| 111 | +Key improvements will focus on handling platform-specific dependencies (expect/actual mechanisms), |
| 112 | +improving Gradle metadata support, and ensuring a smoother developer experience for KMP in Bazel. |
| 113 | + |
| 114 | +**Expected outcomes** |
| 115 | + |
| 116 | +* Enhanced dependency resolution for Kotlin Multiplatform in Bazel |
| 117 | +* Improved integration with `rules_kotlin` and `rules_jvm_external` |
| 118 | +* A working KMP build setup in Bazel for seamless multiplatform development |
| 119 | + |
| 120 | +**Skills required (preferred)** |
| 121 | + |
| 122 | +* Kotlin Multiplatform and Gradle |
| 123 | +* Bazel build system |
| 124 | +* Dependency resolution strategies |
| 125 | + |
| 126 | +**Possible mentor** |
| 127 | + |
| 128 | +Shauvik Roy Choudhary, and the Uber team |
| 129 | + |
| 130 | +### Kotlin Language Server (LSP) [Hard, 350 hrs] |
| 131 | + |
| 132 | +The Language Server Protocol (LSP) is a widely adopted standard that enables code intelligence features such as autocompletion, |
| 133 | +go-to definition, and refactoring across different editors and IDEs. There is currently no official Kotlin LSP server. |
| 134 | +Uber has developed an internal Kotlin LSP, but a publicly maintained, community-driven implementation |
| 135 | +can support broader use cases, including code migration, AI-powered code assistance, |
| 136 | +and seamless integration into various development environments. |
| 137 | + |
| 138 | +This project aims to develop a Kotlin LSP implementation, ensuring compatibility with key LSP features |
| 139 | +and broadening Kotlin's accessibility across development environments. |
| 140 | + |
| 141 | +**Expected outcomes** |
| 142 | + |
| 143 | +Develop a Kotlin LSP implementation |
| 144 | + |
| 145 | +**Skills required (preferred)** |
| 146 | + |
| 147 | +* Kotlin |
| 148 | +* Language Server Protocol (LSP) |
| 149 | +* Plugin or extension development for IDEs |
| 150 | + |
| 151 | +**Possible mentor** |
| 152 | + |
| 153 | +Shauvik Roy Choudhary, and the Uber team |
| 154 | + |
| 155 | +### Maven Central publishing plugin for Gradle with new APIs [Medium, 175 hrs] |
| 156 | + |
| 157 | +[Maven Central](https://central.sonatype.com/) is one of the most popular Maven repositories for publishing |
| 158 | +JVM-focused libraries and projects. It is actively used by Apache Maven or Gradle-based open-source projects, |
| 159 | +and based on Sonatype Nexus v2, pending migration to a newer version. There is ongoing migration of open source projects |
| 160 | +to a new Maven Central Instance, which has a very different API implementation and needs special support in the build tool plugins. |
| 161 | +Developing a Gradle plugin that is compatible with the new Maven Central publication APIs would help |
| 162 | +the library authors building with Gradle to have a smooth experience with the new process. |
| 163 | + |
| 164 | +Currently, there are multiple implementations of Maven Central publishing plugins in Gradle, |
| 165 | +for example, the [Maven Publish Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html) |
| 166 | +or the [New Maven Central Publishing](https://github.com/GradleUp/nmcp), which already tries to adopt the new APIs. |
| 167 | +A potential contributor, during the application or the community bonding phase, would need to review the implementations |
| 168 | +and suggest a plugin to be updated, or decide to build a new plugin or fork. |
| 169 | +The deliverables would include either a new version of an existing plugin for Maven Central publishing or a new plugin for Gradle. |
| 170 | +We anticipate the implementation to be in Kotlin or Java and to have proper test coverage and documentation. |
| 171 | +Additional deliverables may include Kotlin DSL extensions to simplify the use of the plugins and |
| 172 | +[Declarative Gradle](https://declarative.gradle.org/) extensions. |
| 173 | + |
| 174 | +**Expected outcomes** |
| 175 | + |
| 176 | +* Updated Maven Central publishing plugin or a new plugin |
| 177 | + |
| 178 | +**Skills required (preferred)** |
| 179 | + |
| 180 | +* Kotlin |
| 181 | +* Gradle |
| 182 | +* Maven Repositories |
| 183 | + |
| 184 | +**Possible mentor** |
| 185 | + |
| 186 | +Oleg Nenashev, and the Gradle team |
| 187 | + |
| 188 | +### Improving Configuration Cache and lock contention in key Gradle plugins [Easy to Hard, 90 hrs to 350 hrs] |
| 189 | + |
| 190 | +Gradle is working on [Isolated Projects](https://docs.gradle.org/current/userguide/isolated_projects.html) – a new feature |
| 191 | +that greatly extends the configuration cache to further improve performance, particularly the performance of |
| 192 | +Android Studio and IntelliJ IDEA sync. From the developer experience standpoint, it is one of the most expected features in Gradle. |
| 193 | + |
| 194 | +One of the problems for Isolated projects is the lock contention in the Gradle core and plugins sometimes getting in the way of parallel execution. |
| 195 | +We would like to reduce the lock contention, especially in the key Gradle Build Tool plugins for Java, Kotlin, Android, |
| 196 | +and Kotlin Multiplatform ecosystems. Contributors are welcome to choose the deliverables, based on their interest and the desired project size. |
| 197 | + |
| 198 | +Potential deliverables include but not limited to: |
| 199 | +* Embed the [Configuration Cache Report](https://github.com/gradle/configuration-cache-report) tool into the Gradle Profiler (or implement a GitHub Action for it) |
| 200 | +* Profile Gradle and a few popular Gradle plugins in various projects, with automation of the test suite on GHA |
| 201 | +* Determine potential areas and plugins where lock contention can be reduced, with or without Configuration Cache |
| 202 | +* While around, contribute to other areas of [Configuration Cache compatibility](https://github.com/gradle/gradle/issues/13490) in the target plugins |
| 203 | +* Implement some of the discovered improvements |
| 204 | + |
| 205 | +**Expected outcomes** |
| 206 | + |
| 207 | +Implementing extensibility features in the Kotlin DSL for Gradle and improving support for common project integrations |
| 208 | + |
| 209 | +**Skills required (preferred)** |
| 210 | + |
| 211 | +* Kotlin |
| 212 | +* Gradle |
| 213 | +* Java |
| 214 | +* Performance analysis |
| 215 | +* Profiling |
| 216 | + |
| 217 | +**Possible mentor** |
| 218 | + |
| 219 | +Oleg Nenashev, Laura Kassovic |
| 220 | + |
| 221 | +### Gradle convention plugin for developing Jenkins plugins [Easy to Hard, 90 hrs to 350 hrs] |
| 222 | + |
| 223 | +There are more than 50 Jenkins plugins that are implemented with Gradle. |
| 224 | +There is a [Gradle JPI plugin](https://github.com/jenkinsci/gradle-jpi-plugin), |
| 225 | +but it is not fully compliant with Jenkins hosting requirements, and needs an update. |
| 226 | +In this project idea, the aim would be to recover the Gradle developer flow for Jenkins, reach feature parity with the |
| 227 | +Apache Maven flow ([Parent POM](https://github.com/jenkinsci/plugin-pom), |
| 228 | +[Plugin Compatibility Tester](https://github.com/jenkinsci/plugin-compat-tester), |
| 229 | +[Jenkins Bill of Materials](https://github.com/jenkinsci/bom), and others), |
| 230 | +and to improve the developer experience for those who develop Jenkins plugins with Gradle. |
| 231 | + |
| 232 | +Contributors are welcome to choose the deliverables, based on their interest and the desired project size. |
| 233 | + |
| 234 | +Potential deliverables include but not limited to: |
| 235 | +* Refreshing the Gradle JPI plugin and making it compliant with hosting best practices |
| 236 | +* Migrating the Gradle JPI plugin codebase from Groovy to Kotlin |
| 237 | +* Implementing a new convention plugin for Jenkins Plugins that would cover the main features of Jenkins plugin Parent POM, with Kotlin and Kotlin DSL. |
| 238 | + This would include not just building the plugin, but also testing and static analysis according to Jenkins' best practices |
| 239 | +* Adopting the refreshed plugin and/or the convention plugin in the most popular Gradle plugin, including the Gradle Plugin itself |
| 240 | +* Integrating Gradle Plugins into Plugin Compatibility Tester and Bill of Materials |
| 241 | +* Documenting the updated Gradle development flow for Jenkins plugins |
| 242 | + |
| 243 | +**Expected outcomes** |
| 244 | + |
| 245 | +Updated Gradle JPI Plugin AND/OR new convention plugin for Jenkins, published on Jenkins Update Center and Gradle Plugin Portal |
| 246 | + |
| 247 | +**Skills required (preferred)** |
| 248 | + |
| 249 | +* Kotlin DSL |
| 250 | +* Kotlin |
| 251 | +* Gradle |
| 252 | +* Jenkins |
| 253 | +* Java |
| 254 | + |
| 255 | +**Possible mentor** |
| 256 | + |
| 257 | +Oleg Nenashev, Stefan Wolf |
| 258 | + |
| 259 | +### Kotlin DSL and Declarative Gradle documentation samples test framework [Easy to Medium, 90 hrs to 175 hrs] |
| 260 | + |
| 261 | +Many projects, including Gradle, have a lot of Kotlin DSL samples and code snippets (see the Gradle Docs for examples). |
| 262 | +Testing them against multiple versions poses certain challenges because the snippets often represent incomplete code |
| 263 | +for the sake of brevity. We would like to build a test framework that simplifies the verification of those samples |
| 264 | +within a unit test framework (Kotest or JUnit 5) on GitHub Actions or Teamcity. Later we would be interested in |
| 265 | +doing the same for [Declarative Gradle](https://declarative.gradle.org/) samples. |
| 266 | + |
| 267 | +**Expected outcomes** |
| 268 | + |
| 269 | +Implementing extensibility features in the Kotlin DSL for Gradle and improving support for common project integrations |
| 270 | + |
| 271 | +**Skills required (preferred)** |
| 272 | + |
| 273 | +* Kotlin |
| 274 | +* Gradle |
| 275 | +* Java |
| 276 | +* Static analysis |
| 277 | + |
| 278 | +**Possible mentor** |
| 279 | + |
| 280 | +Oleg Nenashev, Laura Kassovic |
| 281 | + |
| 282 | +### IntelliJ Platform Gradle Plugin – Gradle Reporting and Parallel Verifications [Medium, 175 hrs] |
| 283 | + |
| 284 | +The [IntelliJ Platform Gradle Plugin](https://github.com/JetBrains/intellij-platform-gradle-plugin), |
| 285 | +a plugin for the Gradle build system, simplifies configuring your environment for building, testing, verifying, |
| 286 | +and publishing plugins for IntelliJ-based IDEs. The plugin manages the build, test, |
| 287 | +and verification steps while keeping up with the constant changes introduced in the IntelliJ Platform. |
| 288 | +The IntelliJ Platform Gradle Plugin is used by JetBrains, third-party developers, |
| 289 | +and external companies to integrate their workflows with JetBrains tools. |
| 290 | + |
| 291 | +**Expected outcomes** |
| 292 | + |
| 293 | +* Introduce Gradle Reporting to provide detailed, configurable verification task reports. |
| 294 | +* Utilize Gradle Worker API to enable parallel execution of the verifyPlugin task against multiple IntelliJ Platform versions, reducing the task execution time. |
| 295 | +* Explore additional Gradle enhancements to further improve plugin development workflows. |
| 296 | + |
| 297 | +**Skills required (preferred)** |
| 298 | + |
| 299 | +* Kotlin |
| 300 | +* Gradle |
| 301 | +* IntelliJ Platform |
| 302 | + |
| 303 | +**Possible mentor** |
| 304 | + |
| 305 | +Jakub Chrzanowski, JetBrains |
0 commit comments