This is Mozilla's list of green-lit project proposals for the 2018 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 the confirmed Google Summer of Code projects. New suggestions can be made on the Brainstorming page. Do not edit this page yourself; contact Mike Hoye 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.

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.

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

  • The following projects have been tentatively greenlit, pending milestone clarifications.

2018 Project List

Title Details Skills Needed Reporter Mentor(s) Additional Comments
ReSpec ReSpec is a JS-based tool used to write W3C Specifications (Web Standards) that is widely used by the Web Standards Community. With 5+ 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. Languages or skills needed: 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.
D3D11 backend for gfx-rs HAL gfx-rs is a graphics abstraction library written in Rust and currently used for prototyping and investigation of Vulkan Portability and WebGPU by Mozilla. The Hardware Abstraction Layer (HAL) of gfx-rs currently supports Vulkan, D3D12, Metal, and OpenGL. We want it to be powering WebRender for Firefox Quantum and Servo, and since WebRender currently runs on D3D11 (through Angle), we need to provide a native D3D11 backend. The implementation can be based off the existing D3D11 code in gfx-rs pre-HAL, and the main challenge is porting the code, optimizing, and ensuring it can successfully run the reference test suite. Candidates should be familiar with Rust as well as low-level graphics development. Not having D3D11-specific experience is acceptable, given the willingness to learn it and a properly setup Windows development environment. Dzmitry Malyshau (Mozilla) Dzmitry Malyshau (Mozilla) Proposal Timeline:
  • Before April 20: setup the Windows environment for DirectX development; run the examples and reference tests with existing Vulkan/DX12/GL backends; get in contact with developers on Gitter.
  • April 20 – May 23: get familiar with gfx-rs HAL architecture, attempt to fix small entry-level issues and/or write an application/library on top of it.
  • May 23 – May 30: setup the backend skeleton with bits of actual logic, such as device initialization, and have it building on CI.
  • June 1 – July 5: implement the DX11 logic necessary to run the `quad` example and pass the basic graphics reference tests.
  • July 6 - July 31: implement support for compute and tessellation; benchmark the new backend against DX12; pass the full reference test suite.
  • Aug 1 - Aug 16: determine the list of capabilities that need to be exposed, merge it with GL backend legacy capabilities, expose to the reference tests.
Servo: Prototype ways of splitting up the script crate Servo is a web rendering engine written in Rust. One specific module contains a huge amount of code that is expensive to compile all at once. This project is intended to explore ways of splitting it into separate modules to achieve better build performance without breaking the complex set of interdependencies that exist in the code. Candidates should be familiar with Rust, in particular using it in projects made of multiple crates and relying on features like traits and associated types. Josh Matthews (Mozilla) Josh Matthews (Mozilla) Full project description page
web-platform-tests: Improve test manifest workflow and performance web-platform-tests is a project for writing a cross-browser test suite, which is used across all major browser engines. The list of tests is stored in a JSON manifest file which is slow to generate and which we currently check in to the Firefox repo. These things create a poor developer experience. The goal of the project is to move to a system where the manifest is downloaded on demand for Firefox developers, and then to explore ways to speed up manifest generation such as employing parallelism or moving performance hotspots to Rust. Candidates should be confident programming in Python. James Graham (Mozilla) James Graham (Mozilla) Full project description page
WasmFiddle WasmFiddle is a web application that facilitates learning of the WebAssembly and its usage in the browser. The goal is to create a learning tool that will allow user to quickly start a project that uses WebAssembly, learn based on examples, explore existing popular toolchains (emscripten, rust, etc), etc. The project will be similar to what jsfiddle, jsbin, or codepen proposes, but with additional elements specific to WebAssembly only, e.g. a code generation from C/C++ languages or how the code will be compiled by the browser and run in native machine code. Languages or skills needed: JavaScript, HTML, CSS, WebAssembly. Suggested additional technologies: React, Rust, C++. Yury Delendik :yury (Mozilla) Yury Delendik :yury (Mozilla) The project involves extending the functionality of the existing WasmFiddle/WasmExplorer projects to:
  • control, inspect and understand every part of the WebAssembly compilation pipeline;
  • don’t hide details or add magic build steps;
  • users can create, modify, fork and share fiddles, to reduce friction, no accounts;
  • influence JavaScript developers through well-thought out examples, best practices and templates;
  • add support for many languages: C/C++/Rust/etc;
  • create environments where users can play and have fun with: WebGL, Physics, Games, Audio Synthesizers.

See WebAssemblyStudio repository for new version of the WasmFiddle.

