From MozillaWiki
Jump to: navigation, search

This is Mozilla's list of green-lit project proposals for the 2019 Google Summer of Code.

Are you a student looking to apply to GSoC with Mozilla? You're in the right place. This page lists all of our proposed Google Summer of Code projects. New suggestions can be made on the Brainstorming page. Do not edit this page yourself; contact mhoye or Florian for edits.

If you're interested in participating in Mozilla's GSoC program, you can choose from the list below, but you do not have to. You can submit a proposal for your own idea. You should look at the guidelines, though, and discuss your ideas or application in the #introduction channel on This is important, as GSoC projects must have a supporting member of the Mozilla community to evaluate and mentor them, named in the application.

Please bear in mind that a preexisting relationship with Mozilla is not a requirement for a successful GSOC proposal. While participating in Bugzilla is a good way to become familiar with how Mozilla works, "spamming" Bugzilla to establish your bona fides or improve your chances of a successful application has not historically been a successful approach. We're grateful for our volunteers' contributions, as always, but often that effort would be best put towards focusing on the proposals you are specifically interested in, and putting your effort into crafting an application for them specifically.

Application Advice

You should do the following:

  • Talk to the mentor. Contact details are on this page; if all you have is a nickname, reach out to them on IRC.
  • Read the GSoC Student Guide and follow its advice.
  • Read How Not To Apply For Summer Of Code and avoid doing the things listed there.
  • Read our examples of good applications: 1, 2, 3.
  • Apply on the GSoC site (note that we have an application template).
  • It is entirely acceptable to apply for 2 or 3 projects, if more than one catches your eye; if the applications are high quality, that can improve your chances. Applying to more than that will seem like spam.
  • Participation in any Mozilla spaces, forums or events, including our GSOC projects, are subject to Mozilla's Community Participation Guidelines, and you should read them carefully.

Questions about individual projects are best addressed to the potential mentor of that project. These should be listed in the table below. If you want to contact a mentor and contact details are not here, ask people in the #introduction channel on IRC: irc:// If you have questions of any other sort, send mail to Mike Hoye. He will try and respond promptly and direct your questions to the right person.

Project List

Title Details Skills Needed Reporter Mentor(s) Additional Comments
Improve Python in the browser The pyodide project allows the Python scientific stack to run in the browser by compiling it to WebAssembly. Help make stuff run better and faster there. Python and JavaScript. Can learn the WebAssembly parts as you go. Michael Droettboom Michael Droettboom There are a number of specific projects we have in mind, but are open to other proposals that are within scope and seem practical within the timeframe. (1) Implement matplotlib's display on top of Web APIs (HTML5 Canvas, etc.) This would allow us to avoid shipping a whole separate rendering engine to the browser. (2) Build WebAssembly support into the conda packaging system to make it easier to distribute new compiled packages for Pyodide. (3) Make multi-dimensional arrays sharable between Python and Javascript. See Pyodide's list of issues for additional ideas. About the mentor: Michael Droettboom is a Staff Data Engineer at Mozilla, and a former lead developer of matplotlib with years of experience building the Python scientific ecosystem.
ReSpec ReSpec is a JS-based tool used to write W3C Specifications (Web Standards) that is widely used by the Web Standards Community. With 6+ years of development, it's heavily depended upon by the W3C community at large (of which Mozilla is an active participant). ReSpec's code is in need of some modernization, optimizations, and bug fixes - and we could use your help! In this project, you would have the opportunity to make ReSpec's UI more accessible, making it leaner and faster using distributed processing with Web Workers, and/or adding new features to make the lives of W3C spec Editor's better. JavaScript, HTML, CSS. Marcos Caceres Marcos Caceres ReSpec offers students the opportunity to work on a large code base that has extensive real world use and impact. The project offers students an extensive range of problems to tackle, from UI design, to concurrent processing (using Web Workers to do distributed text processing), dealing with accessibility and internationalization, writing and learning about unit and integration tests, security, code review, etc. - as well as exposure to the W3C and the web standards community, this project also aims at teaching students about how web standards are put together. To determine if this is a project you would like to be part of, see the list of issues you could work on. It's a great opportunity to learn about all aspects of open source software development, but with the freedom to take on small to large challenges over the Summer (depending on your skill level and level of confidence). About the mentor: Marcos Caceres is a Staff Engineer at Mozilla who has been working on Web Standards for over a decade. Marcos is the lead maintainer of ReSpec. Marcos has extensive experience mentoring developers and has previously successfully mentor a GSO student.
Ship Public Suffix List (PSL) over Remote Settings The list of public domain suffixes (DNS) is shipped with every release, with no way to update it on long term releases for example.

