Skip to content

Google Summer of Code 2017

R.Harikrishnan edited this page Mar 22, 2017 · 21 revisions

GSoC 2017

This is a page showing all proposed ideas for our application for the Google Summer of Code 2017.

About K-9 Mail

K-9 Mail is an open source email client with support for multiple accounts, search, IMAP push email, multi-folder sync, flagging, filing, signatures, BCC-self, OpenPGP & more! K-9 supports IMAP, POP3 and Exchange 2003/2007 (with WebDAV).


K-9 is very old - almost as old as can be, by Android standards. We regained a lot of development momentum in 2016, and want to make 2017 the year where we get up to speed with what's expected of a modern and competitive App. This means material design, but also an optimized user experience and compatibility with more recent Android features.

We are serious about freedom as in free speech, but also about software engineering: We have an open development process, but nothing gets merged without proper code review.

To speed up our development pace even more in 2017, we are looking for contributors who want to join us, gather some Android experience, bolster their street cred (and of course receive that sweet paycheck).

Formal Prerequisites

  • Be a student enrolled at a university
  • Solid understanding of Java
  • Knowledge of Android programming is recommended

Contribution Guidelines

  1. Read the README, especially the notes about coding styles
  2. If you aren't familiar with use of git and github, read our git guide (this is important!)
  3. Fork K-9 Mail and contribute code (the best part ;) )
  4. If you have questions, or in #k-9 on! (Can also be accessed via Riot). The development documentation contains some notes on the application structure.
  5. Open a pull request on Github. We will help with occurring problems and merge your changes back into the main project.

"One patch" rule

We require one accepted patch (pull request) from each potential GSoC student, before accepting the student for GSoC participation.
The reason for this requirement is that you can show us that you have succeeded in building K-9 Mail, and that you have understood a little piece of K-9's code and are able to improve it.

To make it easier for you to get started, we picked some (hopefully) easy issues for this purpose:

