This article contains the list of project ideas for Google Summer of Code with Kotlin 2024, and contributor guidelines
Kotlin resources:
- Kotlin GitHub repository
- Kotlin Slack and the #gsoc Slack channel
If you got any questions, contact us via [email protected]
{type="note"}
-
Check out the GSoC FAQ and the program announcement.
-
Familiarize yourself with the Kotlin language:
- The official Kotlin website is a great place to start.
- Read the official documentation to get a better understanding of the language.
- Take a look at the Kotlin courses on JetBrains Academy or the Android team’s Training options.
- Follow the Kotlin X account to stay up to date on the latest news and developments.
- Check out the Kotlin YouTube channel for tutorials, tips, and the latest updates.
-
Get to know the Kotlin open source community:
- Explore the general Kotlin contribution guidelines.
- Join the Kotlin Slack channel to connect with other developers and get help with any questions you may have.
- Join the #gsoc channel to ask questions and get support from the GSoC team.
- Check out the project ideas and select the one you would like to work on.
- If you are not familiar with Kotlin, read the introductory info on the Kotlin website.
- Refer to the GSoC contributor guidelines.
- Apply via the GSoC website.
- 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.
- Describe why you are interested in Kotlin and your experience with it.
- If you participate in open source projects, please reference your contribution history.
- If you have a GitHub, Twitter account, blog, or portfolio of technical or scientific publications, please reference them as well.
- Disclose any conflicts with the GSoC timeline due to other commitments, such as exams and vacations.
Thank you! We look forward to reading your applications!
Incremental compilation is a technique that helps increase compilation speed by recompiling only changed files instead of your whole program (also known as performing a clean build). The Kotlin-to-Wasm compiler currently supports only clean builds, but during this project, we will enhance it to support incremental compilation, too.
Expected outcomes
Implementation of the incremental compilation feature in the Kotlin-to-WebAssembly compiler, contributing to faster development workflows.
Skills required (preferred)
Kotlin
Possible mentor
Artem Kobzar, JetBrains
Compose Multiplatform is a declarative framework for sharing UIs built with Kotlin across multiple platforms. The current approach to rendering desktop applications uses the JVM as a platform, but what if we use Compose Multiplatform for Web and try to run an application outside the browser with Skia’s native bindings? Will this improve desktop applications performance and memory consumption? Or will it do the opposite? We'll find out in this project!
Expected outcomes
Integration of Skia bindings with Compose Multiplatform and evaluation of performance impact on desktop applications.
Skills required (preferred)
Kotlin, Node.js, C++, or Rust
Possible mentor
Artem Kobzar, JetBrains
Compose Multiplatform is a declarative framework for sharing UIs built with Kotlin across multiple platforms. At the beginning of the React era of web development, Storybook was created, and Storybook’s proposed approach of describing component states and generating the whole UI library gallery is still one of the essential approaches to documentation in web development. Can we do the same with Compose Multiplatform, using it to generate a gallery of web UI elements, as well as galleries for mobile and desktop? Let's give it a try in this project.
Expected outcomes
Creation of a tool to generate UI component galleries for web, mobile, and desktop platforms using Compose Multiplatform.
Skills required (preferred)
Kotlin, Jetpack Compose, UI/UX Design
Possible mentor
Artem Kobzar, JetBrains
Last November, the Gradle team announced the new Declarative Gradle project, introducing a higher level Kotlin DSL in the project. We invite GSoC contributors to join us and work on improving the developer experience of the new DSL, in particular by implementing extensibility in Gradle plugins to support the most common Kotlin and Java project integrations: static analysis, test frameworks like Kotest and others.
Expected outcomes
Implementing extensibility features in the Kotlin DSL for Gradle and improving support for common project integrations.
Skills required (preferred)
Kotlin, Gradle, Java, Static Analysis
Possible mentor
Oleg Nenashev, Gradle
Many projects, including Gradle, have a lot of Kotlin DSL samples and code snippets (see the Gradle Docs for examples). Testing them against multiple versions poses certain challenges because the snippets often represent incomplete code for the sake of brevity. We would like to build a test framework that simplifies the verification of those samples within a unit test framework (Kotest or JUnit 5) on GitHub Actions and Teamcity.
Expected outcomes
Implementation of a basic test framework for Kotlin DSL samples, integrated with GitHub Actions for continuous testing.
Skills required (preferred)
Kotlin, Testing Frameworks, CI/CD
Possible mentor
Oleg Nenashev, Gradle
Kotlin and Gradle are the default choices for building Android projects. In November 2023, the Microsoft team announced the Gradle Build Server project, which is a Gradle-specific implementation of the Build Server Protocol (BSP). It would be great to introduce full support for Android builds there. For smaller-scope projects, it is possible to implement auto-discovery and cancellation for Gradle tasks in the Gradle Build Server.
Expected outcomes
Implementation of Android project support in the Gradle Build Server, including auto-discovery and task cancellation.
Skills required (preferred)
Kotlin, Gradle, Android Development, Visual Studio Code
Possible mentor
Oleg Nenashev, Gradle
The kotlinx-benchmark library, an open-source toolkit, facilitates the benchmarking of Kotlin code across various platforms. It currently features GC profiling for the JVM, detailing each benchmark method’s allocation rate. This project aims to extend similar profiling capabilities to Kotlin/Native, advancing toward uniform benchmarking capabilities across platforms.
The contributor will collaborate closely with the Kotlin/Native team to create an API for accessing allocation data from the Kotlin/Native memory manager. The objective is to generate reports that align with the JVM format, ensuring the consistency of data presentation across platforms. Furthermore, the project involves identifying and rectifying any discrepancies in reporting formats for other library features, thereby standardizing the benchmarking output for comprehensive cross-platform analysis.
Expected outcomes
Implementation of memory usage profiling in kotlinx-benchmark for Kotlin/Native and standardized benchmarking output.
Skills required (preferred)
Kotlin, Kotlin/Native, Benchmarking, Memory Profiling
Possible mentor
Abduqodiri Qurbonzoda, JetBrains
Alexander Shabalin, JetBrains
The kotlinx-benchmark library is an open-source tool designed for benchmarking Kotlin code across multiple platforms, including the JVM, JS, WasmJs, and Native. Despite its broad compatibility, the library currently does not support benchmarking on Android. This project aims to bridge that gap. The plan is to utilize an existing Android library, such as androidx.benchmark, behind the scenes to integrate this functionality. A key aspect of the project will be ensuring that all features currently available for other platforms are also supported on Android, maintaining the library’s multiplatform utility.
Expected outcomes
Integration of benchmarking support for Android platforms in kotlinx-benchmark, ensuring feature parity with other platforms.
Skills required (preferred)
Kotlin, Android Development, Benchmarking
Possible mentor
Abduqodiri Qurbonzoda, JetBrains
Rahul Ravikumar, Google
kotlinx-benchmark is an open-source library for benchmarking multiplatform code written in Kotlin. It includes a Gradle plugin that, when applied, provides tasks for running benchmarks. However, executing these tasks requires navigating to the IDE’s Gradle panel or using the terminal. Additionally, running a specific benchmark necessitates further steps, adding to the complication. To mitigate this inconvenience and streamline the process, this project aims to enable users to run an individual benchmark or an entire suite directly from the IntelliJ IDEA interface, mirroring the convenience offered for unit tests. Achieving this goal may necessitate collaboration with the IntelliJ IDEA team and/or contributions directly to the IntelliJ project.
Expected outcomes
Integration of click-to-run functionality for kotlinx-benchmark benchmarks in IntelliJ IDEA, improving user experience.
Skills required (preferred)
Kotlin, IntelliJ IDEA Plugin Development, Benchmarking
Possible mentor
Abduqodiri Qurbonzoda, JetBrains