Pontoon's path to first contribution Pontoon is Mozilla's localization tool, used by hundreds of contributors to translate Firefox,, and many other Mozilla products. It is critical to shipping Firefox to as many users as possible, all around the world. This year, we would like to improve the experience of first-time users of Pontoon. Your task would consist of defining a "path to first contribution", and making it as smooth as possible. That mainly involves adding a tutorial to walk users through the translation interface and reworking the landing page, all of that using recent front-end technologies in a fast-evolving application. JavaScript, HTML, CSS, Python, UX. Django and React are pluses Adrian Gaudebert (Mozilla) Adrian Gaudebert (Mozilla)
AOM - accessibility API AOM is JavaScript API designed to help the authors to make the web pages accessible, i.e. make them usable by the assisstive technologies such as screen readers, screen magnifiers and others. AOM specification is inspired by ARIA standard, an HTML 5 extension, used to add semantics to the web pages. If you are familiar with ARIA, then you can think of AOM as JavaScript ARIA. The AOM proposal (phase 1) was already implemented in Chrome under a flag, and you can help do the same in Firefox. Languages or skills needed: C++. Alexander Surkov (Mozilla) ( Alexander Surkov (Mozilla) ( This project is the opportunity to hack on the heart of Mozilla Firefox, the Gecko engine. It involves working with a large code base and solving a wide variety of problems, from the solution architecture to finding efficient ways to implement it. If you want to learn about Gecko and accessibility, that's the right place. AOM has the potential of becoming a new standard in making the web page accessible next few years. You can help to happen it sooner.
metricsgraphics - zooming and brushing metricsgraphics is JavaScript library designed to help with the presentation of interactive visualization. It is used extensively both inside and outside Mozilla. This project would be about adding a set of zooming and brushing features to facilitate the exploration of large and/or noisy datasets, such as in the Perfherder or Mission Control projects. Detailed project description to come. Languages or skills needed: JavaScript, HTML/SVG William Lachance (Mozilla) William Lachance (Mozilla)
Iodide Notebook The Iodide Notebook is a pure client-side browser-based IDE and publication tool for scientific computing and computational inquiry using web technologies (HTML, CSS, Javascript, WebAssembly). It provides a Jupyter-style notebook interface, granting scientists full access to the power of the DOM and browser APIs within a familiar iterative workflow, and with zero overhead -- absolutely no software installation and configuration is required, so people can seamlessly learn from and extend the work of others.

Students will contribute to: extending the functionality of the notebook; making the notebook code more robust and performant; helping to shape the user experience; and creating example notebooks.

JS; HTML; CSS; React/Redux; familiarity with at least one scientific computing language preferred (ex: MATLAB, Mathematica, Julia, Numpy/Scipy, R, etc). Science/math background is a major plus. Brendan Colloran ( Brendan Colloran ( In addition to helping to build the notebook, actively dogfooding it will be an essential part of our work. This means that students with a scientific and/or applied math background will be encouraged to build example notebooks that demonstrate visualizations, simulations, data analyses, etc., on topics of their choosing. In addition to mentoring students on software development, we will provide mentorship in scientific computing and data science.
Improved Pulse Inspector Backend More details here. The idea is to create a backend service that will allow browser-side applications like pulse inspector to listen to arbitrary Pulse messages. JavaScript (server-side), AMQP, WebSockets Dustin Mitchell (Mozilla) Jonas Jensen (Mozilla) / Eli (Perelman Mozilla) This project can largely be a generic read-only websocket proxy for RabbitMQ, refer to our issue for more details.
Redash - Improve user experience of STMO Mozilla runs an instance of the Open Source project Redash, a data analysis and dashboarding tool that has been customized and configured for use with a number of the Firefox organization's data sets. It provides low barrier access to the vast amount of Firefox Telemetry data (and others) to make product decisions for Firefox and others projects. Languages or skills needed: Python, JavaScript, HTML Jannis Leidel (jezdez) (Mozilla) Jannis Leidel (jezdez) (Mozilla) Knowing SQL or having experience with data analysis is not a hard requirement to work on user experience improvements of the Redash tool itself. Instead this GSoC project is targeted at web developers who enjoy improving tools that have a great impact on how Firefox is developed. Please also see the Firefox data documentation for a more detailed introduction into Mozilla's Redash instance. A goal of this GSoC project is to upstream all improvements made to the upstream Redash project when possible.
Automatically detect web compatibility issues (autowebcompat) Build a tool to automatically detect web compatibility issues using machine learning tools. Python (knowing Keras or having experience with machine learning is a plus) Marco (:marco) (Mozilla) Marco (:marco) (Mozilla) The project involves collecting data (screenshots of websites in different browsers), labeling it, training a neural network to automatically detect when a website is rendered differently in different browsers.
Autogeneration of style structs in Servo's style system Prototype how to run cbindgen on Servo's style system values module to auto-generate style struct definitions for C++ and Rust, which would enable the removal of 5k+ lines of unsafe and slow Rust <-> C++ conversion code. This can be done on a per-struct basis, so prototyping the general mechanism with a simple one like color would be the first step, migrating more and more as time goes on. Primarily Rust (though no need to be really advanced), probably a bit Python for build system integration, and basic C++ since it needs to get generated. emilio emilio Full project description
Timely Security Analytics InfoSec uses the Mozilla Defense Platform, MozDef to aggregate logs and alert on time series. This project seeks to create a structure for extract, transform, load operations (ETL) to process these time series events using MapReduce (Apache Spark). The project will have three milestones:
  • Demonstrated ability to load data from Mozilla SCL3, MDC1, MDC2 to GCP or AWS and process in apache spark. Student shall have choice of languages: scala, python, etc.
  • Demonstrated ability to reason about the MozDef standard data format using map reduce. Produce anomalies for known incident patterns in AWS CloudTrail logs. ( Example: An IAM user or service account used a service they have never used or logged in from a new GeoLocation / IP address tuple. )
  • Demonstrated abilility to reason about non structured data (non-MozDef standard format) and correlate with MozDef structured events.

For more information see: Google Doc

Languages or skills needed: Python, Scala, Javascript, ETL, AWS/GCP, Data Science Fundamentals, Apache Spark, Pig, or other big data. [ Andrew Krug :akrug (mozilla) [ Andrew Krug :akrug (mozilla)

[1] Michal Purzynski :michal` (mozilla)

This project represents a unique opportunity to work on one of the only fully open source SIEM projects in the community -- MozDef. The MozDef platform is running in production at Mozilla and ingests 14,000,000 events per year. The current alert system uses time series rules to generate meaningful alerts for the infosec team and Mozilla's Operations Center. We're hoping that with the help of qualified student(s) this rich data set can also generate alerts using basic machine learning techniques. This is a unique opportunity to work on aggregation of disparate sources of data: NSM, CloudTrail, etc. into spark. Real-time alerts over large quantities of data.
C++ Static Analysis Add new checkers specific to our base code. Strong C++ experience and clang infrastructure. Sylvestre Andi In order to tackle issues during the development phase, Mozilla wrote a bunch of static analyzers checkers based on clang-tidy. In this project, we will focus on writing more checkers (either generic to C/C++ or specific to Gecko programming patterns).
Download Spam Protection for Firefox In Firefox, we want websites to go through a permission prompt if they want to initiate several downloads in an automated (not user-initiated) fashion. The project will involve implementing a permission prompt, implementing the logic of when it should be triggered, and collecting data (via telemetry, etc) on how users interact with the prompt in order to verify how the feature behaves. Good JavaScript experience and a basic understand of how the web works. Johann (:johannh) Nihanth (:nhnt11) A more detailed description can be found here
TLS scanning in Rust for Mozilla TLS Observatory Mozilla TLS Observatory is a hosted service that provides hindsight and compliance checking on the configuration of HTTPS servers. The goal of this project is to rewrite the ciphersuite scanner in Rust to support scanning TLS 1.3, but also maintain the ability to scan old version of TLS, all the way back to SSL2.0. This will likely require interacting with older versions of OpenSSL.

Performance is also a strong requirement for this project. TLS Observatory scans thousands of sites every hour, and saving precious seconds on each scans make a big difference to the infrastructure.

Finally, because this is a replacement of Cipherscan, this project requires maintaining backward compatibility with integrations that rely on specific flags, or json outputs.

The final goal is to ship this project into the production infrastructure of TLS Observatory.

Programming skills in C and Rust. Strong understanding of TLS and micro-services architectures. Julien Vehent Julien Vehent Cipherscan is the measuring tool that Mozilla uses to keep on eye on TLS configurations across the Internet. It is instrumental to the TLS guidelines work we do over at Server Side TLS. This project will directly contribute to tooling that operators rely on worldwide to keep their websites secure.

This is a fairly complex project that requires programming, networking and cryptography skills. Candidates will require skills in all three areas to succeed (GSoC is not long enough to learn them on the go).

Multi-tab select in Firefox This project will focus on adding multiple-select functionality to the tab strip in Firefox. The selected student will teach Firefox to know about multiple tabs being selected, while also adding functionality to close, and move to new window. JavaScript, CSS, and web experience Jared Wein (:jaws) Jared Wein (:jaws) You can learn more by reading the bug on Bugzilla, but note that the comments there stem back multiple years as people have been wanting this feature for a long time. 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. Most of our tab-selection code lives within our tabbrowser.xml file, which you can browse around if you're interested to see how some operations work.
A/B testing framework for Android In Firefox for Android we are using an A/B testing framework based on "Switchboard". We want to extract this framework into a standalone library that can be used in our other Android apps. Android, Java, Kotlin Sebastian Kaspari (:sebastian) Sebastian Kaspari (:sebastian) The existing code in Firefox for Android lives here. Originally we started using the existing "Switchboard" library. But over time the behavior of this code changed as our requirements changed. Therefore we do not only want to extract the code - but also re-write it (in Kotlin).