GSoC/2024/Ideas
See also: GSoC Instructions, Last year ideas
Guidelines
Information for Students
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. Neither generating a proposal with ChatGPT or equivalent! On the other hand, creating a completely new idea without first consulting potential mentors rarely works.
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!
If there is no specific contact given you can ask questions on the general KDE development list [email protected]. See the KDE mailing lists page for information on available mailing lists and how to subscribe.
Adding a Proposal
When adding an idea to this section, please include the following data:
- if the application is not widely known, a description of what it does and where its code lives
- a brief explanation (2-5 sentences)
- the expected size of the project (small-90 hours, medium-175 hours or large-350 hours)
- the expected results
- pre-requisites for working on your project (skills required/preferred)
- if applicable, links to more information or discussions
- mailing list or IRC channel for your application/library/module
- your name and email address for contact (if you're willing to be a mentor)
- if possible, an easy, medium or hard rating of the project
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.
Project: Something that you're totally excited about
Brief explanation: Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.
Expected results: Something you and KDE loves
Knowledge Prerequisite: Probably C++ and Qt but depends on your project
Duration: Mention one of ~90, ~175 or ~350 hours of effort necessary to finish the project. Use only one of these three project classes and don't come up with other numbers here.
Difficulty: Easy, medium or difficult project
Mentor: Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc:kde.org on matrix.
Ideas
KDE Frameworks
Python bindings for KDE Frameworks
Brief explanation: While Qt itself, has official bindings to Python, this is not the case for the KDE Frameworks. This project hopes to add python bindings to as many frameworks as possible during the summer.
Expected results: Make it easier to build Python apps with Qt
Knowledge Prerequisite: C++ and Python knowledge. Having read https://doc.qt.io/qtforpython-6/ https://doc.qt.io/qtforpython-6/shiboken6/index.html and https://www.kdab.com/creating-python-bindings-for-qt-libraries/ is a good start
Duration: Flexible depending on the amount of frameworks we want to cover during this GSoC (175 or 350 hours).
Difficulty: Medium
Mentor: Carl Schwan - @carl:kde.org on matrix
Port oss-fuzz tests to Qt6
Project type: Coding
Brief explanation: oss-fuzz is a fuzzying tool that runs continuously trying to find security issues in our software. Currently the oss-fuzz tests on KDE Frameworks are run using Qt5 which is not optimal since Qt6 is where our main development focus is (kimageformats or kcodecs examples).
Expected results: oss-fuzz tests run with Qt6 instead of Qt5. If extra time allows it, add more KDE Frameworks testing to oss-fuzz
Knowledge Prerequisite: cmake/compiling/static libraries
Duration: 175 hours
Difficulty: Medium/Hard
Mentor: Albert Astals Cid <[email protected]>
ISO Image Writer to Qt Quick
Project type: Coding
Brief explanation: Port ISO Image Writer to Qt Quick
Expected results: A more shiney UI
Knowledge Prerequisite: C++, QML
Duration: 175 hours
Difficulty: Medium
Mentor: Jonathan Riddell jr @ jriddell.org
Release Scripts Using invent.kde.org (Gitlab)
Project type: Coding
Brief explanation: Write release scripts for our apps and libraries which uses the Gitlab infrastructure on invent.kde.org
Expected results: Slicker release process
Knowledge Prerequisite: Gitlab API using maybe Ruby or something similar
Duration: 175 hours
Difficulty: Medium
Mentor: Jonathan Riddell jr @ jriddell.org Harald Sitter sitter @ kde.org
KDE Connect
The following are ideas for the KDE Connect Android, iOS and desktop apps. Feel free to also take a look at the curated list of tasks in the meta repo.
Update SSH library in the Android app
Project type: Coding
Brief explanation: KDE Connect is a desktop and phone app that lets you devices communicate. https://kdeconnect.kde.org/
The Remote File Browser plugin works by running an SFTP server on Android and connecting to it using SSHFS from the desktop.
The SFTP server implementation we use in Android is from Apache mina-sshd. This is a Java library. However, due to some differences in the way to access the filesystem in Android, the latest version we managed to get working is 0.14 from 2015.
The goal of this task is to upgrade to a recent version. You can see all the released versions here: https://mvnrepository.com/artifact/org.apache.sshd/sshd-core
One API that newer versions of Apache Mina use is java.nio.file, which wasn't available in Android until API 26. We currently support down to API 21, but we can bump the requirement to API 26 if required to update this library (maybe nio file can be dessugared, though?). In any case, there probably are more incompatibilities that we need to solve to be able to upgrade.
Expected results: We get rid of the old mina sshd library used in the Android app for remote file access, and we use either a new version or something else.
Knowledge Prerequisite: This should only require changes to the Android app, which is written in Java & Kotlin.
Mentor: Albert Vaca Cintora <[email protected]>
Allow sharing non-text clipboard contents
Project type: Coding
Brief explanation: KDE Connect is a desktop and phone app that lets you devices communicate. https://kdeconnect.kde.org/ Currently we only sync the clipboard if it contains text. However, the clipboard can contain a variety of data. One of the most common cases besides text are images.
The APIs we use to read the clipboard let us read and write images:
- In Qt the clipboard has a mimetype field of type QMimeData which can be asked for hasImage (in addition to hasUrls and hasHtml [1])
- On the Android side, we can use ClipboardManager's setPrimaryClip to set the different types of clipboard.
To support this, in addition to the text-only "content" field we will need to send a mime-type field with the mimetype of the clipboard. For image (or any future non-text) mimetypes, an attached payload will contain the image data. To not transfer huge payloads because of this, we should set an upper size limit (eg: 1 MB, we can change this in a future or even make it configurable).
[1] We probably don't care about URLs because they can be sent as text and they still work, but in a future it might be interesting to also support HTML so we can sync formatted text.
Expected results: We can copy-paste images and formatted text across platforms.
Knowledge Prerequisite: The desktop app is written in C++/Qt, the Android app in Java & Kotlin, and the iOS app in Swift.
Mentor: Albert Vaca Cintora <[email protected]>
Arianna
Port Arianna to Foliate-js
Brief explanation: Arianna is an ebook reader and currently use epub.js, which is not really maintained anymore. The idea would be to port it https://github.com/johnfactotum/foliate-js which is modern epub renderer used by foliate.
Expected results: A nice and modern epub renderer for Arianna
Knowledge Prerequisite: Javascript knowledge and minimal C++ knowledge to build the project
Duration: 175 hours
Difficulty: Medium
Mentor: Carl Schwan - @carl:kde.org on matrix
GCompris
Add support for multiple numeral system in GCompris
Brief explanation: For now, GCompris numbers are always displayed as Western Arabic numbers (0, 1, ...). There are several systems in the world and Qt/Javascript provides us ways to select the ones we want. The aim of the task is to add the handling of multiple systems and update all the places we display numbers to use the new system. A bit more details are available in https://phabricator.kde.org/T16332.
Expected results: Ability to change numeral system and change it on all the code.
Knowledge Prerequisite: Basics on Javascript and C++
Duration: 175 hours
Difficulty: Easy
Mentors: Emmanuel Charruau @allon:kde.org / Harsh Kumar @hadron43:kde.org / Johnny Jazeix @johnnyj:kde.org. But please join #gcompris:kde.org to discuss with the team.
sddm-kcm
Harden sddm-kcm
Project type: Coding
Brief explanation: sddm-kcm is a system settings module to setup sddm, the SUSE security team has found some issues that while not immediately exploitable we would ideally fix. It would also include improving KAuth to support passing file descriptors between the main process and the helper instead of paths.
Expected results: Most/All of the issues identified are fixed.
Knowledge Prerequisite: Some C++/Unix/polkit knowledge is welcome.
Duration: 175 hours
Difficulty: Medium/Hard
Mentor: Albert Astals Cid <[email protected]>
Okular
Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. Contact the Okular developers.
Improve Forms/Javascript support
Project type: Coding
Brief explanation: Okular supports PDF files with Forms, many of those use Javascript to make the Forms functionality nicer to users. We only support some of the Javascript features, the aim of this project is to improve the support for it.
Expected results: Most/All of the issues identified are fixed.
Knowledge Prerequisite: C++/Javascript
Duration: 175 hours
Difficulty: Medium/Hard
Mentor: Albert Astals Cid <[email protected]>
Krita
Krita is a digital painting application, used by millions of people all over the world. For Google Summer of Code, we expect students to already have contributed to Krita by building the application and submitting merge requests for some bug fixes. Note that some projects also demand a good knowledge of algorithms and skill in doing research. Even if there are a lot of ideas, only 3 contributors maximum will be selected for Krita this year.
Averaged/Mixed Color Selector
Brief explanation: Design improvements to Digital Colors Mixer (+ Mixer Slider Docker) with users feedback (including adding a possibility of a gradient cross all channels for custom colors).
Expected results: Gathering user feedback for Digital Colors Mixer and Mixer Slider Docker on Krita-Artists forum. Creating a design based on that feedback (and running through the forum to ensure completeness). Finally, implement the design (this is expected to be a small project with only some changes to UI and underlying logic; if the user feedback proves the dockers need more work than that, we'll adjust by pointing which of the requested features needs to be implemented for the project to be considered finished).
Knowledge Prerequisite: C++, Qt
Difficulty: Medium
Duration: ~90h
Mentor: Tiar, backup: Wolthera
Link: https://bugs.kde.org/show_bug.cgi?id=363315
Saving curves
Brief explanation: There are several places in Krita where we use a specific type of a curve. There is no way to save them or copy to another part of the interface. This project intends to fill that gap.
Expected results: Save and load plus copy and paste curves in any place Krita uses curves. It needs to be both nice to use and not getting in a way for users who don't use them. The saving itself (into a string) is done, what's left is UI/UX work to include it everywhere.
Knowledge Prerequisite: C++, Qt, UI
Duration: ~90h
Difficulty: Medium
Mentor: Tiar
Links: Color Adjustment curves bug report link, Brush editor curves bug report link, Brush sensors curves bug report link, Pressure curves bug report link
Precision and new units in guides
Brief explanation: Users should be able to edit guides by entering the new value, and they should allow more units than just pixels.
Expected results: Ditto.
Knowledge Prerequisite: C++, Qt
Duration: ~90h
Difficulty: Medium
Mentor: Wolthera
Link: https://bugs.kde.org/show_bug.cgi?id=376943
Merging masks
Brief explanation: Krita has several types of masks, this is about Transparency Masks, with Local Selections, Filter Masks and Colorize Masks as a stretch goal. The project is to add a way to merge masks together.
Expected results: Add merging of masks in AND and OR modes. Preferably one of those modes (OR, probably) should be more easily accessible/treated as default, but both must be possible.
Knowledge Prerequisite: C++, Qt, math
Duration: ~90h
Difficulty: Medium
Mentor: Tiar
Link: https://bugs.kde.org/show_bug.cgi?id=380141
Onion Skin Shift & Trace
Brief explanation: It's a feature that is really important for animators. It allows the user to move and rotate onion skins which makes tracing changing objects in motion way easier. It must be designed with professional animators in mind, not just casual users.
Expected results: Usable "shift & trace" mechanic (with rotation as well, not just moving/panning).
Knowledge Prerequisite: C++, Qt
Duration: ~175h
Difficulty: Medium
Mentor: Emmet
Link: Krita Artists feature request Bug report link
Selection Action Bar
Brief explanation: A floating bar, similar to assistants handles, containing several of the most useful actions. Suggested list of options (can change after discussions with users): Invert selection, crop to selection (layer or image), fill selection with foreground color, copy (or cut?) selected content to new layer, transform selected content, deselect selection, and a move handle for the bar itself.
Expected results: Floating bar fully implemented and usable.
Knowledge Prerequisite: C++, Qt
Duration: ~175h
Difficulty: Medium
Mentor: Emmet, Wolthera or Tiar
Link: https://krita-artists.org/t/selection-action-bar/48767
New option in Color Sampler
Brief explanation: Users often want to sample colors from specific layers. This project should add at least two of the following options: “Current layer and below”, “Current layer and below, without filters”, ”All layers except current one”, “Color Labeled Layers” (selecting and merging color labeled layers is already implemented). In addition to that, it should contain two new actions, one for sampling the foreground color according to the Color Sampler tool options, and another for sampling the background color with those options.
Expected results: At least two of the modes, PLUS the two actions/shortcuts.
Knowledge Prerequisite: C++, Qt
Duration: ~175h
Difficulty: Medium
Mentor: Tiar, Emmet or Wolthera
Links: Feature request on KA about Color Labeled Layers option, Bug report about "Current and below" and "Current and below without filter layers" options, Bug report about "All layers except the current one" option.
Waveform in animation track
Brief explanation: Waveform is very useful for animators to sync the animation to the sound (for example lip syncing). Note that waveform generation is already implemented in MLT, the multimedia library Krita is using.
Expected results: Easily accessible or constantly visible waveform in the Animation Timeline docker
Knowledge Prerequisite: C++, Qt
Duration: ~175h
Difficulty: Medium
Mentor: Emmet
Link: https://bugs.kde.org/show_bug.cgi?id=393140
Summary frames on groups
Brief explanation: Animation related project. Contact Emmet for more details.
Expected results: Summary frames on group layers
Knowledge Prerequisite: C++, Qt
Duration: ~175h
Difficulty: Medium
Mentor: Emmet
Link: https://bugs.kde.org/show_bug.cgi?id=437026
Improve Compositions Docker's Batch Export Features
Brief explanation: The current Compositions Docker does feature exporting and batch exporting, but currently lacks configuration for image or animation export settings. It could use more control over how all compositions are exported.
Expected results: Configurable export settings for the composition docker, and API improvements to allow for reuse of existing export GUI window(s).
Knowledge Prerequisite: C++, Qt, CMake
Duration: ~175h
Difficulty: Medium
Mentor: TBD
Pixel Perfect Hand-drawn Lines
Brief explanation: In Pixel Art dedicated programs the line painted by the "pencil" tool (1px solid pixel brush) is not just following the user's mouse/pen's coordinates, but removing duplicate pixels in a smart way, resulting in a so-called "pixel perfect" line. Example: [1] The task is to implement such feature in Krita.
Expected results: A feature in the Pixel Engine working as described
Knowledge Prerequisite: C++, Qt
Duration: ~175h
Difficulty: Medium
Mentor: Emmet, backup: Tiar
Feature request link: https://krita-artists.org/t/pixel-perfect-line-setting-for-pixel-art-brushes/42629
Technical details link: https://rickyhan.com/jekyll/update/2018/11/22/pixel-art-algorithm-pixel-perfect.html
Extend Arrange Docker for layers plus snapping
Brief explanation: Currently, the arrange docker only supports aligning and distributing vector objects of a singlet vector layer. This project aims to extend the arrange docker support for layers and masks too.
Expected results: All the current operations available in Arrange docker could be done with the layers.
Knowledge Prerequisite: C++, Qt, CMake
Duration: ~350h
Difficulty: Medium
Mentor: Wolthera
Link: https://bugs.kde.org/show_bug.cgi?id=338002
Ribbon Brush
Brief explanation: In other art programs there is a brush engine/tip that can take a raster image and while painting a stroke, distort copies of that image in a way that they seemlessly fit together. It's most common usages are chains, laces at the end of the clothes, braids, textured strings etc. Few examples: [2] A picture of technical explanation: [3]
Note that this is an advanced project and you need to be a good student to be able to complete it (you will have help but you need to have a solid foundation beforehand). We also require either some code examples or some kind of proof-of-concept in the proposal. Make sure to contact us early (contact info above).
Expected results: Fully usable brush tip or brush engine
Knowledge Prerequisite: C++, Qt, math
Duration: ~350h
Difficulty: Hard
Mentor: TBD
Link: https://krita-artists.org/t/ribbon-brush/31346
KStars
Ekos Imaging Pipeline
Brief explanation: Implement Ekos node-based Imaging pipeline with multiple concrete nodes to support live stacking of images. Each node takes an image, configuration, and produces an output image along with metadata to pass to the next stage.
Expected results: Ability to live stack images in Ekos
Knowledge Prerequisite: C++ / Qt
Duration: 175 hours
Difficulty: Hard
Mentors: Jasem Mutlaq @jasem:kde.org
Project: FITSViewer & Photometry Improvements
Brief explanation: The FITSViewer is used to display FITS images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:
- Noise Calculation: Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.
- Sky Glow Computation: Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.
- Mask Overlay: Ability to select custom mask over stars to aid in focusing and photometry.
- Photometry: KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.
Expected results:
- Improved Histogram Tool.
- SNR, Sky Glow, and Photometry calculations.
- Photometric reductions. Aperture photometry.
Knowledge Prerequisite: C++, Qt, Threading, Data Structures
Duration: 175 hours
Difficulty: Hard
Mentor: Jasem Mutlaq (KDE Web Chat: Jasem)
Project: Observation Wizard Improvements
Brief explanation: The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:
- INDI Integration: Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.
- Image Integration: The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.
- Save/Load: Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.
- Export: Export the list of object to an external file or source in CSV and JSON formats.
Expected results:
- Improved Observation Wizard Tool.
- Proper integration with INDI & Ekos.
Knowledge Prerequisite: C++, Qt, Data Structures
Duration: 175 hours
Difficulty: Hard
Mentor: Jasem Mutlaq (KDE Web Chat: Jasem)
KDE Games
Implement a Computer Opponent for a Mancala Game
Brief explanation: Mancala games such as Bao, Bohnenspiel, Kalah, Oware, Pallanghuzi and Sungka are strategy games played all over the world. The project would entail creating a KDE application for a Mancala game, with a main focus on a good computerized opponent. As an example Kalah has been solved but only certain board sizes maybe fully implemented to work on a typical desktop or mobile device.
Expected results: A good computerized opponent
Knowledge Prerequisite: Some programming background in a compiled language such as C, C++, Java, Kotlin, Rust but not limited to these.
Duration: 175 hours
Difficulty: Medium
Mentor: Benson Muite - benson_muite at emailplus dot org
LabPlot
LabPlot is a free, open source and cross-platform data visualization and analysis software.
3D Visualization
Brief explanation: At the moment LabPlot supports 2D plotting only. The purpose of this project is to extend the current feature set and to provide support for 3D plots. The available 3D frameworks, see for example https://wiki.qt.io/Using_3D_engines_with_Qt, have to be evaluated and we need to decide whether we use an already existing framework or our own implementation of the relevant algorithms.
Expected results: For the initial implementation it's expected to support the common 3D visualizations relevant for LabPlot's user base (curves, surfaces, fields, etc.) and it should be possible to edit the most important properties similar to how it's done for 2D plot types.
Knowledge Prerequisite: C++/Qt
Duration: 350 hours
Difficulty: Hard
Mentor: Alexander Semke
Lokalize
Lokalize is a program used to aid in translation, and is often used to translate KDE applications.
Improve translation suggestions
Project type: Coding
Brief explanation: Improve usability of translation memory in Lokalize. There is scope for creativity, possible ideas include supplementing the rule based approach with other machine learning techniques or allowing for import of translation memories.
Expected results: More pleasant and efficient translation experience. Greater consistency between translations of KDE applications.
Knowledge Prerequisite: C++
Duration: 175 hours
Difficulty: Medium/Hard
Mentor: Benson Muite - benson_muite at emailplus.org
Kdenlive
Kdenlive is a cross platform, open source, video editing software.
Improved subtitling support
Brief explanation: Currently, Kdenlive saves its subtitles in the SRT format, which only allows very basic styling features - that means only one style for the complete subtitle file. A more advanced file format like ASS (SubStation Alpha Subtitles) would allow much more powerful styling, for example attributing different styles to different speakers, proper styling (using bold, italic or colors on words or sentences only), etc. Currently, Kdenlive can already read basic ASS files (without styling support).
Expected results: Opening and saving an ASS subtitle and keeping the styling infos, implement a widget allowing to create styles and attribute a style to a subtitle sentence, or add some attributes like bold to selected parts of the text.
Knowledge Prerequisite: C++/Qt
Duration: ~175 hours
Difficulty: Medium
Mentor: Jean-Baptiste Mardelle (@j-b-m:matrix.org)