Now that Remote Settings has become a solid solution to ship data, we could use it to publish updates of the PSL. The task consist in migrating the current client code to read from Remote Settings instead of a file, and implement a scheduled job (like Python) to push updates automatically (most likely compiled as a DAFSA file)

JavaScript and some Python basics Mathieu Leplatre Mathieu Leplatre
bugbug A platform for machine learning projects applied on Bugzilla, VCS and other software development data. Python Marco Castelluccio ( Marco Castelluccio ( The project will involve one or more of:

i) building additional classifiers (e.g., to detect bugs with no steps to reproduce, or to suggest a developer to assign to a bug, and so on);

ii) improving accuracy/precision/recall of the existing classifiers by implementing other machine learning techniques (e.g., by using convolutional neural networks or recurrent neural networks);

iii) improving accuracy/precision/recall by implementing additional feature extraction steps or making the already existing ones better.

WebSocket Monitor Support for WebSocket monitoring and inspection in Firefox DevTools. JavaScript/React Jan Odvarko Jan Odvarko This project aims at providing support for WebSocket monitoring and inspection in Firefox DevTools. The feature should be built on top of the existing Network panel UI and responsible for visualizing data sent through WebSocket connection (i.e. WS frames). The user should be able to use the UI to see as well as analyse the data (search, filter, etc.).
Helpful crash reporter The crash reporter only allows users to send crash reports but in some cases it might help the user diagnose the crash and solve it on his/her own C++, Javascript Gabriele Svelto Gabriele Svelto There's a few things that could be implemented:
  • A quick test of the memory owned by the crashed process (such as those in memtest86+) might catch faulty memory, a common cause for crashes
  • The crash reporter client might try and validate Firefox files which can sometimes become corrupted (usually because of hardware issues). If they are it can prompt the user to re-install Firefox
  • Many crashes are caused by buggy graphics drivers, while we blacklist the most egregious offenders we can't cover them all. The crash reporter might identify a faulty driver (if a bug for it has already been filed) and point the user to up-to-date drivers
  • For crashes caused by known bugs it should be possible to point the user to the bug filed on bugzilla
Debugger Inline Variable Preview When the Firefox DevTools debugger is paused, users can hover over variables to get a useful tooltip that details the variable's value at that time. While this popup is very informative, one valuable enhancement would be displaying relevant contextual variables values alongside the variable inline, alleviating the need for tooltips and allowing the user to more quickly get the information they need. The applicant will work alongside the Debugger's team to implement this feature based on UX mockups and be given space to share and implement ideas of their own. Javascript David Walsh David Walsh
GitHub Checks Support Improvements (withdrawn)
Support GitHub Logins in Taskcluster (withdrawn)
Improve Webdriver support in Servo Servo currently supports a minimal subset of the Webdriver standard. We would like to improve Servo's support, and verify its correctness by passing a set of automated tests. This project would involve writing Rust code to extend the webdriver server inside of Servo, as well as JavaScript and Python to support the testdriver.js testharness. Familiarity with Python & JavaScript; interest in learning Rust Josh Bowman-Matthews Josh Bowman-Matthews Project description
Support importing Instruments profiles in perf.html perf.html visualizes performance data recorded from various performance analysis tools. It is a tool designed to consume performance profiles from Gecko Profiler but can visualize any profiler able to output JSON. It currently supports Gecko, Chrome and perf profile formats. Instruments is a performance analyzer that comes with Xcode. This project would involve adding support for Instruments profile import in perf.html. Familiarity with JavaScript & React Nazım Can Altınova Nazım Can Altınova
Common Voice - WebAssembly MP3 Encoding Currently Common Voice doesn’t support Safari, which is also why we have an iOS app. The only reason being the missing MediaRecorder API. It could be polyfilled (rebuilt in “userspace”) by compiling an MP3 encoder to WebAssembly. I’ve tried that a couple of times, but never had enough time to fix the opaque bugs happening in Safari. This could also be turned into its own library and would be a nice story overall of how WASM can help with WebCompat and missing APIs. JavaScript Gregor Weber Gregor Weber This GitHub issue lines out some thoughts around how to implement it and you can find references to closed PRs which tried implementing it in various ways.
Common Voice - Voice Wave Avatar We’d like our users to have unique(ish) avatars based either on the characteristics of their voice or a visualization of how their name (or an utterance of their choosing) is pronounced. It could also be a combination of the two ideas. We’re very open to explore this space together, though the a candidate should have some knowledge in sound theory. JavaScript, Some knowledge of sound theory Gregor Weber Gregor Weber
Tab Manager menu in Firefox This project will extend the tab overflow menu - which shows tabs not visible in the browser's tab strip - to allow management of all open tabs across all browser windows. The selected student will be working directly in the Firefox codebase to add functionality and new menu structures to make this easily accessible for end users. JavaScript, CSS, and web experience Sam Foster, Bryan Bell Sam Foster We have UX mockups for this feature, which could be broken into two phases. We also have a bug on file, where discussion has begun. While working on this you will become very familiar with the Browser Toolbox, our own "Inspector" tool for the browser user-interface, as well as writing automated tests for the new feature you're adding. The existing tab overflow code lives in our browser-allTabsMenu.js file, which will be the starting point for the new tab manager. You can look at this and the existing tab code to get an idea of how this currently works.


