In this document, you can find a list of ideas that are proposed by the Scala Organisation for Google Summer of Code 2025.
If you are interested in becoming a contributor on any idea, please reach out to your potential mentor using their email address specified with the project. You can also reach Scala Center at scala.center(at)epfl.ch.
If you would like to be a mentor and propose your own idea, please submit a PR editing this file (e.g. see 2024's projects), adding your project to the list, following the format of other projects below.
You can read the full rules of the program at the following links: Rules, Terms and Conditions, Help.
And here are the requirements for the potential contributor's proposal: Writing a proposal.
However, here are some rules that we'd like to emphasize since they are not visible enough at the above links:
- The program is geared towards beginners first and foremost. It is intended to be a learning experience for people at the very beginning of their careers. It is also intended to give an opportunity to people who would otherwise not have one. It is NOT a freelance job. Therefore, when making an acceptance decision on a potential contributor, we will prioritize disadvantaged backgrounds and contributors at the very beginning of their careers.
- IMPORTANT - EPFL Students: Please note that, according to GSoC rules, there are restrictions on accepting students from an organization's host university. For Scala Center, the host university is EPFL. We can only accept up to 1 student from EPFL, so please take it into account if you're studying at EPFL and consider applying.
Title | Doodle Bitmap Convolutions |
---|---|
Link to Project | creativescala/doodle#94 |
Brief Description | Add support for bitmap convolutions to Doodle. The link has more, including a Github project laying out the steps. |
Expected Outcome | Working code and documentation. |
Prerequisites | Some Scala knowledge. |
Ideal Prerequisites | Basic knowledge of bitmap convolutions, some understanding of tagless final. |
Expected Difficulty | Easy – straightforward task, path for execution visible right now, very little uncertainty |
Expected Time Commitment | Medium project – 175 hours |
Mentor | Noel Welsh (GitHub: @noelwelsh, Email: [email protected]) |
Co-mentor |
Title | Doodle Skia Backend |
---|---|
Link to Project | creativescala/doodle#175 |
Brief Description | Add a Skia backend for Doodle, using the Skiaj bindings. |
Expected Outcome | Working code and documentation. |
Prerequisites | Some Scala knowledge. |
Ideal Prerequisites | Some understanding of type classes or tagless final. |
Expected Difficulty | Easy – straightforward task, path for execution visible right now, very little uncertainty |
Expected Time Commitment | Medium project – 175 hours |
Mentor | Noel Welsh (GitHub: @noelwelsh, Email: [email protected]) |
Co-mentor |
Title | Krop Template Engine |
---|---|
Link to Project | creativescala/krop#14 |
Brief Description | Create an HTML template engine for the Krop web framework. |
Expected Outcome | Working code and documentation. |
Prerequisites | Intermediate Scala knowledge and basic HTML knowledge. |
Ideal Prerequisites | An understanding of parsing. |
Expected Difficulty | Medium – some design decisions need to be made and the implementation is not straightforward. |
Expected Time Commitment | Medium project – 175 hours |
Mentor | Noel Welsh (GitHub: @noelwelsh, Email: [email protected]) |
Co-mentor |
Title | Workflows4s Web UI |
---|---|
Link to Project | https://github.com/business4s/workflows4s |
Brief Description | Implement web user interface for Workflows4s. Design the API and implement both server and web side using scala and scala.js. See business4s/workflows4s#19 for details. |
Expected Outcome | Proof of concept of the UI that can present progress of a workflow instance. |
Prerequisites | Basic scala skills, basic frontend skills, basic knowledge of HTTP APIs (e.g. REST). |
Expected Difficulty | Medium |
Expected Time Commitment | Large project - 350 hours |
Spoken Language | English |
Mentor | Voytek Pituła (GitHub: @Krever, Email: [email protected]) |
Co-mentor | Dave Smith (Github: @davesmith00000, Email: [email protected]) |
Title | ChatOps4s Prototype |
---|---|
Link to Project | To be created under https://github.com/business4s |
Brief Description | Prototype of library/toolkit allowing to easily send messages and receive input from chat platforms (e.g. Slack) |
Expected Outcome | Prototype that allows getting information in and out Slack with as little effort as possible. Research on how hard will it be to support other platforms. |
Prerequisites | Ability to research and consume external APIs. Basic exposure to some chat platform (Slack, Discord, MS Teams) |
Expected Difficulty | Medium |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Voytek Pituła (GitHub: @Krever, Email: [email protected]) |
Co-mentor | - |
Title | Play Framework Support in Metals |
---|---|
Link to Project | scalameta/metals-feature-requests#50 scalameta/metals-feature-requests#89 |
Brief Description | Add support for Play Framework specific files in Metals language server |
Expected Outcome | Working code and documentation. |
Prerequisites | Intermediate Scala knowledge and basic HTML knowledge. |
Ideal Prerequisites | An understanding of parsing and language server protocol. |
Expected Difficulty | Medium – some design decisions need to be made and the implementation is not straightforward. |
Expected Time Commitment | Medium project – 175 hours |
Mentor | Tomasz Godzik (GitHub: @tgodzik, Email: [email protected]) |
Co-mentor |
Title | |
---|---|
Link to Project | https://github.com/ComputeNode/cyfra |
Brief Description | Cyfra is a GPU runtime and a DSL that makes Scala a viable choice for GPU programming. Goal of the project is to implement support for GPU computations on data streams with focus on usability. |
Expected Outcome | Cyfra should enable developers that do not have background in GPU programming to write a simple data processing pipeline in Cyfra that performs compute on GPU and efficiently manages memory. The pipeline should be interoperable with fs2. |
Prerequisites | Some experience with Scala, and interest to learn a bit about GPUs. |
Expected Difficulty | Medium |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Szymon Rodziewicz (LinkedIn, Github: szymon-rd, Email: [email protected]) |
Co-mentor | - |
Title | |
---|---|
Link to Project | https://github.com/ComputeNode/cyfra |
Brief Description | Cyfra is a GPU runtime and a DSL that makes Scala a viable choice for GPU programming. Goal of the project is to implement a basic real-time Vulkan rendering pipeline. |
Expected Outcome | Cyfra should enable developers to create programs that will render scenes from a basic one-step Vulkan pipeline in real time. It should support rendering to a window, a data stream, and a file. |
Prerequisites | No Scala experience is required, but basic experience with GPU programming would be helpful. |
Expected Difficulty | Medium |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Szymon Rodziewicz (LinkedIn, Github: szymon-rd, Email: [email protected]) |
Co-mentor | - |
Title | Scala Bazel Rules for Scala.js and Scala Native |
---|---|
Link to Project | https://github.com/bazelbuild/rules_scala |
Brief Description | This project aims to develop Bazel build rules for Scala.js and Scala Native, enabling efficient and reproducible builds for both platforms. The project will provide first-class support for Scala projects within the Bazel ecosystem, improving integration and developer experience. |
Expected Outcome | Functional and well-documented Bazel rules that allow compiling, testing, and packaging Scala.js and Scala Native projects. Demonstration projects showcasing usage. |
Prerequisites | Experience with Scala, build tools (SBT, Bazel), and Scala.js/Scala Native basics. Some familiarity with Bazel rule definitions is a plus. |
Expected Difficulty | Medium |
Expected Time Commitment | Large project - 350 hours |
Mentor | Wojciech Mazur (GitHub: @WojciechMazur, Email: [email protected]) |
Co-mentor | TODO |
Title | JMH-Compliant Benchmarking Framework for Scala Native & Scala.js |
---|---|
Link to Project | Scala Native / Scala.js |
Brief Description | This project aims to implement a benchmarking framework similar to JMH (Java Microbenchmark Harness) allowing for accurate and reliable performance measurements on non JVM platforms. Both Scala Native and Scala.js cannot consume a modified JVM bytecode emitted by JMH framework. The goal is to create a runtime implementation for executing microbenchmarks and a Scala compiler plugin performing required transformations of Scala.js / Scala Native code based on JMH framework compiletime annotations. |
Expected Outcome | A benchmarking framework that mimics JMH APIs and produces reliable results for Scala Native and Scala.js. Demonstration benchmarks showcasing usage. |
Prerequisites | Good understanding of benchmarking principles, Scala Native, Scala.js, and Scala compiler plugins. Some knowledge of JMH is beneficial. |
Expected Difficulty | Hard |
Expected Time Commitment | Medium project - 175 hours |
Mentor | Wojciech Mazur (GitHub: @WojciechMazur, Email: [email protected] ) |
Co-mentor | Sébastien Doeraene (GitHub: @sjrd, Email: [email protected] ) |
Title | Incremental Optimization of Scala Native IR |
---|---|
Link to Project | Scala Native |
Brief Description | This project aims to implement incremental optimization for Scala Native’s Intermediate Representation (IR), improving compilation speed by reusing results from previous compilation runs instead of optimizing the entire program from scratch. |
Expected Outcome | A working prototype of an incremental optimization pipeline for Scala Native IR, with measurable speedups over full optimizations. |
Prerequisites | Strong understanding of compilers, Scala Native IR, and optimization techniques. Knowledge of LLVM and incremental compilation strategies is a plus. |
Expected Difficulty | Hard |
Expected Time Commitment | Large project - 350 hours |
Mentor | Wojciech Mazur (GitHub: @WojciechMazur, Email: [email protected] ) |
Co-mentor | Sébastien Doeraene (GitHub: @sjrd, Email: [email protected] ) |
Title | Difflicious UI |
---|---|
Link to Project | https://github.com/jatcwang/difflicious |
Brief Description | Implement a Web UI for Difflicious which allows users to explore diffs (test failures) reported by Difflicious. The UI should allow the user to expand and minimize section of the diff output in an interactive manner. |
Expected Outcome | Working UI and documentation |
Prerequisites | Good working knowledge of Scala and web technologies (Javascript, CSS, HTML). The project will be implemented in Scala.js (most likely with Laminar |
Expected Difficulty | Hard |
Expected Time Commitment | Large project - 350 hours |
Spoken Language | English |
Mentor | Jacob Wang (GitHub: @jatcwang, Email: [email protected]) |
Title | Difflicious: Differ for Json type |
---|---|
Link to Project | https://github.com/jatcwang/difflicious |
Brief Description | Implement a differ which supports JSON types from popular Scala libraries (e.g. Circe). The current sealed trait Differ will be completely reworked to support any general disjoint union. |
Expected Outcome | A differ that can diff two two io.circe.Json values |
Prerequisites | Good working knowledge of Scala |
Expected Difficulty | Hard |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Jacob Wang (GitHub: @jatcwang, Email: [email protected]) |
Title | One line CSV import in scala |
---|---|
Link to Project | https://github.com/Quafadas/scautable |
Brief Description | Python through Pandas has a great data import experience. This project aims to replicate parts of that by parsing parts of the datasource at compile time, i.e. bringing knowledge of the structure and headers of your datasource inside the compilers knowledge. It's goal is to help you discover your data, rather than force to you to write out it's metadata in advance. It's target audience will be writing non production, data sciency type scripts. Many of the motivating examples come from kaggle.com |
Expected Outcome | Can be measured in the increased number of successful test cases. I believe the "fundamental" idea has legs, but is currently limited to a small number of scenarios explored in my free time. The goal of the project is to expand the set of scenarios in which it is useful. Initial easy issues surround details such as correctly parsing headers, checking special characters, improving error messages and writing data back to (e.g. CSV). From there it should be possible to graduate to adding more datasources, for example SQL (hopefully simple - or harder, for example exploring apache parquet.) Stretch goals could include exploring strategies for streaming statistics, deriving visualisations, critiquing the design vs e.g. Kantan.csv, and / or attempting to help the consumer identify the "types" of the data at compile time. |
Prerequisites | Basic scala / java knowledge. The barrier to "getting started" ought to be rather low. The initial issues are largely detail driven rather than design driven. Basic experience with testing (munit), CI (GHA) and scala standard library would be enough to contribute. |
Expected Difficulty | Easy |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Simon Parten (GitHub: @quafadas, Email: [email protected]) |
Co-mentor | Volunteers wanted here too I guess :-) |
Title | Scaladex: Support for Compiler Plugins |
---|---|
Link to Project | https://github.com/scalacenter/scaladex/ |
Brief Description | Add support for compiler plugins in Scaladex, the index website of open source Scala artifacts. Adapt the UI of the front page, search page and project page to allow searching, and browsing compiler plugins and their versions. See full description in scalacenter/scaladex#865 |
Expected Outcome | Scaladex should index compiler plugin artifacts, such as org.typelevel:kind-projector_2.13.16:0.13.3. It should show them as a separate platform on the front page, search page and project page. |
Prerequisites | Some experience with Scala and SQL. Good knowledge about HTML and css |
Ideal Prerequisites | Some knowledge of the Scala ecosystem, such as Scala platforms and binary versions |
Expected Difficulty | Medium |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Kannupriya Kalra (LinkedIn, Email: [email protected]) |
Co-mentor | Adrien Piquerez (GitHub: @adpi2, Email: [email protected]) |
Title | |
---|---|
Link to Project | https://github.com/rorygraves/llm4s |
Brief Description | LLM4S is creating a Large Language Model (LLM) toolkit for Scala. This project uses the power of Scala to make building LLM based applications easier. LLMs can be used in an agentic style where the LLM is allowed to call provided tools to access resources (such as reading a webpage, or calling an API service to perform a task). The goal of this project is to create a standard toolkit that developers can use when building agentic agents. |
Expected Outcome | LLM4S should have a useful set of tools integrated for LLM use, such as file or web browser tools to be used by applications built with LLM4S. |
Prerequisites | Some exerience of Scala and LLMs. |
Expected Difficulty | Medium |
Expected Time Commitment | Medium project - 175 hours |
Spoken Language | English |
Mentor | Kannupriya Kalra (LinkedIn, Email: [email protected]) |
Co-mentor | Rory Graves (LinkedIn, Email: [email protected]) |
Title | |
---|---|
Link to Project | Provide a link to a website or a Git repository of your project. |
Brief Description | Please describe in a few sentences what the project is about. |
Expected Outcome | Specify the success criteria for the project. What are the deliverables, how do you know that it is done? |
Prerequisites | What minimal skills and knowledge the contributor needs to have to succeed on this project? |
Expected Difficulty | Easy, Medium of Hard |
Expected Time Commitment | Can be either: "Medium project - 175 hours" or "Large project - 350 hours" |
Spoken Language | English |
Mentor | FirstName LastName (GitHub: @foo, Email: [email protected]) |
Co-mentor | FirstName LastName (GitHub: @foo, Email: [email protected]) |