(Ideally pick one not marked as 'being worked on' so that you don't conflict with another person getting started with K-9)

Keep in mind that mentoring is about providing guidance to help you solve your task, but we don't want to keep holding your hand all the way. It's important for us to know that you can code and solve technical challenges on your own, while also maintaining a constructive dialogue of relevant design decisions with us.

Google Summer of Code Registration Procedure

  1. Have one patch accepted in K-9 (see "one patch" rule)
  2. Lookout for interesting tasks on the Ideas page in our wiki, then choose one you would like to work on. If you have an interesting task of your own in mind, you can also propose your own ideas - if you do, make sure to leave enough time to discuss it with us!
  3. Apply officially on the Google Summer of Code page (Registration opens on March 20th 2017). In your proposal, outline your understanding of the task you picked. This should include a description of the task from your perspective, challenges and design decisions you expect to encounter along the way, and a rough timeline for your implementation ideally based around four milestones (i.e., one every three weeks). Make sure to allocate some time for writing tests and code review!


GSoC has three formal evaluation points - one each at the end of June, July and August. These evaluations determine if you receive the stipend from Google. In order to receive a pass for the evaluations you will need to show adequate progress toward your project's goals. We have a number of mechanisms to help you meet your goals and get in touch with us and other developers:

  • We have a weekly developer meeting on IRC, where all students talk about their last week's progress, challenges and milestones. We will also inform you about our own progress and current plans during this meeting.
  • You need to have a public K-9 branch for your code to which you commit regularly. To this end, you will be granted write access to our repository after we accept your first larger pull request.
  • Students are encouraged to track their progress and milestones on our issue tracker.
  • You are encouraged to write blog posts for our website.

Remember: we want you to succeed and we'd like you to stick around.


This is a list of larger tasks which we have on our roadmap, and which we feel are well suited for GSoC projects. This is not an exhaustive list, if you have a great feature in mind feel free to suggest your own! We are always up for discussion.

Improved Account Setup

Brief explanation: The account setup experience is one of the oldest and most outdated parts of K-9 Mail: It reflects the state of the art from the late 2000s, where users were asked for their IMAP server address and port. Standardization improved since then, and modern e-mail clients should ask the user no more than their e-mail address and password, figuring out technical details from mechanisms such as rfc6186 or Thunderbird's Autoconfiguration. This tasks involves replacing the current account setup entirely, integrating auto-detection of technical details with a simple UI that asks for technical details only as a fallback.

Expected results: New account setup workflow, with better UI and better automatic detection of settings

Priority: high

Knowledge Prerequisite: Java programming, basic knowledge about e-mail infrastructure

Skill level: medium-high

Mentor: Vincent Breitmoser

Contact: IRC/Riot or over XMPP (Jabber-ID:


Brief explanation: Specified in RFC7162, the CONDSTORE and QRESYNC extensions to the IMAP protocol provide an enhanced way of synchronizing the local mail store with the remote state. This reduces the number of roundtrips required between client and server for a polling operation, saving significant amounts of time, traffic, and battery life.

Expected results: Support for CONDSTORE and/or QRESYNC in the IMAP synchronization routine

Priority: high

Knowledge Prerequisite: Java programming, basic knowledge about e-mail infrastructure

Skill level: medium-high

Mentor: Vincent Breitmoser

Contact: IRC/Riot or over XMPP (Jabber-ID:


Brief explanation: Most modern e-mail clients use IMAP for communication with the user's e-mail provider. This is missing critical features for a modern client, in particular support for a proper push mechanism. JMAP is a modern replacement developed by FastMail, that is based on JSON via HTTP and strives to replace the plethora of proprietary APIs that vendors use to sidestep the shortcomings of IMAP. While not widely deployed, support is available on the server side in Cyrus and a work in progress in Dovecot, making this a promising protocol that we would love to support.

Expected results: Basic support for JMAP

Priority: medium

Knowledge Prerequisite: Java programming

Skill level: high

Mentor: Vincent Breitmoser

Contact: IRC/Riot or over XMPP (Jabber-ID:

Rich-Text Mail Composition

Brief explanation: Editing of rich-text content and composition of HTML mails using a WYSIWYG editor is a feature that is requested every once in a while. It is one of the main selling points of Kaiten, a proprietary fork of K-9. This fork has not been maintained in a while, but its code is available as a starting point to bring this feature back into K-9 itself. While rich-text editing is a nice feature to have, it is important to recognize that a large part of our user base prefers sticking to good old plain text email, meaning this feature must be implemented in a way that gets out of the way of those users.

Expected results: Seamless rich-text editing in mail composition, preserving support for plaintext

Priority: medium

Knowledge Prerequisite: Java programming

Skill level: medium

Mentor: Vincent Breitmoser

Contact: IRC/Riot or over XMPP (Jabber-ID:

Proxy Support

Brief explanation: Support for proxies at the application level is a nice feature to have for users with that extra bit of privacy requirement, since it allows obfuscating communication with their e-mail server. It also enables use of TOR using the Orbot App. This feature has a high reliability requirement - if the user configures a proxy, we must make sure never to establish a direct connection.

Expected results: Support for proxying, and TOR support using Orbot

Priority: medium

Knowledge Prerequisite: Java programming

Skill level: medium

Mentor: Dominik Schürmann

Contact: IRC/Riot or over XMPP (Jabber-ID:

Smaller Ideas

These ideas are of a smaller scale, and can likely be done in a week. We recommend students pick one of these in addition to one of the larger tasks above, to either do at the beginning to get more comfortable with the code base, or take a break off their main task in the middle for some diversity (working on a single task for twelve weeks can be exhausting!)

Image Attachment Resizing

Smartphone cameras typically take pictures at several megapixels resolution, resulting in filesizes of a megabyte or more. These files are very large for attachments, so it would be helpful to ask the user if they want to downscale them, showing a dialog that offers between Original, Medium or Small size. Code for this functionality can probably be reused from either Sendreduced or Riot which has this functionality already.

Show Mail Source (or structure)

K-9 previously didn't store the original source of emails, which is why it doesn't have a "view source" feature. Since a recent database upgrade we do store this data, so this should now be a simple feature to implement. Bonus points for making quoted-printable or base64-encoded attachments collapsible.

Save E-Mail/Mailbox to File

Similar to showing email source, this is now a feature that can be added relatively easily. As an extension of this, entire folders could be saved into mailbox files and also imported from there, yielding a simple yet effective backup mechanism. This latter feature is probably a task for multiple weeks on its own.

Progress Indicator while fetching Attachment

We do keep users waiting while fetching attachments in mail view. Showing a meaningful progressbar (rather than the indeterminate one) would be helpful to reassure users that something is happening, or find out when there is no progress.