Firefox Reader Redesign The design of Firefox’s Reader Mode has languished behind as Quantum has implemented the new Photon Design System. The interface needs to be rebuilt using new visual and interaction styles to match the Photon Design System. JavaScript, CSS, and web experience Abraham Wallin Eitan Isaacson UX Mockups for this feature are available with visual bugs have been reported here and here. Functional bugs and feature enhancements have been documented here, here, here, and finally here. The request is for an engineering student to implement the designs and tackle the queue of bugs/enhancements within the Firefox code base. Mentors will support with prioritization, design direction/assets, and technical guidance.

An Android file downloader designed for Emerging Markets A lesson learned thanks to our UX team is in Emerging Markets the data plan is dynamic: in late nights we have the most affordable bandwidth. Here's the question: Why not schedule big files and videos and have them downloaded when you're sleeping? The mvp would be an App which we can send urls to. After receiving these urls the App either downloads it directly or defer it to late night. As there are more and more background restrictions enforced on new Android APIs, this should be a fun and challenging journey.

The ultimate goal of this would be to embed this downloader in our browser for Emerging Markets, Firefox Lite. Firefox Lite is not satisfied with the current Android Download Manager in several ways: We'd like to give users the ability to pause/resume a download, we'd like to download a file directly to SDcard (opposed to download it to the main storage and move it into SDcard). That being said, please focus more on the reusablility of your App as a library than the UX/UI of the App itself. Afterall, GSOC is a coding project!

We've also prepared an even more ambitious mission for those who want tough challenges: Design the app and make it dynamic deliverable. With aabs we can satisfy both light and heavy users by defaulting Android Download Manager as the download tool and prepare the aforementioned downloader dynamically so that Firefox Lite itself is still minimized in terms of disk size. Nevin and mTwTm are Android developers who can provide assistance to Android App and library design.

Android Java/Kotlin mTwTm(Teng-pao Yu) mTwTm(Teng-pao Yu) (, Nevin Chen ( We're receiving requests for mockups already; thank you! However, the core of this project to me is the downloading library rather than the App. To illustrate what might make a good proposal, we want you to imagine what would be a convenient way to schedule downloads. There are many ways we could do this: Copy-pasting download links, have the app opened whenever a link is clicked, or find a way to give other third-party apps access to your App's download queue.

I would also encourage candidates to differentiate onself by focusing on demonstrating your understanding to Android Apps and download protocols. Brainstorming for more use cases is encouraged but we would really like to learn more about how you can implement this project efficently instead of what you can plan in your proposal.

Also, we're utilizing the Mozilla Asia Product mail-list (!forum/mozilla-asia-products) for discussions around this project. You might find some useful discussions there as well.

Toolkit for sandboxing third-parties libraries in Firefox Firefox supports a long tail of infrequently used image and audio formats to

support the occasional website that uses them. Each such format requires the Firefox decoder to use a new open source library for parsing and decoding. This, unfortunately, increases the attack surface of Firefox and as we saw in Pwn2Own 2018, Firefox was successfully exploited via a bugs in such libraries (libogg in this case).

This project proposes to sandbox third-party libraries in Firefox by building a new software-fault isolation toolkit. Our tookit will build on the WebAssembly compiler to isolate libraries in Firefox. But, as part of this toolkit we will also develop and apply a library for safely interfacing with sandboxed libraries (and sanitizing data coming from them). with this toolkit we can ensure that any vulnerability in third-party libraries (e.g., libogg or libpng) cannot be used to be used to compromise Firefox.

C/C++, experience with WebAssembly Eric Rahm ( Nathan Froyd
Test automation our linting tools We have a several linting tools running on Firefox code base, they currently don't have a test suite.

The goal of this project is to make sure that tests are executed. We currently have a similar test automation for static analyzer jobs. The idea would be to extend (or replicate) this model for ./mach lint (which run flake8, eslint, etc) and ./mach clang-format The bug is

Python Sylvestre ( Andi Postelnicu (
Firefox Account Security Dashboard Firefox Account administrators and users need an easily digestible view into the important events that have occurred on an account, providing a way to audit for irregularities. JavaScript, HTML, CSS, MySQL Vijay Budhram, Shane Tomlinson Vijay Budhram, Shane Tomlinson The Firefox Account platform tracks security information about an account, but does not surface this information in an easily consumable format. Users and administrators should be able to see a timeline of an account’s security related events, such as connecting devices, signing into services, changing or resetting passwords, and adding or removing 2FA. Each event in the timeline should include a timestamp, IP address, and location information when they occurred.

This project would entail updating our security event API to ensure we track and expose the required data. The first phase is to build a script that consumes the API and pretty prints the timeline. The second phase is to provide a web interface for the security timeline.

Improving FastParquet FastParquet is a Python library that needs improvement to how it writes the parquet file format Python Kyle Lahnakoski Kyle Lahnakoski Read more
Faster Pyparsing Pyparsing is a Python library that provides a DSL for language specification. It could use some optimization. Python Kyle Lahnakoski Kyle Lahnakoski Read more
TUID service improvments The TUID service handles millions of requests daily from hundreds of machines. It must go faster, and be stabilized. Python/Flask/Sqlite Kyle Lahnakoski Gregory Mierzwinski Read more
Firefox Source Docs Infrastructure Improve the infrastructure underpinning Firefox's in-tree documentation. Python, Sphinx, Rst Andrew Halberstadt Andrew Halberstadt Please see bug 1535452 for technical information.

Writing docs for Firefox's in-tree source docs is time consuming and difficult and the end result is difficult to navigate.

With MDN de-prioritizing build and workflow docs, we need a suitable replacement for all of Firefox's contribution and workflow documentation. The great advantage of documentation living in-tree, is that it can be updated along with the source. Unfortunately the current system to build and generate docs is difficult to write for, slow to build and generates poorly organized documentation. These factors discourage developers from creating or updating docs.

This project aims to improve the documentation experience via static analysis tools (e.g hint when docs might need to be updated), enabling linters, faster build times, additional language support and well structured hierarchies. Help make documentation a bigger part of our developer's day to day workflow.

Improve FixMe Improve FixMe, a tool for surfacing meaningful contribution opportunities to new contributors. This project started two years ago as a GSoC project and we are looking into adding more capabilities. The tool currently fetches issues only from GitHub and relays a lot into the tags project maintainers use in their repositories. We want to add gitlab support and come up with a more sophisticated way of identifying technologies and skills needed for new contributors - Backend: Go, Buffalo, Postgresql. - Front-end: React, typescript, Redux Christos Bacharakis Christos Bacharakis Link to front-end source code, link to backend source code. FixMe tool in action
Rust AV1 Encoder (rav1e) Project Mozilla's rav1e Project [1] is a clean room AV1 encoder implementation written in Rust. The goal is to create a production ready AV1 encoder for use with common internet use cases: Video-On-Demand (high latency), Live Streaming (some latency), Interactive Video Conferencing (low latency).
  • C/C++
  • Rust
  • SIMD
Nathan Egge Nathan Egge We are looking for GSoC students to help us research and implement advanced encoding algorithms in rav1e. Areas of interest are:
  • Scene detection
  • Frame type assignment and ordering
  • Encoder complexity analysis and design of speed levels
  • Rate-distortion optimization algorithms
  • Parallelized encoding using Rust fearless concurrency
  • Chunked encoding
..your next idea here! some details skills/language reporter mentor comments