Open Policy & AdvocacyPatent Rights should be balanced by Consumer Rights

What if you couldn’t sell your old car without getting a patent license? What if you couldn’t bring your smartphone into the US without the phone maker’s permission? It would be surprising, to say the least. There’s even a good chance you wouldn’t feel like you owned the products that you bought.

That’s not the world we want to see. That’s why, today, together with EFF, Public Knowledge and others, we filed a brief with the U.S. Supreme Court explaining how a legal theory called “patent exhaustion” is a necessary boundary to protect consumers and prevent the overstepping of patent law on user rights.

Patentquest cropThe parties in the case are the laser printer manufacturer Lexmark, which owns patents covering their toner cartridges, and a small company named Impression Products, which acquires used Lexmark cartridges and sells them refurbished. The Federal Circuit decided that Impression Products infringed Lexmark’s patents when it bought these used Lexmark toner cartridges, imported them into the U.S., and resold them. On first impression, the case may seem a bit esoteric. But, when you take a deeper look, this ruling contradicts well established law meant to protect consumers.

A patent is a legally sanctioned monopoly during which the patent owner can exclude all others from certain activities, including making, selling or importing the patented invention. An important limitation on these rights is that they end when a product is sold, a doctrine called “patent exhaustion” that has been recognized in the U.S. for almost 150 years.

Patent exhaustion enables all of us to use the products we buy without needing a separate patent license, including re-selling those items second-hand. This is significant because, without these limits, you could be prohibited from doing many of the things you have always been able to do with the products you own.

In a world where the things we buy (from cars to smartphones to toner cartridges) are increasingly dependent on technology and sometimes hundreds of thousands of patents, it’s even more important that patent law protects the rights of users to freely use the products they purchase.

Air MozillaMozilla Weekly Project Meeting, 23 Jan 2017

Mozilla Weekly Project Meeting The Monday Project Meeting

Mozilla L10NFirefox L10n Report – Aurora 53

Current Aurora Cycle – Firefox 53

Key dates for this cycle:

  • Beta (52): localization updates for already shipping locales must be completed before 22 February.
  • Aurora (53): localization updates must be completed before 6 March. That’s the Monday, also known as merge day, before the next release of Firefox.

String breakdown:

  • Firefox Aurora desktop has 303 added strings (182 obsolete). About 25% of the new strings are for Developer Tools.
  • Fennec Aurora has 60 new strings (46 obsolete). 9 new strings are Fennec-only (in /mobile).

There are currently no pending requests to uplift patches with strings to Aurora.

For further details on the new features you can check the release notes (they’re usually published a few days after release):

Noteworthy Changes Available in Aurora

These are some of the interesting changes introduced in the last cycle.


Several strings were updated in Preferences, switching from “I/me” to ”You/your”. Depending on the way you translated them before, following closely English or using your own style, you might be able to reuse the existing translations.


Permission dialogs (sharing microphone, camera, location, etc.) have been redesigned to have a consistent layout and message. The result is that there are about 50 new strings to translate, in /browser and /toolkit (for password dialogs). You can use this website to test most permission dialogs.


There are several new strings related to managing WebExtensions-based add-ons. To give you an idea, the permission system is similar to the one available in a mobile OS, and you need to review them before installing or updating add-ons:


A few strings changed without a new ID to fix the use of “login” (noun) instead of “log in” (verb). They will show up as fuzzy in Pootle, but you should be able to confirm your existing translation



There’s a new string that is missing a comment (will be fixed, but not in time for this aurora cycle): “Open tabs” in pref_private_data_openTabs is a preference to clear open tabs, so “Open” is an adjective in this context, not a verb.



Localization is still broken for Debugger. In addition to that, a problematic changeset landed at the very end of the cycle: 7 strings changed without a new ID, and a few of them have issues (no plural form, one unclear). All issues should be fixed in the next Aurora cycle (this version of Debugger is enabled by default only on Nightly and Developer Edition).


New Languages

New locales reached release with Firefox 51:

  • Georgian (ka) and Kabyle (kab) in Firefox desktop.

Congratulation to all the teams involved! It’s been a long time since we added new language to release.

We currently have 5 other locales working on Firefox desktop, and we really look forward to release them in the next versions of Firefox:

  • Latgalian (ltg)
  • Burmese (my)
  • Nepali (ne-NP)
  • Tagalog (tl)
  • Urdu (ur)

The following locales are moving to Beta with Firefox 52:

  • Asturian (ast)
  • Georgian (ka)

If you want to know more about the process of releasing new locales, or if you speak one of these languages and want to know how to help the localization teams, please get in touch with us.

To all localizers: Thanks again for all the time and effort you put in localizing and promoting Firefox in your language.

Mozilla Add-ons BlogMigrating to WebExtensions: port your stored data

WebExtensions are the new standard for add-on development in Firefox, and will be the only supported type of extension in release versions of Firefox later this year. Starting in Firefox 57, which is scheduled to arrive in November 2017, extensions other than WebExtensions will not load, and developers should be preparing to migrate their legacy extensions to WebExtensions.

If you have a legacy extension that writes data to the filesystem, and you’re planning to port it to WebExtensions, Embedded WebExtensions are available now in Firefox 51 to help you transition. Embedded WebExtensions can be used to transfer the stored data of your add-on to a format that can be used by WebExtensions. This is essential because it lets you to convert your users without the need for them to take any actions.

What is an Embedded WebExtension?

An Embedded WebExtension is an extension that combines two types of extensions in one, by incorporating a WebExtension inside of a bootstrapped or SDK extension.

Why use an Embedded WebExtension?

There are attributes (functions) of legacy add-ons that are used to store information related to the add-on that are not available in WebExtensions. Examples of these functions include user preferences, arbitrary file system access for storing assets, configuration information, stateful information, and others. If your add-on makes use of functionality like these to store information, you can use an Embedded WebExtension to access your legacy add-on data and move it over to a WebExtension. The earlier you do this, the more likely all your users will transition over smoothly.

It’s important to emphasize that Embedded WebExtensions are intended to be a transition tool, and will not be supported past Firefox 57. They should not be used for add-ons that are not expected to transition to WebExtensions.

How do I define an Embedded WebExtension?

To get started, read the documentation below. You can also contact us—we’re here to help you through the transition.

MDN docs:


Web Application SecurityCommunicating the Dangers of Non-Secure HTTP

Password Field with Warning Drop Down

HTTPS, the secure variant of the HTTP protocol, has long been a staple of the modern Web. It creates secure connections by providing authentication and encryption between a browser and the associated web server. HTTPS helps keep you safe from eavesdropping and tampering when doing everything from online banking to communicating with your friends. This is important because over a regular HTTP connection, someone else on the network can read or modify the website before you see it, putting you at risk.

To keep users safe online, we would like to see all developers use HTTPS for their websites. Using HTTPS is now easier than ever. Amazing progress in HTTPS adoption has been made, with a substantial portion of web traffic now secured by HTTPS:

Changes to Firefox security user experience
Up until now, Firefox has used a green lock icon in the address bar to indicate when a website is using HTTPS and a neutral indicator (no lock icon) when a website is not using HTTPS. The green lock icon indicates that the site is using a secure connection.

Address bar showing green lock at

Current secure (HTTPS) connection

Address bar at over HTTP

Current non-secure (HTTP) connection

In order to clearly highlight risk to the user, starting this month in Firefox 51 web pages which collect passwords but don’t use HTTPS will display a grey lock icon with a red strike-through in the address bar.

Control Center message when visiting an HTTP page with a Password field

Clicking on the “i” icon, will show the text, “Connection is Not Secure” and “Logins entered on this page could be compromised”.

This has been the user experience in Firefox Dev Edition since January 2016. Since then, the percentage of login forms detected by Firefox that are fully secured with HTTPS has increased from nearly 40% to nearly 70%, and the number of HTTPS pages overall has also increased by 10%, as you can see in the graph above.

In upcoming releases, Firefox will show an in-context message when a user clicks into a username or password field on a page that doesn’t use HTTPS.  That message will show the same grey lock icon with red strike-through, accompanied by a similar message, “This connection is not secure. Logins entered here could be compromised.”:

Login form with Username and Password field; Password field shows warning

In-context warning for a password field on a page that doesn’t use HTTPS

What to expect in the future
To continue to promote the use of HTTPS and properly convey the risks to users, Firefox will eventually display the struck-through lock icon for all pages that don’t use HTTPS, to make clear that they are not secure. As our plans evolve, we will continue to post updates but our hope is that all developers are encouraged by these changes to take the necessary steps to protect users of the Web through HTTPS.

For more technical details about this feature, please see our blog post from last year. In order to test your website before some of these changes are in the release version of Firefox, please install the latest version of Firefox Nightly.

Thank you to the engineering, user experience, user research, quality assurance, and product teams that helped make this happen – Sean Lee, Tim Guan-tin Chien, Paolo Amadini, Johann Hofmann, Jonathan Kingston, Dale Harvey, Ryan Feeley, Philipp Sackl, Tyler Downer, Adrian Florinescu, and Richard Barnes. And a very special thank you to Matthew Noorenberghe, without whom this would not have been possible.

Air MozillaWebdev Beer and Tell: January 2017

Webdev Beer and Tell: January 2017 Once a month web developers across the Mozilla community get together (in person and virtually) to share what cool stuff we've been working on in...

Open Policy & AdvocacyCalling on the New U.S Presidential Administration to Make the Internet a Priority

A new U.S. Presidential Administration takes office today. While there are many serious issues to tackle and many hard-fought debates to commence, no matter what your political views are, I think one thing we can all agree on is the need for progress on the issues that impact internet users around the world.

So, I’ll make a short and sweet request to all U.S. policymakers, new and returning:


Please make the internet a priority.

What do we mean by that?

Protect and advance cybersecurity.

Many of the most critical issues that affect internet users are related to cybersecurity. It’s about more than just attacks and protecting nation states. Encryption, secure communications, government surveillance, lawful hacking, and even online privacy and data protection, at the end of the day, are fundamentally about securing data and protecting users. It’s about the importance and challenges of the day to day necessities of making systems secure and trustworthy for the internet as a global public resource.

We’ve talked about how protecting cybersecurity is a shared responsibility.  There is a need for governments, tech companies and users to work together on topics like encryption, security vulnerabilities and surveillance.  We want to help make that happen.  But we need this Administration to sign on and sign up to do it.

A bipartisan Congressional working group recently released a report that concluded encryption backdoors aren’t really necessary and can, in fact, be harmful. The report included questions about other important cybersecurity issues as well, including “lawful hacking” by governments and government disclosure of security vulnerabilities. We were encouraged by these recommendations, but we need to see more progress.

Promote innovation and accessibility.

No one owns the internet – it is all of ours to create, shape, and benefit from. And for the future of our society and our economy, we need to keep it that way – open and distributed.

The internet gives everyone a voice and creates a place for self expression and innovation. We need to keep the internet open and accessible to all.

We need to create pathways and partnerships for the public and private sectors to work together to make progress on challenging issues like net neutrality, copyright and patent policy. We can also create a space for innovation by investing more in, promoting and using open source software, which benefits not only technology but also everything it touches.

What Else?

I promised to keep it short and sweet, so these are just a few of the most important internet issues we need to work on, together.

The Obama Administration worked well with Mozilla and other companies, researchers and constituents to make progress in these areas. We were pleased to see the recent appointment of the nation’s first Federal Chief Information Security officer as part of the Cybersecurity National Action Plan. We hope this type of bi-partisan activity continues, to advance cybersecurity and internet health for all of us.

We’re calling on you, new and returning U.S. policymakers, to lead, and we stand ready to work with you. We make this ask of you because we’re not your average technology company. We do this as part of our role as the champions of internet health. Mozilla was founded with a mission to promote openness, innovation and opportunity online. We fight and advocate for that mission everyday to protect and advance the health of the internet, in addition to creating technology products and solutions to support our mission.

We know there are many policy challenges in front of you and many competing priorities to balance, but we can’t sit back and wait for another blow to internet health – we must work together to make the internet as strong as possible.

Air MozillaRust Meetup January 2017

Rust Meetup January 2017 Rust meetup for January 2017

SUMO BlogWhat’s Up with SUMO – 19th January 2017

Hello, SUMO Nation!

Welcome to the third post of the year, friends and revolutionaries :-) Time flies! We have a large set of updates to share with you, so let’s dig in without delay. As always, if you think we’re missing something in this post (or you’d like to see something mentioned in the future) use the comments section!

Welcome, new contributors!

If you just joined us, don’t hesitate – come over and say “hi” in the forums!

SUMO Community meetings

  • LATEST ONE: 18th of January – you can read the notes here (and see the video at AirMozilla).
  • NEXT ONE: happening on the 25th of January!
  • Reminder – if you want to add a discussion topic to the upcoming meeting agenda:
    • Start a thread in the Community Forums, so that everyone in the community can see what will be discussed and voice their opinion here before Wednesday (this will make it easier to have an efficient meeting).
    • Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).
    • If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.




Support Forum

Knowledge Base & L10n

  • Over 400 edits in the KB in all locales since the last blog post – thank you for making the Knowledge Base better, everyone!.
  • Jeff from the l10n team shared our “big cousin’s” plans for 2017 – read all about it here!
  • You can see the L10n migration bugs in progress and fixed here: (the list includes making sure localized content lands in the right language category – yay!)
  • We now have an “Other languages” component linking to existing locales. It can be seen on article pages in the side panel. We’re working to figure out the best way to make it easier for non-existing locales to be translated using the same (or similar) setup. Thanks for all your feedback on that!
  • Michal is taking a well-deserved break from making SUMO awesomer for Czech users. Thank you Mikk & good luck with your final educational stretch! In the meantime, Jiri is taking over the keys to the Czech part of the SUMO kingdom :-) Teamwork!


  • for iOS
    • Version 6.0 was released on January 17th, including:
      • an update for mailto:// links.
      • something for developersSwift 2.3!
    • You can find the contributor forums for iOS here.
    • Firefox Focus / Firefox Klar comes out next week! There will be a “Set your default search engine” article and an update to the existing article in the works.

…and that’s that for this week, dear people of SUMO (and not only). We hope you’ve had a good week so far and that the next seven days bring a lot of interesting, exciting, and inspiring moments. See you next week!

Air MozillaConnected Devices Weekly Program Update, 19 Jan 2017

Connected Devices Weekly Program Update Weekly project updates from the Mozilla Connected Devices team.

Air MozillaRust Paris meetup #35

Rust Paris meetup #35 Mozilla and the Rust community invites everyone in the area of Paris to gather and share knowledge about the Rust programming language. This month we...

Air MozillaReps Weekly Meeting Jan. 19, 2017

Reps Weekly Meeting Jan. 19, 2017 This is a weekly call with some of the Reps to discuss all matters about/affecting Reps and invite Reps to share their work with everyone.

The Mozilla BlogDigital Citizens, Let’s Talk About Internet Health

Today, Mozilla is launching the prototype version of the Internet Health Report. With this open-source research project, we want to start a conversation with you, citizens of the Internet, about what is healthy, unhealthy, and what lies ahead for the Internet.

When I first fell in love with the Internet in the mid-1990s, it was very much a commons that belonged to everyone: a place where anyone online could publish or make anything. They could do so without asking permission from a publisher, a banker or a government. It was a revelation. And it made me — and countless millions of others — very happy.

Since then, the Internet has only grown as a platform for our collective creativity, invention and self expression. There will be five billion of us on the Internet by 2020. And vast swaths of it will remain as open and decentralized as they were in the early days. At least, that’s my hope.

Yet when Facebook’s Mark Zuckerberg shows up on the cover of The Economist depicted as a Roman emperor, I wonder: is the Internet being divided up into a few great empires monopolizing everyday activities like search, talking to friends or shopping? Can it remain truly open and decentralized?


Facebook’s Mark Zuckerberg as a Roman emperor on the cover of The Economist (April 9-15, 2016)

Similarly, when I read about hackers turning millions of home webcams and video recorders into a botnet army, I wonder whether this precious public resource can remain safe, secure and dependable? Can it survive?

These questions are even more critical now that we move into an age where the Internet starts to wrap around us, quite literally.

Think about it: we are increasingly surrounded by connected devices meant to ‘help’ with every aspect of our lives — eating, walking, driving, growing food, finding a parking spot, having sex, building a widget, having a baby (or not), running a city. This so-called Internet of Things will include 20.8 billion devices by 2020, all collecting and collating data constantly.

The Internet of Things, autonomous systems, artificial intelligence: these innovations will no doubt bring good to our lives and society. However, they will also create a world where we no longer simply ‘use a computer,’ we live inside it.

This changes the stakes. The Internet is now our environment. How it works — and whether it’s healthy — has a direct impact on our happiness, our privacy, our pocketbooks, our economies and democracies.

This is why I wake up every day thinking about the health of the Internet. It’s also why I’m so focused on getting more people to think of it as an issue that affects all of us.

Environmentalists in the 1960s faced the same problem. Few people knew that the health of the planet was at risk. They built a global movement that helped the public understand nerdy topics like the ozone layer and renewable energy, eventually changing laws and sparking a swath of industries committed to green business. They made the environment a mainstream issue.

We need a similar movement for the health of the Internet. We need to help people understand what’s at risk and what they can do.

We have started work on the Internet Health Report at Mozilla for exactly this reason. It is an open source project to document and explain what’s happening to this valuable public resource. We put the report together with data from multiple sources and combined it with stories from the ground.

This initial version of the report unpacks the health of the web across five issues that range from familiar Mozilla topics like: decentralization, open innovation, and online privacy and security; to newer areas like digital inclusion and web literacy. We chose to focus on these issues because they all have an influence on the social, technical, political and economic shape of the internet. Deeply intertwined, these issues — and the choices we make around them — have a deep impact on the health of the Internet, for better or for worse.

We’re hoping that you will read what we’ve started, comment in the margins, hack it and share it, to make it better. If you’d like to write, contribute research or otherwise get involved in future versions of the report, reach out to Solana Larsen, our Internet Health Report Editor, with your ideas. Your feedback will help build the next version of this report.

The good news is we can impact the health of the Internet. It’s designed that way. We can build new parts and teach people to get the most out of what’s there. We can point out what’s wrong and make it better. If we do this kind of work together, I believe we can expand and fuel the movement to keep the Internet much healthier for the future.

Open Policy & AdvocacyContinuing Advances in Patent Quality

Patent maths

As we have previously written, long term patent terms impede the short innovation cycle and continuous iteration of software development. Innovation is harmed by overbroad software patents that cover large swaths of general activity and create uncertainty as to litigation. That’s why Mozilla submitted written comments today to the U.S. Patent and Trademark Office explaining our belief that recent U.S. Supreme Court rulings on what is eligible for patent protection have resulted in improvements to patent quality.

Two years ago, the U.S. Supreme Court unanimously ruled in Alice Corp. Pty. Ltd. v. CLS Bank International that patent claims that merely require generic computer implementation of abstract ideas are not patentable inventions. This was an important step towards mitigating the negative effects that overbroad and poorly written software patents have had for software developers, and the Internet as a whole. As a result, other federal courts have invalidated many other broad and abstract software patents, and the USPTO has made efforts to better incorporate subject matter eligibility in their examination procedures. Companies have also improved the quality of their patent applications and are more selective in filing applications. Our USPTO comments reaffirmed our belief that Alice has had a positive effect on the industry and should continue to be integrated into USPTO procedures and case law. We believe this would be disrupted if Congress were to prematurely intervene by altering or rolling back court rulings on patent subject matter eligibility.

Our mission and work let us see first-hand how patents affect software development and innovation on the Open Web — from the software we write and ship, to our participation and collaboration on open standards. What’s more, our non-profit roots put us in a unique position to talk openly and candidly about patents. We are glad for the opportunity to provide this direct feedback to the USPTO on this very important subject for software developers, and open source projects everywhere.

Air MozillaThe Joy of Coding - Episode 87

The Joy of Coding - Episode 87 mconley livehacks on real Firefox bugs while thinking aloud.

Air MozillaData and People: A Discussion with Google's former SVP of People Operations Laszlo Bock

Data and People: A Discussion with Google's former SVP of People Operations Laszlo Bock When Google's head of People came out with the bestselling book Work Rules! last year, he debunked many myths. Adopting an experiments-based approach with their...

Mozilla L10NNew Firefox, continuous l10n, and l10n community workshops in 2017

There’s a certain excitement growing within Mozilla. We’ve spent the last year strengthening our core, making Firefox and other projects competitive, and eliminating pain points in the localization process. We improved our l10n quality control practices by holding l10n events (hackathons) to train localizers, creating language-specific style guides, and expanding our use of translation memory by enabling more projects on Pontoon. We’re now ready to expand on our l10n quality practices, support the release of a new Firefox, and transform localization into a continuous process in an effort to better support our users on localized builds of Firefox.

We’re preparing to contribute to this exciting time in Mozilla’s history by accomplishing the following long-term goals:

  • Implement a continuous localization process across all l10n projects.
  • Prepare Firefox desktop for implementation of l20n after Quantum.
  • Make sure that localization quality is a reason why users stay with Firefox.
  • Be aggressively competitive with existing mobile localizations and new mobile experiments.

Continuous localization

Continuous localization is a localization process whereby strings are quickly delivered to localizers for translation and testing and then quickly delivered to product teams for release, all with minimal manual intervention. With Quantum coming to Firefox, we’re expecting a larger than average volume of strings to translate and deliver to the organization. Optimizing our tooling and processes to more seamlessly interact with version control systems (VCS) and automating relevant QA checks & tasks will expand and focus the l10n community’s impact on the most critical tasks that have brought them to Mozilla to contribute: rapidly making Firefox available to users in any language. We’ll know we’ve accomplished this when we’ve done these things:

  • landed cross-channel localization,
  • improved our VCS interactions with Pootle & Pontoon,
  • incorporated a robust in-app notification system in Pontoon,
  • unified our dashboards,
  • and created the necessary training materials for localizers to know how to make a large impact within a world of continuous localization.

L20n in Firefox desktop

This goal might look familiar to you. We learned late in 2016 that a pure Javascript implementation of l20n introduced a number of performance issues in Firefox. This ultimately kept us from landing l20n in Firefox. With Quantum on the horizon, we’re working with the Firefox product team to define a timeline for accepting l20n into Firefox. This will likely not be until after Quantum has officially shipped later in 2017. In addition to setting this time line and criteria for acceptance into Firefox (and defining the l10n tech plan for Quantum), we’ll know that we’re successful here when we’ve landed l20n in Firefox for Android, added l20n selector support in Pontoon & Pootle, and continued our efforts to standardize l20n.

Measure and improve localization quality

Growth is the key word for 2017. Industry research tells us that users turn away from software that is poorly localized. As we’ve mentioned before, l10n quality is one of our highest priorities, however, we currently have no real way to measure quality. With performance, there are crash rate, startup time, and other metrics that can measure if a piece of software is well-developed. We’ve identified MQM as a similar metric that can help us measure the quality of localizations and inform how we recognize one another for good contributions and improve. We know we’ll be successful measuring and improving localization quality when we have done these things:

  • implemented MQM in Pontoon and Pootle,
  • improved localizer exposure to Bugzilla within tooling,
  • ensured that all l10n communities have and maintain style guides & glossaries for their language,
  • organize l10n workshops for all l10n communities shipping Mozilla localizations,
  • and create marketing materials & plans for us all to better evangelize Firefox in our languages.

Competition in mobile localizations

In 2017 Mozilla will be running multiple experiments in the mobile space. The continuous localization process will allow us the technical flexibility to support localization of these experimental projects. One way we can help make Firefox for Android and iOS a success is by offering users, at minimum, the same level of localization coverage as Chrome, Safari, and other competitors in this space. One advantage Mozilla has against Google, Apple, and others is our status as an open source project. Often we’re able to offer localizations of Firefox to users in more languages than they can thanks to you, the community. To be successful here, we plan to take these steps:

  • ship to users the same level of localization coverage as our competitors on mobile,
  • ship 5 more languages that they do not cover,
  • make it easier to clearly identify the set of strings required to ship a new localization within our l10n tools,
  • and work with the mobile teams to implement right-to-left (RTL) support in our mobile projects.

L10n workshops schedule

This year we’ll be holding six l10n community workshops (formerly called “hackathons”) in various locations around the world. These workshops will be larger than those we’ve held in the past, as they’ll involve inviting 3 localizers from anywhere between 9 – 23 l10n communities per workshop (27-69 localizers per workshop). The core focus areas for these workshops is four-fold:

  • Rebuilding communities
  • Evangelizing localized products
  • Localization quality & testing
  • Training on l10n tool features

Each of these are areas that we’ve identified over the last couple of years of organizing l10n events as areas in which l10n communities worldwide need more help and support from the l10n-drivers. We’ll work with each l10n community to set goals around these four areas for their participation in workshops. We hope that those attending these workshops will return to their communities and share the lessons learned at the workshop they attended.

We plan to follow this schedule for this year’s l10n workshops for the following active l10n communities:

  • 25-26 March | Barcelona
    • an, ast, ca, eu, gl, es-ES, fr, it, lij, pt-PT, rm, bg, bs, el, hr, hu, hy-AM, mk, ro, sl, sr
  • 22-23 April | Taipei
    • ja, ko, zh-CN, zh-TW, id, km, ms, th, tl, vi, my, lo
  • 6-7 May | Paris
    • ach, af, am, ff, son, xh, wo, az, ka, kk, tr, uz, ar, fa, he, ur, kab
  • 12-13 August | Asunción
    • pt-BR, es-CL, es-MX, es-AR, eo, cak, gn, zam, trs
  • 23-24 September | Berlin
    • br, cy, ga-IE, gd, de, en-GB, en-ZA, fy-NL, nl, uk, da, fi, is, nb-NO, nn-NO, sv-SE, dsb, cs, et, hsb, lv, lt, pl, sk, ru
  • 7-8 October | Kolkata
    • bn-BD, bn-IN, gu, hi, kn,  mr, ne, or, pa si, ta, te

The l10n-drivers will organize the workshops, including identifying localizers to invite from each community and seeking feedback and approval from each community’s leader(s). If you’re interested in following or participating in the planning, you can do so by following our projects in GitHub.

This is a big year for Mozilla as we aim to grow our influence. Thank you to all our community for your help. We’re looking forward to seeing what we can accomplish together as passionate, dedicated Mozillians.


Mozilla Add-ons BlogAdd-ons Update – 2017/01

Here’s the state of the add-ons world this month.

If you haven’t read Add-ons in 2017, I suggest that you do. It lays out the high-level plan for add-ons this year.

The Review Queues

In the past month, 1,412 listed add-on submissions were reviewed:

  • 1015 (72%) were reviewed in fewer than 5 days.
  • 63 (4%) were reviewed between 5 and 10 days.
  • 334 (24%) were reviewed after more than 10 days.

There are 415 listed add-ons awaiting review.

If you’re an add-on developer and are looking for contribution opportunities, please consider joining us. Add-on reviewers are critical for our success, and can earn cool gear for their work. Visit our wiki page for more information.


The compatibility blog post for Firefox 51 is up, and the bulk validation was run. The blog post for 52 is also up and the bulk validation is pending.

Multiprocess Firefox is enabled for some users, and will be deployed for all users very soon. Make sure you’ve tested your add-on and either use WebExtensions or set the multiprocess compatible flag in your add-on manifest.

As always, we recommend that you test your add-ons on Beta and Firefox Developer Edition to make sure that they continue to work correctly. End users can install the Add-on Compatibility Reporter to identify and report any add-ons that aren’t working anymore.


We would like to thank the following people for their recent contributions to the add-ons world:

  • saintsebastian
  • Atique Ahmed Ziad
  • Aniket Kudale
  • Sailesh Choyal
  • Laurent
  • Azharul Islam
  • Piyush Rungta
  • Raffaele Spinelli
  • Shubheksha Jalan
  • Rob Wu
  • euleram
  • asamusaK
  • SaminRK

You can read more about their work in our recognition page.

The Mozilla BlogEqual Rating Innovation Challenge: And the Semifinalists are…

Announcing the five innovative concepts that made it to the final round


About three months ago we launched this global Equal Rating Innovation Challenge to help catalyze new thinking and innovation to provide access to the open Internet to those still living without. Clearly the idea resonated. Thanks to the help of numerous digital inclusion initiatives, think tanks, impact hubs and various local communities that supported us, our challenge has spurred global engagement. We received 98 submissions from 27 countries around the world. This demonstrates that there are entrepreneurs, researchers, and innovators in myriad fields poised to tackle this huge challenge with creative products and services.

Semifinalist Infographic

Our judging panel evaluated the submissions against the criteria of compliance with Equal Rating, affordability and accessibility, empathy, technical feasibility, as well as scalability, user experience, differentiation, potential for quick deployment, and team potential.

Here are the five projects which received the highest scores from our judges. Each team will receive 8 weeks of mentorship from experts within our Mozilla community, covering topics such as policy, business, engineering, and design. The mentorship is broad to better assist the teams  in building out their proposed concepts.

Congratulations go to:

Gram Marg Solution for Rural Broadband

  • Team Leader: Prof. Abhay Karandikar
  • Location: Mumbai, India
  • Open source low-cost hardware prototype utilizing Television White Spectrum to provide affordable access to rural communities.

Freemium Mobile Internet (FMI)

  • Team Leader: Steve Song
  • Location: Lunenburg, Nova Scotia, Canada
  • A new business model for telecommunication companies to provide free 2G to enable all the benefits of the open web to all.

Afri-Fi: Free Public WiFi

  • Team Leader: Tim Human
  • Location: Cape Town, South Africa
  • Model to make Project Isizwe financially sustainable by connecting brands to an untapped, national audience, specifically low-income communities who otherwise cannot afford connectivity.

Free Networks P2P Cooperative

  • Team Leader: Bruno Vianna
  • Location: Rio de Janeiro, Brazil
  • Cooperative that enables communities to set-up networks to get access to the Internet and then supports itself through the cooperative fees, and while co-creating the knowledge and respecting the local cultures.

Zenzeleni “Do it for yourselves” Networks (ZN)

  • Team Leader: Dr Carlos Rey-Moreno
  • Location: Cape Town, South Africa
  • Bottom-up telecommunications co-operatives that allows the most disadvantaged rural areas of South Africa to self-provide affordable communications at a fraction of the cost offered by other operators.

While we will disclose further information about all of these teams and their projects in the coming weeks, here are some themes that we’ve seen in the submission process and our observations on these themes:

  • Cooperatives were a popular mechanism to grow buy-in and share responsibility and benefit across communities. This is in contrast to a more typical and transactional producer-consumer relationship.
  • Digital literacy was naturally integrated into solutions, but was rarely the lead idea. Instead it was the de facto addition. This signals that digital literacy in and of itself is not perceived as a full solution or service, but rather an essential part of enabling access to the Internet.
  • Many teams took into account the unbanked and undocumented in their solutions. There seemed to be a feeling that solutions for the people would come from the people, not governments or corporations.
  • There was a strong trend for service solutions to disintermediate traditional commercial relationships and directly connect buyers and sellers.
  • In media-centric solutions, the voice of the people was as important as authoritative sources. User generated content in the areas of local news was popular, as was enabling a distribution of voices to be heard.

What’s Next?

Following the mentorship period, on March 9, we will host a day-long event in New York City on the topic of affordable access and innovation. We will invite speakers and researchers from around the world to provide their valuable insights on the global debate, various initiatives, and the latest approaches to affordable access. The main feature of this event will be presentations by our semifinalists, with a thorough Q&A from our judges. We will then have a week of open public voting on to help determine the winners of the Challenge. The winners will then be announced at RightsCon on March 29 in Brussels.

At this point we want to thank all who have sent us their ideas, organised or hosted an event, or helped to spread the word. We also want to thank our esteemed panel of judges for their time, insight, and mobilizing their communities. While we did have almost a hundred teams submit solutions, we also had thousands of people meeting and engaging in this content through our events, webinars, and website. With this in mind, Mozilla aims to further engage with more teams who sent us their concepts, connect them to our network, and continue to grow the community of people working on this important topic.

Let’s keep this spirit burning – not only through the end of our Challenge, but beyond.

Air MozillaMartes Mozilleros, 17 Jan 2017

Martes Mozilleros Reunión bi-semanal para hablar sobre el estado de Mozilla, la comunidad y sus proyectos. Bi-weekly meeting to talk (in Spanish) about Mozilla status, community and...

The Mozilla BlogFirefox for iOS Users Can Now Choose Their Favorite Email Apps

For most of us email is a big part of our online lives. Today we’re excited to share that we’ve made updates to the email experience in Firefox for iOS, making it possible to choose your favorite email app when sending emails from pages browsed with Firefox.

We identified some of the mail applications preferred by Firefox users around the world and included those email apps in this update. So whether it is Microsoft Outlook, Airmail, Mail.Ru, MyMail, or Spark, you can easily send an email by tapping an email link displayed in the browser. That will open up your selected email app with the desired email address automatically populated in the address field. In a similar fashion, users can also update their settings in these email apps to automatically open any embedded link in Firefox.

You can choose your favorite email program in Firefox by going into settings in the Firefox for iOS app and selecting from the email programs listed.

You can also use Firefox to automatically open links embedded in emails by going into the settings menu of your preferred email app and selecting Firefox.

It’s clever, quick and simple – and more flexible. Because we want you to browse the Internet freely, the way you want, on Firefox.  Get the latest Firefox for iOS here.


List of Mail Partners

To experience the newest feature and use the latest version of Firefox for iOS, download the update and let us know what you think.


We hope you enjoy the latest version.

Mozilla VR BlogA-Blast: Save the World from the Cutest Creatures in the Universe!

A-Blast: Save the World from the Cutest Creatures in the Universe!

Are you prepared? Get your VR controllers and jump! Make sure you have a WebVR-enabled browser. Firefox is ready in Nightly branch. In Chromium, enable the flags for chrome://flags/#enable-webvr and chrome://flags/#enable-gamepad-extensions.

A-Blast: Save the World from the Cutest Creatures in the Universe!

Wave shooters are probably the most popular genre in the first crop of VR games. From the point of view of the implementation, they are also the easiest to make: you don’t have to move the player around (so you don’t need to implement any locomotion feature) and this simplifies the stage since there is only one fixed point of view. Also, the interaction with the enemies is easy too: just shoot and detect bullet collisions. As simple as wave shooters are, they are quite fun to play and some of them really make you feel the anxiety of the player character (eg: Raw Data).

With A-Blast we wanted to create one game focusing on adding smooth playability, quality assets, and a real example of the capabilities of A-Frame and browser performance. We also wanted to dogfood our own tools (A-Frame and Firefox with WebVR).

During testing we found many problems with performance, so we needed to optimize several parts of the initial implementation and some features were added to A-Frame to help with this task (like the pool component ). We’ll share these details in a future post.

The gameplay is straightforward: just grab your weapons, aim to the characters floating around, and pull the trigger. You can also dodge and shoot enemy bullets in order to keep your 5 lives intact. The more characters you blast, the more points you get, and then enter the (local) Hall of Fame.

We wanted to keep the gameplay time under 5 minutes to have a good turnover in demo stations at fairs and conventions. For a full game, we would have designed more elaborate levels. (Yep, we know is too short, but please keep in mind that this is a technical demo, not a whole game with hours of content).

A-Blast: Save the World from the Cutest Creatures in the Universe!

The game is designed for the HTC Vive but it can also be played with mouse and keyboard or in your smartphone by tapping the screen to shoot.

Using our A-Frame JavaScript VR framework, A-Blast was created by two programmers and one artist in two months. A-Blast debuted to dozens of Mozillians in December 2016 at the Mozilla All-Hands event in Hawaii.

A-Blast: Save the World from the Cutest Creatures in the Universe!

A-Blast also served as a tour de force of A-Frame, testing it with a relatively complex application (the source code is slightly bigger than A-Painter's), helping to stress test and then improve A-Frame.

If you have ideas for improvement, like adding a global leaderboard or support for other controllers and devices, head to the A-Blast GitHub repository and send a pull request.

Many thanks to José Manuel Pérez Paredes (JosSs) for providing the soundtrack, which really improves the experience!

Mozilla L10NPontoon Roadmap for 2017q1

At the end of last year we asked Pontoon users to participate in our survey in order to help us make better decisions on their behalf and shape the future of Mozilla’s translation tool.

Turnout exceeded our expectations: in the first 24 hours alone, 120 members of Mozilla localization community casted their votes. That gave us confidence to base Pontoon 2017 Roadmap on results of the survey. Let’s have a look at them!

154 people participated in the survey. They had to vote on each of this features from 1 to 5, so the minimum number of votes per idea was also 154.

Let’s see how survey results turn into Pontoon roadmap for the first quarter of the year:

In-app notifications. We’ll add the ability to send targeted notifications to relevant users on special events. For example, users who submitted translations to Firefox for iOS will receive a notification when new strings arrive. Author will be notified when new suggestion gets submitted for the string she translated. A few days before the deadline, we’ll send a reminder to team managers and translators of incomplete locales.

Priorities and deadlines. This is a requirement for some of the notifications described above, so it’s likely to get released earlier. For each project, we’ll show how important it is and when is the deadline to submit translations (if available). For projects like (and in the future Firefox), we’ll also display priority and deadline information on a file level.

Screenshot-based localization. As goofy commented in the survey, 3 things are high priority: add context, provide context, show context 😉. What in-context localization brings to websites, screenshots could bring to product l10n. We’d like to explore that by designing a user interface for navigating strings by screenshots and displaying screenshot for any string. And we’ll try to do that as part of Google Summer of Code. Stay tuned!

Terminology and Glossary. The one and only Jotes already started integrating Microsoft Terminology into translation interface and we’re planning to ship that by the end of the quarter. As the first step towards creating Mozilla Terminology, we’ll also set up a localization project with terms extracted from various Mozilla projects. After Q1 we’ll focus on building a specialized functionality for creating, maintaining and translating terms.

L20n. While this hasn’t been called out as part of the survey, we have some work left to do regarding the implementation of the UI for advanced L20n features. A solid step forward has been made last year and now we have to land it and finalize the missing pieces.

The rest of the ideas from the survey will either get our attention post Q1 or will only get partially resolved during the first quarter. An example of the latter is merging Pontoon with our standalone dashboards (Elmo and Web Dashboard), which we’ll be effectivelly starting to do by adding support for priorities, deadlines and notifications, and also by outlining a plan to bring together the rest of the functionality.

And remember: even if the survey is now closed, you can always vote or comment on existing ideas or add new ones.

SUMO BlogWhat’s Up with SUMO – 12th January 2017

Hello, SUMO Nation!

Yes, it’s Friday the 13th this week, considered by some cultures to be a day of “bad luck”, so… Read quickly, before the bells chime for midnight! But, before we get there… Happy birthday, Charles Perrault! and a happy National Youth Day to everyone in India!

Welcome, new contributors!

If you just joined us, don’t hesitate – come over and say “hi” in the forums!

Contributors of the week

SUMO Community meetings

  • LATEST ONE: 11th of January – you can read the notes here (and see the video at AirMozilla).
  • NEXT ONE: happening on the 18th of January!
  • Reminder – if you want to add a discussion topic to the upcoming meeting agenda:
    • Start a thread in the Community Forums, so that everyone in the community can see what will be discussed and voice their opinion here before Wednesday (this will make it easier to have an efficient meeting).
    • Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).
    • If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.




  • Your inboxes should soon contain a message with a link to a post-2016 survey about Social, where you will be able to help us shape the near future of Social Support.
  • Reminder: you can contact Sierra (sreed@), Elisabeth (ehull@), or Rachel (guigs@) to get started with Social support. Help us provide friendly help through the likes of @firefox, @firefox_es, @firefox_fr and @firefoxbrasil on Twitter and beyond :-)
  • Reminder: that you can subscribe to the social-support@ mailing list and get updates from Sierra!

Support Forum

  • Thank you to the new contributors this month! and thank you for your help with the training for Lithium!
  • Moderators! Please check your inboxes for an opportunity to collaborate on some features that you would like to learn about in Lithium and some guides we can provide for future Moderators. Your opinion matters in shaping the months ahead!
  • Reminder: Mark your calendars for SUMO day in January – preparations for swag are beginning, spread the word!
    • Jan 24 – Release of Firefox 51 + a secret (?) bonus
    • Jan 25-26 – SUMO Day and Social SUMO Day

Knowledge Base & L10n

  • Over 220 edits in the KB in all locales since the last blog post – thank you so much for your work there, Editors of all locales!
  • We mostly had minor content updates here and there, so keep rocking the helpful knowledge in all languages and don’t forget about our forums in case you run into any issues.


We are at the end for today, whew. Grab a few interesting links for your enjoyment and information:

We shall see you soon, friends of the web :-) Thank you for a great week and we are looking forward to another one. The further we go into 2017, the more new challenges we encounter… and the more greatness we can achieve together!

Air MozillaConnected Devices Weekly Program Update, 12 Jan 2017

Connected Devices Weekly Program Update Weekly project updates from the Mozilla Connected Devices team.

Air MozillaReps Weekly Meeting Jan. 12, 2017

Reps Weekly Meeting Jan. 12, 2017 This is a weekly call with some of the Reps to discuss all matters about/affecting Reps and invite Reps to share their work with everyone.

QMOFirefox 52.0 Aurora Testday, January 20th

Hello Mozillians,

We are happy to let you know that Friday, January 20th, we are organizing Firefox 52.0 Aurora Testday. We’ll be focusing our testing on the following features: Responsive Design Mode and Skia Content for Windows. Check out the detailed instructions via this etherpad .

No previous testing experience is required, so feel free to join us on #qa IRCchannel where our moderators will offer you guidance and answer your questions.

Join us and help us make Firefox better!

See you on Friday!

The Mozilla BlogMissing from the Trump Cabinet Nominee Hearings: Cybersecurity for Everyday Internet Users

This week, the U.S. Senate is assessing a slate of cabinet nominees for the incoming Trump administration. If confirmed, these nominees are some of the people who will shape public policy for the next several years on critical issues — including civil liberties and national security.

Members of the Senate asked a range of essential and direct questions. But cybersecurity questions were not a significant part of the discussion in the hearing for potential Attorney General Jeff Sessions, who will lead the Department of Justice, including law enforcement investigations that involve technology.

At the recent Sessions’ Senate hearings, cybersecurity was discussed chiefly in regard to government-sponsored cyberattacks. Discussion about robust cybersecurity for everyday Internet users — through practices like strong encryption — was largely absent.

Mozilla is disappointed that cybersecurity — and the stances from appointees who will need to work on it regularly — was not a priority at the Senate hearings. It would have been helpful if the Senate asked Sessions to clarify his position, and even better if they asked him to clarify that privacy and security are important for all Americans and a healthy Internet.

We need a government that openly discusses — and values — a more secure Internet for all users.

Protecting users’ privacy and security online is a crucial issue for all of us. Security protects elections, economies and our private online and offline lives. And many recent events (cyber attacks, hacks and threats by foreign governments) show that a secure Internet is currently under threat.

I recently wrote about how cybersecurity is a shared responsibility. Governments, technology companies and users need to work together to strengthen cybersecurity. Mozilla knows that even one weak link — be it technical or legislative — can break the chain of security and put Internet users at risk. The chain only remains strong if technology companies, governments and users work together to keep the Internet as secure as it can be.

You can help Mozilla stand up for a more secure Internet. We’re asking readers to pen a Letter to the Editor to their local newspaper in response to this week’s Senate hearings, and support personal security and privacy online. Get started here.

Air MozillaThe Joy of Coding - Episode 86

The Joy of Coding - Episode 86 mconley livehacks on real Firefox bugs while thinking aloud.

hacks.mozilla.orgPrototyping a subcontinent scale sculpture in A-Frame

Back in 2016, I submitted a concept in response to the British Council call for entries to their UK-India 2017 Digital Open Call. Titled “A piece of Art as big as India”, the idea was to create an augmented reality sculpture that the people of India could not only view via mobile devices but sculpt themselves. As I said in the original proposal:

Imagine a virtual layer of silk as big as the subcontinent, seeming to float in the sky above…


I was keen to make the installation viewable on as many devices as possible and after receiving seed funding from the British Council to develop the idea, I researched several platforms that would allow that to happen. It quickly became clear that the most popular mobile phone OS in India was Android, so I started looking for libraries that would allow me to create augmented 3D content in real time. A-Frame came to my attention via the three.js community and after discovering a fantastic AR prototype by Mozilla employee Dietrich Ayala, I knew that it was the perfect front-end library for this project:

I started blogging about every step of the project, as well as sharing all my experiments on GitHub and GitHub pages. My friend Ross Cairns helped me get my development environment set up, utilising A-Frame as well as the following technologies:

Via the Awesome A-Frame collection on GitHub, I discovered several different 3D landscape components. Kevin Ngo, one of the maintainers for A-Frame, had created a Mountain component fitted my requirements, and after chatting with him on the A-Frame Slack, he even led me through submitting my first-ever pull request on GitHub, to allow the component to be viewed from below as well as above.

Dietrich and I collaborated remotely to integrate his AR demo code with Kevin’s updated mountain component, eventually making a version for both Android and iOS. (Apple hasn’t implemented the getUserMedia() in mobile Safari, so we had to use a static panorama instead.)


The British Council conducted audience testing in India during the last weeks of November 2016 – unfortunately, I didn’t get through to the next stage of the project but I’ll be using A-Frame for all of my future online VR/AR projects and am very grateful to the entire A-Frame community for all their help and support.

Open Policy & AdvocacyMozilla Comments on TRAI Free Data Recommendations

On December 19th, the Telecom Regulatory Authority of India (TRAI) released new recommendations on “Encouraging Data Usage in Rural Areas Through Provisioning of Free Data.” This is the latest salvo from the Indian regulator on what types of models for providing subsidized access to the internet should be permitted. While we have questions about how some of these recommendations will be implemented, we’re glad to see TRAI continuing to uphold the Data Services Regulation and interested to see how two new innovations in providing access envisioned in these recommendations will be developed.

In February 2016, in its landmark Data Services Regulation, TRAI ruled that differential pricing practices (including many zero rating models) were too harmful to consumers and competition to be allowed in the market. Yet, according to the latest figures from TRAI, only 376 million of India’s 1.25 billion strong population are connected to the internet, clearly much work remains in the shared challenge to bring everyone online. To that end, TRAI’s Free Data consultation this summer contemplated additional, alternative models that might help bring all of the internet to all Indians. These latest recommendations are based on the feedback from that consultation.

In many respects, TRAI’s guidance follows the recommendations that Mozilla and other partners made in our submissions. TRAI rightfully notes that: “Systems that make free data a feasible model for all content and ISPs, and available to the maximum addressable consumer market, are clearly the more desirable,” and adds: “any scheme for the provision of free data should meet certain basic criteria… that it should not be possible for a TSP/ISP to use discriminatory pricing of certain data content as a service differentiator.”

TRAI also struck down “toll free models” which would allow a content/edge provider to subsidize the cost of accessing their website/service, and which was on of the models considered in the Free Data consultation. TRAI argued, as Mozilla and others did in our submissions, that this model would entail the same discriminatory effects as zero rating/differential pricing.

TRAI’s recommendations also include discussion of two models for providing free data. In the first, free data will be provided by third party aggregators which are “TSP agnostic,” (i.e., the aggregator does not have a relationship with any individual telecommunications company). Notably, TRAI requires that the activities of the aggregators “should not be designed to circumvent the Prohibition of Discriminatory Tariffs for Data Services Regulations.” While it’s unclear how the aggregator model will work in practice, and what companies would have an incentive to offer such a service, this explicit prohibition on circumventing the ban on differential pricing should be a strong bulwark against harms to users and competition. Moreover, we’re generally supportive of additional competition in the market for internet access, which often helps to drive down prices and provide additional benefits for users.

In the second model, TRAI recommends the creation of a scheme to provide 100 MB a month to rural users for up to six months to be paid for by India’s Universal Service Obligation Fund. This is very similar to the Klif phone model Mozilla pioneered with Orange in several sub-Saharan Africa and Middle Eastern markets whereby the user gets unlimited voice, SMS, and 500 MB of data per month (for 3-6 months depending on the market). As we have long said, if the argument is that “if one gives users a taste of the internet then they will demand the full internet,” that taste should be of the full, open internet, not just some parts of it. Moreover, while 100MB may seem paltry, both generally and in comparison to our Klif offering, TRAI cites a Cisco study stating that the average Indian typically uses 150MB per month.

This scheme does, however, raise certain privacy and data protection concerns, especially as this benefit will likely be tied to Aadhaar, the Government of India’s national biometric identity database. We’re sympathetic to the need to prevent double dipping, but users should never have to choose between their privacy and access to the internet. These concerns point to the need for comprehensive privacy legislation in India, which, as we’ve argued before, we believe should be a national policy priority.

While questions remain about how both of these schemes will be implemented, if everyone in India and beyond is going to come online, then further innovations and new thinking will certainly be needed. To this end, Mozilla has been working through our Equal Rating Innovation Challenge to spur new innovation to provide affordable access and cultivate digital literacy. More information about the Challenge is available at:

Air MozillaRéforme du droit d'auteur pour le 21e siècle / Copyright Reform for the 21st Century: Paris, France

Réforme du droit d'auteur pour le 21e siècle / Copyright Reform for the 21st Century: Paris, France Réforme du droit d'auteur pour le 21e siècle Après quasiment une décennie, la Commission européenne a présenté son projet de loi sur la réforme du...

QMOFirefox 51 Beta 12 Testday Results

Hi everyone!

Last Friday, January 6th, we held the first testday of this year Firefox 51 Beta 12 Testday.  It was yet another successful event (please see the results section below) so a big Thank You goes to everyone involved.

First of all, many thanks to our active contributors: Vuyisile Ndlovu, Moin Shaikh, P Avinash Sharma, Ilse Macías.

Bangladesh team: Maruf Rahman, Humayra Khanum, Jobayer Ahmed Mickey, Md. Almas Hossain, Raihan Ali, Iftekher Alam, Tariqul Islam Chowdhury, Saima Sharleen, Md.Tarikul Islam Oashi, Toki Yasir, Majedul islam Rifat, Kazi Nuzhat Tasnem, Rezwana Islam Ria, Aminul Islam Alvi and Tanvir Rahman.

India team: Subhrajyoti Sen, Baranitharan, Aishwarya.B, Deepak Chandh, Roshan Dawande, Vishnupriya .V, Selva Makilan, Rajesh D, SriSailesh, R.Krithika Sowbarnika, P Avinash Sharma, Sakshi Prajapati, Sankaraman, Sriram, Surentharan .R.A, Nagaraj.V, Pavithra.R, Paarttipaabhalaji, Kavya Kumaravel, Vinothini, Satchidanandam.M, Karthikeyan S, Dhevendhiran, Kavipriya and Dinesh Kumar.

Secondly, a big thank you to all our active moderators.


Third, some tests that were failed need more information from you guys. I left a few comments in the etherpads so please provide me with that information so we can see if we should log bugs on those or not.

Again thanks for another hugely successful testday 🙂

We hope to see you all in our next events, all the details will be posted on QMO! Happy new year!

SUMO BlogThe Big SUMO Report: 2016

Hey there, SUMO Nation!

Since 2017 has finally arrived (a while ago), our team wanted to share a few numbers and remarks with you. This report is a bit delayed, but we hope it will prove to be worth the extra few days’ wait.

We are on the brink of probably the biggest change to the “way things are” around SUMO in the recent years, so taking a good look back is a great way to make sure we stay focused on the road ahead.

2016 has not been an easy year for many members of our community, for many of reasons. Fortunately, we all persevered and managed to come out stronger / wiser / more prepared on this side of the calendar. We will definitely keep working together on many aspects of our site, our community, and our presence in Mozilla’s mission. Our small core team counts on your presence and strength and you can count on our support. You rock the helpful web.

As for all the data you will see on this page and the ones it links to: remember that while we use some of these numbers to prepare plans for the future and put them into reality, they are just numbers – and as such cannot and will not fully represent the passion, the values, the talent and effort behind every single angry user turned into a happy one thanks to your dedication to making the open web better and more helpful.

For all that we thank you from the bottom of our hearts.

Now, let’s get on with the show!

SUMO 2016 – the major facts

  • We joined forces with the Marketing Team, becoming a part of MarComms, and working more closely with the Mozillians at the heart of Social and PR projects.
  • With Firefox 46, we started publishing SUMO Release Reports, which met with a very positive response from all sides of Mozilla:
  • Kitsune, our home-made support platform went through a LOT of changes, the final of which was the decision to replace it with an external solution, due to our lovely developer team being reassigned to other parts of the Mozilla project. We spent the better part of the second half of the year investigating the next generation of SUMO tech. We should be using the new platform any day now…
  • Social Support and Army of Awesome morphed into two different beasts this year. While trying out a new tool (Sprinklr), a robust social engagement tool used for brand marketing, we engaged many new people, but it took us some time to refine our goals.
    • We started to onboard with a goal of 25 active volunteers and soon found the tool overwhelming for just a few volunteers. Once we moved to another tool (Respond), a new community was created from the retiring Army of Awesome and the 4 main Mozilla Brand Social accounts for English, Spanish, Portuguese, and French languages. After transitioning to the new support tool, 33 people received training and the response rate went up from 10% to 33%.
  • The Knowledge Base articles explaining how to contribute were revised, rewritten and re-read aplenty :-)
  • We kicked off the “Internet Awareness” project – an exploration of a new way of educating users about the web.
  • Safwan saved many a gray hair from appearing for numerous localizers through his Save as Draft feature.
  • We changed a bit the way our Community Meetings worked, and we went full HD, 3D, hypersurround sound with AirMozilla (thanks, Costenslayer!)
  • SUMO went places! #sumotourctg, SUMO@FOSDEM, SUMO Contributor Mentoring Day, SUMO l10n Sprint in Tunisia, Kazakhstan, Ivory Coast, Jakarta,
  • We improved the SUMO Event Kit based on your feedback.
  • This blog had 68 new posts and over 9,200 page views. Some of the best posts this year were written by you! Still, seems a bit more popular (see more details on that below) – but we are slowly catching up! ;-)

SUMO 2016 in numbers – the highlights

As you can imagine, our activity and its results can be described in many ways – and by many numbers. It would be a daunting task to put all of them here in a coherent way, so we decided to summarize data showing the potential, reach, and power of SUMO – both as a source of knowledge and help, and as an example of community collaboration.

General site stats
  • Number of total page views: 806,225,837
  • Number of users with at least one recorded session (= visit to the site): 259,584,893
  • Number of sessions (= periods of active user engagement on the site): 446,537,566
  • Percentage of people returning to the site: 45%
  • Average time spent on site per session: 01:39
  • Average number of pages visited per session: 1.81
  • Percentage of single page visits: 25%
Community stats
    • Number of people who created a SUMO account: 57,656
    • Number of people who contributed for the first time: 1,153
    • Percentage of people who visited SUMO using Firefox: 84%
    • Percentage of people who visited SUMO using Chrome: 7% / Safari: 4% / Internet Explorer: 3%
Language & Knowledge Base stats
  • Top visitor 10 languages (by percentage of sessions):
    1. English
    2. German
    3. French
    4. Spanish
    5. Japanese
    6. Russian
    7. Portuguese (Brazil)
    8. Polish
    9. Italian
    10. Chinese (simplified)
  • Top 10 visitor countries (by percentage of sessions):
    1. United States
    2. Germany
    3. Japan
    4. France
    5. Brazil
    6. Russia
    7. India
    8. United Kingdom
    9. Poland
    10. Indonesia
  • An interesting euro-fact: the top 5 countries by percentage of sessions from the European Union region were over 24% of all sessions in 2016.
  • Number of all submitted revisions:
    • for English only: 2,068
    • for the top 20 locales: 14,177
    • in all locales: 21,741 (almost 60 a day on average!)
  • The most active Knowledge Base contributors in 2016 – each and every one of you is an e-linguistic superstar! Major shout-outs go to:
Alberto Castro
Angela Velo
Michele Rodaro
Anticisco Freeman
Jim Spentzos
Kim Ludvigsen
Богданцев Сергій
Marco Aurélio
Michal Stanke
Kéménczy Kálmán
Andreas Pettersson
Pedro Sousa
Cláudio Esperança
Victor Bychek
NIKHIL KURMI ( নিখিল কুর্মী )
Vanja Tumbas
Chris Ilias
André Marinho
Marko Andrejić
Carlo Ranieri
Cynthia Pereira
Thiago Policena
Selim Şumlu
Airton Zanon
Azharul Islam
Manuela Silva
Michael Buluma
Peter Chen
َMohamed Adib Boukthir
Modhurima Chowdhury Proma
Artem Polivanchuk
David Kuo
Jayesh KR
Mijanur Rahman Rayhan
Marcelo Ghelman
Tymur Faradzhev
Narae Kim
Kazem Ebrahimi
André Marcelo Alvarenga
Fabio Beneditto
Karimun Nahar Nourin

(For more general data please check this document)

Support Forum

Here are the top viewed items for 2016, also considered to be the most “popular” in terms of issues raised by users across the board, in no particular order:

The top searched items that are “the usual suspects” are from:
  • users looking for the offline installers for Firefox
  • people who want to how to cast a mobile device to a monitor
  • users wondering how to change the interface language
  • people who have problems using the full screen mode

All in all, it’s been quite a busy year, and there was so much great support from your side that it would not all fit into this blog post (we tried, the blog almost exploded), so do browse the highlight below and make sure you check the document linked at the end of this section. All your dedication and hard work throughout last year paid off and we are all grateful to each and every one of you for making SUMO’s support forums the best official support site for Mozilla’s software! As a bonus, there’s about two million smiles from Rachel for everyone who replied to a question, I hear ;-) Roll on with the numbers!

  • Percentage of users (from 11,604 responses recorded through the Exit Survey):
    • very satisfied with Firefox: 31.6%
    • satisfied with Firefox: 27.3%
    • neutral towards Firefox: 13.0%
    • dissatisfied with Firefox: 11.3%
    • very dissatisfied with Firefox: 11.1%
  • Percentage of users who visited SUMO to:
    • find a solution to a problem: 74,7%
    • learn more about Firefox: 13.2%
    • do something else: 12.1%
  • Percentage of users who:
    • found what they were looking for on SUMO: 40.2%
    • did not find what they were looking for on SUMO: 47.6%
    • don’t know what to say about the result of their visit: 12.2%
  • The most active Support Forum contributors in 2016 – each and every one of you is a guardian angel of cyberspace! Major shout-outs go to:
Wayne Mery
Wesley Branton
Michal Stanke
Samuel Santos
Bruce A. Johnson
Marco Aurélio
Chris Ilias
Tyler Downer
Fabio Beneditto
Diego Victor
Jhonatas Rodrigues
Gert Van Waelvelde
Corey ‘linuxmodder’ Sheldon
Magno Reis
Mauricio Navarro Miranda
Selim Şumlu
Pranav Karakavalasa
David Walczysko
Anticisco Freeman
Supreme Eagle
Sashoto Seeam
Samrat Bhattacharjee
Swarnava Sengupta
Amit Kumar Jaiswal
Machine Master
Stephen Fox
Rainer Vitor
Thiago Casagrande
Danilo Costa
Onno Ekker
Kyle K.
Emin Mastizada
Estevão Santos
Mijanur Rahman Rayhan
NIKHIL KURMI ( নিখিল কুর্মী )
Azharul Islam
Marcelo Noguera

You can find a more in-depth analysis of the year’s most popular and memorable forum content here (thank you, Rachel!).

Social Support

Remembering the Awesome… Army of Awesome!

  • We had 390 members of the Army of Awesome contributing until its very last day in 2016
  • They contributed in German, English, French, Galego (!), Hungarian, Italian, Japanese, Norwegian, Dutch, Polish, Portuguese, Romanian, Russian, Tamil, Turkish, Ukrainian, and Chinese… You can see more data about their contributions here.

As a reminder: The Army of Awesome was a self service support program of one to one user support, with a glorious legion of amazing people around the world responding to Firefox (and not only) users in trouble through Twitter. It was morphed into a Social Support program that you can sign up for through form and learn more about from this wiki.

For January to March, please take a look at the project start document here.

Most active contributors on Social: March to September

Contributor Messages
Kristina Gorr 756
Andrew Truong 449
Noah Y 385
Magno Reis 298
Jhonatas Rodrigues Machado 179
Daniela Albarrán 105
Swarnava Sengupta 68
42265 62
Geraldo Barros 25
Cynthia Pereira 23
Rachel McGuigan 23
Marcelo Lauxen 16
Stefan Costen 15
Ghaith Limam 12
Alex Mayorga 8
Rachael Morrill 7
Luis Sanchez 4
Jaime Maretoli 2
Benny Chandra 2

October to December (welcome, Sierra!)

Contributor Messages
Magno Reis 568
Andrew Truong 305
Geraldo Barros 146
Wim Benes 125
Sierra Reed 122
Barend van Rijn 95
Daniela Albarrán 92
syam kumar 66
Alex Mayorga 62
Josh Riley 57
Philipp M 36
Zilmar de Souza Junior 35
Dynisha Faust 33
Noah Y 27
Cynthia Pereira 24
Robert Sayles 24
Nildëala Dorffer 21
Swarnava Sengupta 19
Anubha Maneshwar 15
Emmanuel Sánchez 11
  • Average time to a first reply on Social:
    • 1d 21h (for the period from October to December)
  • The lowest average time to a first reply on Social: 8 hours during one of the weeks in December!

SUMO 2016 in your words

Nope, it’s not enough that this is “probably the longest post on this blog, ever!” This is where we would love to see you step in :-) Please use the comment section to share your best and not so good SUMO (or Mozilla) moments from the last calendar year. If you think we should anything else to the report, please use the comments section as well.

We look forward to hearing from you!


The Mozilla BlogFighting Back Against Unlawful Warrants and Indefinite Gag Orders to Protect Internet Privacy and Security

Mozilla and other major technology companies, including Amazon, Apple, Google and Twitter, are joining together in an amicus brief filing that supports Facebook’s ability to challenge both a search warrant for nearly 400 Facebook users’ data, and an indefinite gag order which forbids Facebook from notifying users about government requests for their data.

Mozilla is joining this brief because we believe this type of lengthy, never-ending gag order ultimately infringes on the ability to control one’s online experience.  This is part of our fight to protect individual privacy and security online, and to improve internet health by promoting cybersecurity and increasing transparency.

In this case, the government argued that Facebook has no legal right to even challenge the warrant’s scope or validity, and a lower court agreed. This would mean companies like Mozilla couldn’t challenge unlawful orders we receive. And, because gag orders would prevent us from notifying users, those users wouldn’t know to challenge them either. Unlawful warrants would never see the light of day or be apparent to users. This is staggering and unacceptable.

While we have yet to receive a gag order that would prevent us from notifying a user about a request for data, we said in our transparency report earlier this year that we are committed to opposing any unlawful or overbroad requests for our users’ data and that’s exactly what we’re doing today. Mozilla also joined an amicus brief in September to fight back against indiscriminate use of permanent gag orders that prevent companies from ever notifying users about requests for their data.

We will continue to look for opportunities like these to protect privacy and security online for all users and to improve the overall health of the internet.

SUMO BlogWhat’s Up with SUMO – 5th January (2017!)

Hello, SUMO Nation!

Welcome to the new year, which is going to be full of novelty, challenges, greatness, problems to solve, ideas to share, and many other things – courtesy of all of you reading these words, we hope :-). Let’s roll into the new days with the new from the most recent past ones!

Welcome, new contributors!

If you just joined us, don’t hesitate – come over and say “hi” in the forums!

Contributors of the week

SUMO Community meetings

  • LATEST ONE: 4th of January – you can read the notes here (and see the video at AirMozilla).
  • NEXT ONE: happening on the 11th of January!
  • Reminder – if you want to add a discussion topic to the upcoming meeting agenda:
    • Start a thread in the Community Forums, so that everyone in the community can see what will be discussed and voice their opinion here before Wednesday (this will make it easier to have an efficient meeting).
    • Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).
    • If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.


  • Congrats to Joni and Roland for their mention in the 2017 recap video (for Focus)!
  • If you are struggling with using Vidyo on Ubuntu, please contact Seburo – he may have found a solution for your pains.
  • Help us help others with using the Web in a smart, easy, and safe way.
  • Calendar time! January dates that you should remember:
    • 10th – Firefox for iOS 6.0 released (to be confirmed).
    • 11th – SUMO Community Meeting
    • 12th – SUMO Platform Meeting
    • 16th – 22nd – tentative final migration period to Lithium
    • 18th – SUMO Community Meeting
    • 19th – SUMO Platform Meeting
    • 24th – Firefox 51 release
    • 25th-26th – SUMO Day & SUMO Social Day
    • …any other dates you want us to keep in mind? Use the comments below!
  • Are you interested in working together on training for new contributors? Talk to Rachel!



  • No major updates just yet, but do remember that the SUMO Social Day will be happening end of this month :-)
  • Reminder: you can contact Sierra (sreed@), Elisabeth (ehull@), or Rachel (guigs@) to get started with Social support. Help us provide friendly help through the likes of @firefox, @firefox_es, @firefox_fr and @firefoxbrasil on Twitter and beyond :-)
  • Reminder: that you can subscribe to the social-support@ mailing list and get updates from Sierra!

Support Forum

  • Are you listening to music while responding to posts in the forums? What’s your favourite (or not so) holiday song?
  • A polite reminder: please do not delete posts without an explanation to the poster in the forums, it can be frustrating to both the author and the user in the thread – thank you!

Knowledge Base & L10n


  • for iOS
    • 6.0 happening soon! Most likely around January 10th (?).

If you have them, share you new year impressions with us in the comments, please :-) I, for one, was quite OK eating the 12 traditional grapes (one for each of the tolls of the midnight bells). And as for 2016… Yes, the promised annual summary report is coming, thanks for your patience and understanding – we want it to be both informative and fun. Stay tuned & keep rocking the helpful web, friends!

Firefox UXProject Prox?

At our recent Mozilla All Hands in Kona, HI, we announced the first project by the New Mobile Experience Team— Project Prox.

Air MozillaConnected Devices Weekly Program Update, 05 Jan 2017

Connected Devices Weekly Program Update Weekly project updates from the Mozilla Connected Devices team.

Mozilla Add-ons BlogFriend of Add-ons: Shubheksha Jalan

Our newest Friend of Add-ons is Shubheksha Jalan! Shubheksha has been involved with the add-on community since last year. In December, she was accepted to Mozilla’s Outreachy cohort to work on web-ext, a command line utility to help make WebExtensions development more awesome.

At first, getting involved in the open source community proved challenging for Shubheksha. After spending two years trying to break into various open source projects, she began searching issue labels on Github for good first bugs and beginner issues. One bug in particular stood out because of a comment from Kumar McMillan that read, “I can mentor this.”

Shubheksha says,

“Now that I look back at it, that one single comment played a huge role in helping me muster enough courage to take it up. From then on, it sort of became a routine and I found myself very eager to work on web-ext everyday after my classes in college were over. “

Fixing that first bug was only the beginning. Since then, Shubheksha has closed 22 add-on bugs and is authoring an article on web-ext for Mozilla Hacks.

Contributing code to Mozilla projects has given Shubheksha a taste of real-world software development and has helped develop and refine her skill set. She says,

“I learnt to navigate and read through a decently sized codebase. I learnt how to write code that makes it testable, how to write unit tests using stubs, spies, etc,. I also learnt a variety of debugging techniques for a node JS. I learnt a ton about writing ES6 Javascript and surrounding tooling, especially Flowtype, a static type checker for Javascript. It has been an incredibly rewarding experience. My mentors, Kumar and Luca, have been incredibly helpful and supportive throughout the way and I can’t thank them enough for investing all their time and patience.”

You can read Shubheksha’s blog post about getting involved in the open source community here.

If you’re interested in contributing code to add-on projects, please take a look at our onboarding wiki.

Thanks to all the code contributors, developers, reviewers, and users who pitch in to make add-ons awesome. We encourage you to document your contributions on the Recognition wiki.

We are looking forward to collaborating with you in 2017!

Air MozillaReps Weekly Meeting Jan. 05, 2017

Reps Weekly Meeting Jan. 05, 2017 This is a weekly call with some of the Reps to discuss all matters about/affecting Reps and invite Reps to share their work with everyone.

The Mozilla BlogLiving Inside the Computer: Building Responsible IoT

A new paper by the NetGain Partnership examines the opportunities and dangers of a pervasive web

Today, we live online. The Internet intersects with everything from commerce and journalism to art and civic participation.

But more and more, living online doesn’t mean sitting in front of a screen, mouse in hand. The Internet of Things — the networked computing environment that spans the globe — allows the web to permeate our clothes, our homes, our healthcare. The web is now made up of billions of connected devices and zettabytes of data. It’s pervasive.

A pervasive Internet isn’t a novelty or a linear step forward. It’s an extraordinary leap that brings online power grids, emergency alert systems, pacemakers and appliances. It requires our deep thought and attention. And it needs a guiding set of principles.

Over the past few decades, we’ve seen the power the Internet wields. It’s a force that can unseat dictators, revolutionize education, reshape economies and connect billions. But it’s also a force that can surveil, repress, harass and exclude. It can undermine our most important values.

Now, we’re at an inflection point. As IoT evolves and permeates even more personal corners of our lives, we must balance progress with principles. We can’t only ask, “What’s possible?” We must also ask, “What’s responsible?”

The NetGain Partnership — a broad coalition of nonprofits committed to an Internet in the public interest — has published a paper on the road ahead. “We All Live in the Computer Now” explores the opportunities of a pervasive Internet, the challenges and where we go next.

IoT can work for the public good. It can fuel the movement for open knowledge and technology. IoT can contribute to a better planet: Cities like San Antonio, Barcelona and Hubli have used IoT to conserve water and energy. IoT can empower citizens: From Hong Kong to Dublin, people are using the web to participate in government. And IoT can fuel do-good organizations and movements, from Arduino to makerspaces.

On the flip side, there are existential dangers. IoT can erode privacy: Legions of connected microphones and cameras unknowingly track our movements and conversations. Governments surveil citizens en masse, and profit-minded businesses horde personal data. IoT also means more vulnerabilities, from the recent Dyn attack to the hacking of elections.

Examining past Internet inflection points is helpful. There were times that — in hindsight — would have benefited from a better balance of progress and principle. As the web exploded in the 90s, power was quickly consolidated in the hands of a browser monopoly. More recently, we’ve learned that much of the web’s evolution has favored the privileged, and left others — like non-English speakers, and the poorest among us — behind.

Yes, we’ve made positive progress on these fronts. Internet users now have more browser choice and control. And NGOs, businesses and governments are investing in digital inclusion. But right now, we have an opportunity to head off future dangers proactively. In the early era of IoT, we can shape a positive future.

What do we do? Philanthropies like Mozilla, Ford, Knight, MacArthur and Open Society are on the front lines of building a better Internet. And IoT will be the first big battle of 2017. In our paper, we share six guiding principles for better IoT. We’re also planning research, grantmaking and salons to further chart the future. And NetGain is seeking more technologists, activists and entrepreneurs for the movement.

Mozilla Add-ons BlogJanuary’s Featured Add-ons

Firefox Logo on blue background

Pick of the Month: Tile Tabs

by DW-dev
Display open tabs in a tile layout—arrange them however you like.

“Possibly the most amazing plugin ever. For a portrait monitor this is a must have. I split my social media pages so I can see them all at once, and split my two email accounts so I can see them at once.”

Featured: Emoji Cheatsheet

by Johann Hoffman
A simple search function helps you find the perfect emoji for any occasion.

“Works exactly as it says. Very simple interface and easy to use.”

Nominate your favorite add-ons

Featured add-ons are selected by a community board made up of add-on developers, users, and fans. Board members change every six months. Here’s further information on AMO’s featured content policies.

If you’d like to nominate an add-on for featuring, please send it to for the board’s consideration. We welcome you to submit your own add-on!

hacks.mozilla.orgTypedArray or DataView: Understanding byte order


Depending on how you access an ArrayBuffer you get different byte order on the same machine. So long story short: it makes a difference if you use a TypedArray or the setters from a DataView.

ArrayBuffer is there to give efficient and fast access to binary data, such as data that is needed by WebGL, Canvas 2D or Web Audio. In these instances, you generally want to store data in a way that is most efficiently consumed by your hardware or most easily streamed over the network.

Read on to find out how that works in detail.

A primer on TypedArrays and the ArrayBuffer

With ES6 we got three nice new things:

  1. The ArrayBuffer, a data structure designed to hold a given amount of binary data.
  2. TypedArray, a view into an ArrayBuffer where every item has the same size and type.
  3. The DataView, another view into an ArrayBuffer, but one which allows items of different size and type in the ArrayBuffer.

Having a data structure that can take a bunch of bytes to work with binary data makes sense, if we want to work with things such as images or all sorts of files.

Without going into much more detail on how binary data works, let’s have a look at a small example:

var buffer = new ArrayBuffer(2) // array buffer for two bytes
var bytes = new Uint8Array(buffer) // views the buffer as an array of 8 bit integers

bytes[0] = 65 // ASCII for 'A'
bytes[1] = 66 // ASCII for 'B'

Now we can turn that into a Blob,
make a Data URI from it and open it as a new text file:

var blob = new Blob([buffer], {type: 'text/plain'})
var dataUri = window.URL.createObjectURL(blob)

This will display the text ‘AB’ in a new browser window.

Which way is up? Byte order, part one:

So we wrote two bytes (or 16 bit) one after the other, but as there are TypedArray constructors for larger numbers, we could also write the two characters using a single 16-bit number – writing two bytes with a single instruction.

This helpful table from the typed arrays article on the Mozilla Developer Network should illustrate the idea:

TypedArrays group one or multiple bytes in an ArrayBuffer

You can see that in the previous example we wrote the byte for ‘A’ and then the byte for ‘B’, but we could also write two bytes at once using a Uint16Array instead, and putting both bytes into a single 16-bit number:

var buffer = new ArrayBuffer(2) // array buffer for two bytes
var word = new Uint16Array(buffer) // views the buffer as an array with a single 16 bit integer

var value = (65 << 8) + 66 // we shift the 'A' into the upper 8 bit and add the 'B' as the lower 8 bit.
word[0] = value // write the 16 bit (2 bytes) into the typed array

// Let's create a text file from them:
var blob = new Blob([buffer], {type: 'text/plain'})
var dataUri = window.URL.createObjectURL(blob)

But wait? We see “BA” instead of “AB” as we did before! What’s happened?

Let’s have a closer look at the value we wrote into the array:

65 decimal = 01 00 00 01 binary
66 decimal = 01 00 00 10 binary

// what we did when we wrote into the Uint8Array:
01 00 00 01 01 00 00 10
<bytes[0]-> <bytes[1]->

// what we did when we created the 16-bit number:
var value = (01 00 00 01 00 00 00 00) + 01 00 00 10
= 01 00 00 01 01 00 00 10

You can see that the 16 bit we wrote to the Uint8Array and the 16 bit we wrote to the Uint16Array are the same, so why does the result differ?

The answer is that the order of bytes in a value that is longer than one byte differs depending on the endianness of the system. Let’s check that:

var buffer = new ArrayBuffer(2)
// create two typed arrays that provide a view on the same ArrayBuffer
var word = new Uint16Array(buffer) // this one uses 16 bit numbers
var bytes = new Uint8Array(buffer) // this one uses 8 bit numbers

var value = (65 << 8) + 66
word[0] = (65 << 8) + 66
console.log(bytes) // will output [66, 65]
console.log(word[0] === value) // will output true

When looking at the individual bytes, we see that the value of B has indeed been written into the first byte of the buffer, instead of the value for A, but when we read back the 16-bit number, it is correct!

This is due to the fact that the browser has defaulted to using little endian numbers.

What does this mean?

Let’s imagine that a byte could hold a single digit, so the number 123 would take three bytes: 1, 2 and 3. Little endian means, that the lower digits of the multi-byte number are stored first so in memory it would be stored as 3, 2, 1.

There is also the big endian format where the bytes are stored in the order we would have expected, starting with the highest digits first, so in memory it would be stored as 1, 2, 3.
As long as the computer knows which way around the data is stored, it can do the conversion for us and get the right number back from memory.

That isn’t really a problem. When we do the following:

var word = new Uint16Array(buffer)
word[0] = value // If isLittleEndian is not present, set isLittleEndian to either true or false.

The choice is implementation dependent. Choose the alternative that is most efficient for the implementation.
An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation.

Okay, that’s alright then: We leave isLittleEndian out, the browser decides on a value (in most cases true, because most of the systems are little endian), and sticks to it.

This is a pretty reasonable behaviour. As Dave Herman points out in his blog post from 2012, it’s either “fast-mode or correct-mode” when picking one choice of endianness in the spec.

Most of the systems these days are little endian, so it is a reasonable assumption to pick little endian. When the data is in the format that the system consumes, we get the best performance because our data does not need to be converted before it can be processed (for instance by the GPU via WebGL). Unless you explicitly need to support some rare hardware, you are safe to assume little endian and reap the speed benefits.

However, what if we want to transfer this data over the network in chunks or write to a structured binary file?

It would be nice to have the data so that we can just write byte by byte as the data come in from the network. For this, we would prefer big endian, because the bytes can then be written sequentially.

Luckily, the platform has us covered!

Another way of writing to ArrayBuffers: the DataView

As I mentioned in the beginning, there are times when it could come in handy to write different types of data into an ArrayBuffer.

Imagine you want to write a binary file that requires some file header like this:

Size in byte Description
2 Identifier “BM” for Bitmap image
4 Size of the image in byte
2 Reserved
2 Reserved
4 Offset (in bytes) between the end of the header and the pixel data

By the way: This is the structure of the BMP file header.

Instead of juggling a range of typed arrays, we can also use a DataView:

var buffer = new ArrayBuffer(14)
var view = new DataView(buffer)

view.setUint8(0, 66)     // Write one byte: 'B'
view.setUint8(1, 67)     // Write one byte: 'M'
view.setUint32(2, 1234)  // Write four byte: 1234 (rest filled with zeroes)
view.setUint16(6, 0)     // Write two bytes: reserved 1
view.setUint16(8, 0)     // Write two bytes: reserved 2
view.setUint32(10, 0)    // Write four bytes: offset

Our ArrayBuffer now contains the following data:

Byte  |    0   |    1   |    2   |    3   |    4   |    5   | ... |
Type  |   I8   |   I8   |                I32                | ... |    
Data  |    B   |    M   |00000000|00000000|00000100|11010010| ... |

In the example above we used the DataView to write two Uint8 into the first two bytes, followed by a Uint32 occupying the following four bytes, and so on and so forth.

Cool. Now let’s go back to our simple text example.

We can also write a Uint16 to hold our two-character string 'AB' using a DataView instead of the Uint16Array we’ve used previously:

var buffer = new ArrayBuffer(2) // array buffer for two bytes
var view = new DataView(buffer)

var value = (65 << 8) + 66 // we shift the 'A' into the upper 8 bit and add the 'B' as the lower 8 bit.
view.setUint16(0, value)

// Let's create a text file from them:
var blob = new Blob([buffer], {type: 'text/plain'})
var dataUri = window.URL.createObjectURL(blob)

Wait, what? We are greeted by the correct string ‘AB’ instead of the ‘BA’ we got last time when we wrote a Uint16! Maybe setUint16 defaults to big endian?

DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
1. Let v be the this value.
2. If littleEndian is not present, let littleEndian be false.
3. Return SetViewValue(v, byteOffset, littleEndian, “Uint16”, value).

(Emphasis mine.)

Gotcha! The specification says an omitted littleEndian should be treated as false and the SetViewValue will pass this on to SetValueInBuffer, but the operation on the Uint16Array was allowed to choose the value and decided for true.

This mismatch results in a different byte order and can cause quite some trouble when overlooked.

The now-deprecated original spec proposal from the Khronos Group even states this explicitly:

The typed array view types operate with the endianness of the host computer.

The DataView type operates upon data with a specified endianness (big-endian or little-endian).

This sounds pretty exhaustive, but there is a significant gap: What if the typed array and the DataView operations leave out the desired endianness? The answer is:

  • The TypedArray will use the native endianness of the system.
  • The DataView will default to big endian.


So is this a problem? Not really.

The browser chose little-endian probably because most systems today happen to work with it on the CPU- and memory levels, and that’s great for performance.

Now why the divergent behavior when using TypedArray setters versus DataView setters?

TypedArrays aim to provide a way to compose binary data for consumption on the same system – therefore it’s a good call to pick the endianness ad hoc.

DataView on the other hand is meant to be used to serialise and deserialise binary data for transmission of said binary data. This is why it makes sense to pick the endianness manually. The default for big endian is precisely because big endian is often used in network transmissions (sometimes referred to as the “network endianness”). If the data is streamed, the data can be assembled just by adding the incoming data at the next memory location.

The easiest way to deal with binary data is to use the DataView setters whenever the binary data we’re creating is leaving the browser – whether over the network to other systems or to the user in the form of a file download.

This has always been suggested, for instance in this HTML5Rocks article from 2012:

Typically, when your application reads binary data from a server, you’ll need to scan through it once in order to convert it into the data structures your application uses internally.

DataView should be used during this phase.

It’s not a good idea to use the multi-byte typed array views (Int16Array, Uint16Array, etc.) directly with data fetched via XMLHttpRequest, FileReader, or any other input/output API, because the typed array views use the CPU’s native endianness.

So, in summary, here’s what we’ve learned:

  • It is safe to assume systems to be little-endian.
  • TypedArrays are great for creating binary data, for instance to pass on to Canvas2D ImageData or WebGL.
  • DataView is a safe way to deal with binary data that you receive from or send to other systems.

Air MozillaThe Joy of Coding - Episode 85

The Joy of Coding - Episode 85 mconley livehacks on real Firefox bugs while thinking aloud.

about:communityRegional communities and Reps in 2016

Full static version is on the wiki and its conversation on discourse, feel free to point there anyone that might be interested.

What got shipped

from the Reps and Regional Communities Team


  • Executive summary
  • The Team
  • Release notes

Executive summary

Our two objectives for 2016 were:

  1. A focus set of relevant training and learning opportunities for mobilizers are systematized and they regularly access these opportunities to be more effective in their contributions and as a result providing more impact to Mozilla’s main initiatives.
  2. Reps is the program for most core volunteers where many communities feel their voice represented and influencing the organization, and where mozillians join to be more aligned, grow their skills and be more impactful in mobilizing others.

During 2016, the Reps and Regional communities team delivered:

  • A coaching training material to systematize training and coaching support to core mobilizers and communities, starting to be completely volunteer-driven in 2017.
  • An initial Leadership toolkit tailored to invest on the main identified skills our core mobilizers need to support Mozilla’s focus initiatives and areas.
  • Five in-person community gatherings in our top focus regions (Brazil, India, Europe, Arabic and Mexico) to test, iterate and deliver these coaching and leadership opportunities to key core mobilizers, as well as document and systematize this effort to allow volunteer to run their own local ones by themselves in 2017.
  • Support the creation (and regular update) of Activate Mozilla, a site to summarize the main focus areas for Mozilla (Rust, Servo, Test Pilot, WebVR, Internet Issues…) and how to provide value through activities co-created with functional partners.
  • Clear alignment, re-activation and impact delivery from the five focus communities, re-energizing and providing value to organization goals with Activate Mozilla activities during 2016 and helping them to come up with aligned plans for 2017 to support focus projects, including future partnerships with local organizations.
  • Alignment and impact delivery from regional communities around the world, with our Reps mobilizing almost 150 activities and events in more than 23 countries in the last 4 months supporting Test Pilot, Webcompat, Rust, Addons and E10s 2016 team goals.
  • A big update to Mozilla Reps (RepsNext) to evolve the program by supporting all these learning opportunities and becoming the main alignment, leadership, mobilizing and backbone force at the volunteer community (improving internal processes, mentors, coaching and regional representation/support).
  • Expand the support to our core contributors communications by enabling a discussion channel for NDA volunteers and staff and keeping core mobilizers in the loop with the organization communications, direction and encouraging conversations.
  • 100% increase in the positive sentiment about Reps program and Participation from our core mobilizers, as well as a very positive re-activation, engagement and alignment with 35 local communities thanks to Reps Regional Coaches.

The team

Release notes

December 30, 2016 (Q4HB4)

  • The Reps Review Team managed to reduce the budget approval time by 30%, this means that now it’s easier than ever for volunteers to request resources to support their activities.
  • Data from our last community survey shows that in the past 6 months we had a 100% increase in the positive sentiment about Reps program and Participation from our core mobilizers.
  • The coaching training material is available for anyone to use and will enable to systematize coaching training and be volunteer-driven thanks to the first cohort of new coaches we trained.
  • The Leadership Toolkit has now generated 13 new workshops and has a solid group of core contributors with a strong background developing and testing the material.

December 2, 2016 (Q4HB3)

November 11, 2016 (Q4HB2)

  • We held the Mexico Community Gathering in Mexico City, with a clear focus on reactivating the community, solving conflicts and aligning with the focus priorities.
  • 10 existing Reps Mentors began the new coaching training, expanding this way our coaching efforts to the existing mentor group in an effort to refresh and improve their skills.
  • At least 35 local communities showed a very positive sentiment about the re-activation, alignment and support from the Reps Regional Coaches.

Air MozillaWebdev Extravaganza: January 2017

Webdev Extravaganza: January 2017 Once a month web developers across the Mozilla community get together (in person and virtually) to share what cool stuff we've been working on. This...

Air MozillaMartes Mozilleros, 03 Jan 2017

Martes Mozilleros Reunión bi-semanal para hablar sobre el estado de Mozilla, la comunidad y sus proyectos. Bi-weekly meeting to talk (in Spanish) about Mozilla status, community and...

The Mozilla BlogMozilla Welcomes Ashley Boyd, VP of Advocacy

Movement-building veteran joins the Mozilla leadership team

This month, Ashley Boyd joins Mozilla as VP, Advocacy.

Ashley will lead Mozilla’s work to fuel the open Internet movement and mobilize millions to stand up for a free, open web. Our mission is ambitious: making the health of the Internet a mainstream issue. It is also vital: as centralization, surveillance, exclusion and other online threats proliferate, we need a movement to keep the web a global public resource.

In this role, Ashley will work with other teams within Mozilla, with ally organizations and with digital citizens around the world through advocacy campaigns and public education initiatives.

Ashley Boyd, Mozilla's new VP of Advocacy

Ashley Boyd, Mozilla’s new VP of Advocacy

Ashley was most recently Vice President & Chief Field Officer for MomsRising, a national grassroots organization in the U.S. As a founding staff member, she was instrumental in building MomsRising into an organization of one million grassroots supporters, 200 partner organizations and over 20 funding partners.

Ashley has over two decades of experience in public interest advocacy, with a specialization in effective uses of technology and public engagement. During her career, she has worked with leading public interest advocacy organizations in the U.S. and India including M&R Strategic Services, the Advocacy Institute, the Self Employed Women’s Association (India) and AmericaSpeaks. She has led multi-state organizing efforts around the issues of health reform, paid family leave, social security reform and the national budget. Ashley has a Master’s Degree in Rhetoric from the University of Maryland, College Park.

Ashley will build on the success of Mozilla’s advocacy work over the past years. In fall of 2016, Mozilla fought for common-sense copyright reform in the EU, creating public education media that engaged over one million citizens and sending hundreds of rebellious selfies to EU Parliament. Earlier in 2016, Mozilla launched a public education campaign around encryption and emerged as a staunch ally of Apple in the company’s clash with the FBI. Mozilla has also fought for mass surveillance reform, net neutrality and data retention reform.

Welcome, Ashley!

Ashley on LinkedIn and Twitter

Mozilla IndiaPrivacy Month Campaign 2017

Hello Mozillians,

Every year on January 28th, we celebrate the International Data Privacy Day. This year also to celebrate the day we are staring with the Privacy Month Campaign. It is a community led initiative to make users and makers of the web learn, teach, care and share about Online Privacy.

The aim of this campaign is to teach privacy basics and advanced dynamics to the web users and make them understand its importance via some fun activities and online posts. These posts are both informative as well as an interesting way to deliver the important message of Online Privacy and various infringements to it on the Internet today. Privacy Month is the first of many steps we’ll be taking this year in an effort to empower the users of the web to protect their privacy and control their digital footprint.

This campaign was originated by Mozilla India and is intended to be a global campaign. Communities from all over the world can participate. Please see below for the ways you can get involved. Volunteers are welcome to help with online posts, events, teaching kits and other resources like localization, and more.

Following the success of last year’s campaign, this year too has 2 parts:

  1. Online: 31 Teachable Moments. The goal of the online campaign is to provide a privacy tip a day that an average user could complete in 10 minutes or less. Tips will be shared through social media, such as Facebook and Twitter.
  1. Offline: Host a Popup or community event/session/workshop to teach about privacy. The community will be hosting in-person privacy events throughout the month of January. This year, we hope this project goes global and include Mozilla community privacy events from around the world. You can help us by hosting online privacy focused events in your neighborhood, campus, school, city or region.

Share your experiences using these hash tags: #PrivacyMonth #Advocate4Privacy. Want to know more, here is how.

To know more about this campaign, click here. To know more about last year’s campaign, click here.

You can contribute by tweeting and posting on Facebook about online privacy. Help us by retweeting and sharing the daily tips through your Twitter and Facebook accounts (#PrivacyMonth #Advocate4Privacy).

Sign up to support the campaign:  (Reps and Vouched Mozillians can sign up at the above link using their profile)

We have started the campaign with the initial posts on Twitter and Facebook.

Join in and help us build a safer web for all !

Here’s wishing you a very Happy New Year !

SUMO Blog2016 Mozilla Work Week II: The SUMO Story

Aloha, SUMO Nation!

We wanted to share with you the most important “SUMO things” (but not only) from the second Work Week we had this year.

The Work Weeks are Mozilla-wide meetings of all the core teams and as many community contributors as we can successfully invite over. This is not always easy or possible, due to many limitations and problems with international travel… There was a rumour that the Work Weeks in 2020 will be done fully in WebVR, to make it possible for everyone with the right hardware to attend – hopefully from inside of your favourite browser ;-) Good bye, giant carbon footprint!

Work Weeks happen every six months and are usually full of retrospectives, introspectives, and mapping out the future of “all things Mozilla”. They usually are places (and times) of the highest “density of Mozillian per square meter” throughout the year.

What you find below is a summary and explanation of what happened during the most recent Work Week, together with several useful (and fun) links. Unfortunately, the layout and setup of the meeting spaces did not create an environment suited for recordings, so we had to give up on that idea.

Day 0: Monday

Everyone got a bit of time to get settled, unpack, and prepare for the busy week ahead. We managed to not get lost in the ever-growing and shifting crowd and find each other in the evening for a small welcoming reception with everyone else who made it to the venue on time.

Day 1: Tuesday

The conference proper started with a big plenary session that included the speakers at the heart of Mozilla – the people we usually treat as our Northern Star when plotting the course across the whole community, also for SUMO. You can hear their thoughts on Air Mozilla, using the links below (it may require you to log in first):

After a good and energetic kick off, we got together in the Marketing space to talk about the road behind us and the road ahead. The “Unconference” was a medley of mini-projects to address some of the key areas on which the Marketing team has been (or should be) working. We split into several large groups and worked face-to-face with people we usually see only on screens – this definitely got the creative juices flowing, and you can expect positive changes in the way our larger team functions in the coming year.

We also had a chance to look back and review some of the biggest hurdles and achievements of our last 12 months. SUMO, while definitely not central to the larger team’s efforts (since we all work on making Mozilla and the web better, not just our little corners of it), got an honest applause from everyone, mostly for the great work that all of you are doing for the benefit of the users around the world.

Also, this was the first (and possibly last) day for grabbing a fresh sticker or two. They were disappearing and reappearing on laptops, phones, and other objects at an astounding rate.

Day 2: Wednesday

The Marketing talks and mini-sessions continued, and we managed to carve out a healthy chunk of time for SUMO stuff. with a walkthrough of the upcoming localization flow on Lithium, and a session on the Internet Awareness (slides) (notes) – probably our biggest new project for the upcoming year, for which your input and energy are indispensable.

This was also the first day for the “elective” sessions (where you could choose from a long list of presentations and chats on very focused topics). This idea worked out amazingly well, because we were all there to share and learn from each other. This very often meant getting a bit outside of our “comfort area” – and going beyond what we would usually do for Mozilla’s mission. This included a multitude of interesting and thought-provoking topics. A bit of fun was included as well.

All this talking (and listening!) was definitely getting us somewhere, even if at a terrible price… But we had great (and soft) support to keep us going above and beyond.

Day 3: Thursday

The rain kept going, but so did we. We even had a small tsunami alert popping up for about 30 minutes, but luckily we avoided getting wetter than absolutely necessary (AKA showering). You can’t stop the ‘zilla!

For SUMO, we had Madalina and Patrick walk us through a session on Lithium as our new platform, summarising where we were and what were the next steps for us. If you’re curious about that part of SUMO’s operations, you can always take a look at the documents we’ve kept using so far: your feedback and the Platform meeting notes.

Right after lunch, Chris Beard joined the whole Marketing team for a bit of Q&A – and while the . We also had an extra helping of the “elective” sessions – some of which were daringly ambitious and we can’t wait to see what the next year brings as their result!

Also, as with any other Mozilla-related thing, ever – we had a fair share of bugs ;-)

Day 4: Friday

This was the final day, and it held many a highlight for the whole crew, primarily thanks to those who delivered their “SUMO Show & Tell” mini-talks. We had the pleasure of listening to:

If you have any questions about the topics above, please contact them directly – the user profile pages offer a way to do so easily for logged in users through Private Messages.

We also continued chats and explorations within Marketing from the previous days, while trying to get some “daily” work done (not easy, but not impossible).

Just like with Chris the day before, afternoon had Mitchell Baker visiting us for a very honest and down-to-earth Q&A session.

So, by Friday we were all in great spirits, even if a bit tired. Many things have been said and heard – some rather serious, others not so much. And even if some of us were in a rather defiant mood, all good things come to an end. After the wrap up meetings and sessions, we all gathered for the final act of the Work Week – a well-deserved party!

Key Takeaways for SUMO

  • 2016 was not an easy year, but we did well for the resources and options we had available. It was a year of (sometimes forced) change and experimentation.
  • None of the really big things that we all have done or will do can happen without you, the contributors.
  • There are many other places outside of SUMO that offer help to users of Mozilla’s software (in many languages), and we have to make sure we work with them to create a healthy and useful support ecosystem without stepping on each other’s toes.
  • While there is a large variety of tools and methods across Mozilla to get different things done, the organization is heading towards standardizing the key elements of contributing; we do want to keep the innovation mindset, but we also want to make participation easier and faster, wherever reasonably possible.
  • The diversity in participation many of us take for granted takes a lot of effort and hard work to maintain; we will do our best to include and support everyone through our contributions.
  • 2017 will be a challenging year, as we work on keeping the site active and useful on a completely new platform; we also want to preserve the legacy of Kitsune in a meaningful way, making its code available to everyone interested in tinkering with it.
  • In 2017 we will expand our involvement within Mozilla’s Marketing and Social efforts. We are planning for a year of growth, big bets, and nurturing excellence for the benefit of our community and users.

Each and every time a large number of Mozillians get together, there is a bit of chaos, a bit of drama, a lot of ideas, many mini and maxi brainstorms, and heaps of good energy flowing around. This time was no different and the general attitude was that what we all do together for the web and its users will never be easy… but we will never stop and we’ll try to make it as much fun as possible. We hope you join us along for this bumpy, exciting, and fulfilling ride. Mahalo!

With #mozlove,

Your SUMO Team

P.S. In the interest of the page loading faster on slower connections, we decided to not post a lot of graphics and/or photos in this post. Below, you can find Mozillians’ group effort at documenting the whole event:


Air MozillaConnected Devices Weekly Program Update, 29 Dec 2016

Connected Devices Weekly Program Update Weekly project updates from the Mozilla Connected Devices team.

Air MozillaReps Weekly Meeting Dec. 29, 2016

Reps Weekly Meeting Dec. 29, 2016 This is a weekly call with some of the Reps to discuss all matters about/affecting Reps and invite Reps to share their work with everyone.

QMOFirefox 51 Beta 12 Testday

Hello Mozillians,

Let’s start this new year properly! We will have another beta testday, Firefox 51 beta 12 next Friday, 6th January. We will be focusing our testing on WebGL 2.0,  Zoom Indicator and Flash support (New version of flash in Linux – 24) features. Check out the detailed instructions via this etherpad.

No previous testing experience is required, so feel free to join us on #qa IRC channel where our moderators will offer you guidance and answer your questions.

See you on the first Friday from 2017! Have a happy new year!

Mozilla VR BlogCreating a new A-Painter brush using the Brush API

Creating a new A-Painter brush using the Brush API

In this tutorial we will take the minimum steps required to create a very simple brush for A-Painter, a VR painting experience made by Mozilla VR built with A-Frame. For example, a brush to draw simple lines. We will going to call it simpleline.

Please notice that for making new brushes using A-Painter's Brush API you need to have some Javascript programming basics and also be a bit familiar with Three.js.

This will be an in-depth explanation of how to make a brush. For a quick start, take a look to this nice introduction by Michael Feldstein


Download A-Painter Source Code

First, you need to grab your own copy of A-Painter and save to your computer, so you can change its code. If you have Git installed, you can easily do this by:

cd your/folder  
git clone  
cd a-painter  

If you don't have Git, you can go to, click on the green button "Clone or download", download the zip and unzip it wherever you want.

Run and Test

For running your local copy of A-Painter, you need npm installed. Just enter the directory where A-Painter is and run npm start. Then, open http://localhost:8080 with a VR compatible browser.

Creating an 'Empty' Brush

If we read the A-Painter readme, it says you need to implement this very simple interface:

BrushInterface.prototype = {  
  init: function (),
  addPoint: function (position, orientation, pointerPosition, pressure, timestamp) {},
  tick: function (timeOffset, delta) {}

The code sample above contains a function for initialization, another for adding new 'points' to the stroke, and another for animating the brush if that would be the case.

So, let's start by creating the skeleton of the brush:

First, copy this image to a-painter/brushes/thumb_simpleline.png. It will be the thumbnail image of our brush, so we can find it in the menu later.

Then, create a file in src/brushes/ called simpleline.js, paste this code and save it:

    init: function(color, width) {},
    addPoint: function(position, orientation, pointerPosition, pressure, timestamp) { return true; },
    tick: function(time, delta) {}
    thumbnail: 'brushes/thumb_simpleline.png',
    maxPoints: 1000,
    spacing: 0

This is the bare minimum. It does not paint anything, but A-Painter will accept it as a new brush. But before that, we need to add the simpleline.js to the list of files that need to be loaded when starting A-Painter. We do that by adding this line to src/index.js:


Now if you run your local A-Painter and test it with your HTC Vive or Oculus with controllers, you will find your new brush at the end of the list of brushes:

For testing back and forth it is quite convenient to have the brush already selected by default. To do this, go to
src/components/brush.js and in the schema definition at the top of the file change brush: {default: 'line'} by brush : {default: 'simpleline'}.

Connecting the dots

So, let's make our brush actually paint something. Every time you push the trigger to start a new stroke, A-Painter adds a new entity (an A-Frame <a-entity>) in the scene that will hold the geometry of the stroke. Then, A-Painter starts calling your addPoint() function each time the controller is moved more than spacing meters, so you can add stuff to your brush, grow the stroke or whatever your brush does. Normally, you will want to add or modify the 3D geometry of the brush, which can be accessed via this.object3D. In our case, for each new point we will draw a line from it to the previous one. The basic way of doing this is by creating new THREE.Line that will be added to the object3D.

Creating a new A-Painter brush using the Brush API

Go to our simpleline.js file and change the addPoint() function like this:

addPoint: function(position, orientation, pointerPosition, pressure, timestamp) { 

  // if it is the first point, there's no line to paint
  if ( { 
    var lineGeometry = new THREE.Geometry();

    // line from current position to the previous one

    // create a material for the line with the current color selected
    var lineMaterial = new THREE.LineBasicMaterial({color:}); 

    // create the line mesh 
    var line = new THREE.Line(lineGeometry, lineMaterial); 

    // add it to the stroke entity

  // point added!
  return true; 

The parameters passed to addPoint() represent the data of the new point, like its position, orientation, pressure of the trigger used (from 0 to 1) and the time it was made (in microseconds from the beginning of A-Painter page load). The difference between position and pointerPosition is that position refers to the center of the controller (more less above the trigger) and pointerPosition refers to the tip of the controller, from where the 'paint' is supposed to appear.

In your brush you may want to discard the new point that is being added. In that case, simply return false.

In our new addPoint(), we first check if exists or not. If it does not it means that this is the first point, so we skip adding a new line (but we keep returning true so the point is added to the list of points of the stroke, and used in the next addPoint() as the first vertex of the first line).

Go try it!

I know, I know, the line is too thin! LineBasicMaterial has a linewidth parameter indeed, but as the documentation reads:

Due to limitations in the ANGLE layer, with the WebGL renderer on Windows platforms linewidth will always be 1 regardless of the set value.

(As an exercise, you could try to use linewidth and load the scene in macOS or linux)


Since addPoint() is usually called hundreds of times for each stroke you make, you want it to be as fast as possible and avoid creating unnecessary stuff. For this reason, it is a good decision to cache and reuse all you can. In our example, the material is the same for every line added to the stroke, so let's cache it. The init() function is perfect for this purpose for is it called just one time, at the beginning of the stroke:

init: function () {  
  this.material = new THREE.LineBasicMaterial({color:});

and then change our addPoint():

addPoint: function(position, orientation, pointerPosition, pressure, timestamp) {  
  if ( {
    var lineGeometry = new THREE.Geometry();

    // removed the line that created the material

    // reusing the material
    var line = new THREE.Line(lineGeometry, this.material); 
  return true; 

in all our brush functions we have the object available with many useful properties:

  • list of points added to the stroke
  • length of
  • size of the stroke when it was created. Multiply it by pressure in addPoint() to get the current -pressure sensitive- size of the stroke
  • position of the controller in the latest stroke
  • position of the tip in the latest stroke
  • maximum number of points that we previously defined this brush can hold on each stroke
  • the color that was selected when the stroke started

IMPORTANT NOTE: this brush is very unoptimized, creating a single line for every 2 vertices is a very bad decision, and as soon as you paint some strokes you probably perceive a drop in the frame rate. I just wanted to keep this tutorial as simple as possible.

(If you wonder, the proper way of doing dynamic lines in threejs is using BufferGeometries. I've rewritten this brush using BufferGeometries and uploaded to the tutorial GitHub).

Alive Brush

By using the function tick() we can animate the strokes of our brush in any way we want. This function is called continuously on every frame and receives two parameters: time and delta. The first is the number of microseconds passed since the beginning of A-Painter, and the second is the difference of microseconds between this call and the last tick. They are useful for making the animation time dependant and running always at the same speed regarding of the frame rate.

Let's just add a simple little jitter to the lines:

tick: function (time, delta) {

  // get a random offset
  var rnd1 = new THREE.Vector3(Math.random() * 0.001 - 0.0005, Math.random() * 0.001 - 0.0005, Math.random() * 0.001 - 0.0005);

  // iterate all lines
  for (var i = 0; i < this.object3D.children.length; i++) {

    // get a second offset
    var rnd2 = new THREE.Vector3(Math.random() * 0.001 - 0.0005, Math.random() * 0.001 - 0.0005, Math.random() * 0.001 - 0.0005);

    // apply offsets to both vertices of each line

    // set first offset to the second, so lines don't break
    rnd1 = rnd2;

    // tell threejs to update vertex positions
    this.object3D.children[i].geometry.verticesNeedUpdate = true;

For this to work, the vertices objects must be unique references. For doing this, in our function addPoint() change the line:




Try this again, and check it out: lightning bolts! \:D/

In the brush version using BufferGeometry, the tick() function is much more simple, take a peek.

Now, Your Turn!

I hope you find this tutorial clear and interesting, and that you are eager to create your own custom brushes. If you make something cool, please share it with us! You can contribute and add new brushes to the official A-Painter by sending a pull request to the A-Painter repository.

You can find the source code of this tutorial on GitHub.

SeaMonkey2.46 and OSX64


I’d just like to mention that officially, 2.46 isn’t supported on OSX 10.7 and 10.8; but apparently, some have managed to get it working.  As I’m not even remotely knowledgeable in OSX64, I have no way of knowing what is not supposed to work in OSX 10.7 to 10.8. (Though… it *is* Christmas. 🙂 )

Now the question some people are probably asking.  If 10.7 -> 10.8 *aren’t* supported, then why are they being updated to 2.46?

Good question.   [Yes.. let’s watch me squirm for an answer.]

Basically, I done goofed.  With so much vested energy in the release process, it had slipped my mind that OSX 10.7 and 10.8 aren’t supported (as did the non CPU SSE2 issue).  So those affected ‘can try’ 2.46, but it’s unsupported.  Worse comes to worse, you return to 2.40.

I seem to remember writing about how this is an example of technology ‘improving’ (for some definition really) leaving those who use hardware(that still work, mind you) wondering what to do.   [I realize that I can probably ramble on with a diatribe on how technology is seemingly ‘improving’ but it’s still not making our lives any bit easier.  But I’ll just dispense with it. 😛 ]

I apologize for not mentioning this or even fixing this (not sure how I can do that), aside for getting crazily-rich and buying everyone a brand new machine of their choice.  (Yeah… as Kenny Nolan once sang, “I like Dreaming”.)


[Standard disclaimer: Everything I’ve written above are my views alone.  It may or may not reflect the views of the SeaMonkey project and its members.]

SeaMonkeyWindows 2.40 -> 2.46 updates and SSE

Hi everyone.

This is directed to fellow Windows SeaMonkey users.

SeaMonkey 2.46 (Well, it would’ve started with 2.44) will not work with systems that do not have CPU SSE.  This is unfortunate as what ‘should’ have happened was we release a version which would “act as a watershed” to check for CPU SSE and report (in the case of not having CPU SSE) that the user’s system is not supported anymore.  That’s what should have happened (probably around 2.43), but since the browny stuff hit the proverbial fan (requiring us to miss 5 releases 🙁 ) post-2.40-release, we totally missed that opportunity.

So, as I mentioned in my newsgroup post, 2.40 users affected by this are stuck with 2.40 unless they upgrade to/purchase a new system; but as far as I understand, non-SSE CPUs are mostly pre-Pentium III era  (as SSE was introduced in the Pentium III) (got this from ).

I don’t know how many users are affected by this (due to lack of any telemetry or statistics in front of me), I’m hoping they won’t form a mob and come look for me.  😛

All jokes aside,  it is unfortunate that this needs to happen, just like the removal of support for OSX64 10.{5, 6, 7 and 8}.  But I guess this goes with the territory when things are ‘improving’ at a break-neck pace.


The Mozilla BlogNow We All Agree: There are no safe backdoors when it comes to encryption

There are many recent examples of the threats to Internet security. We’ve talked about how protecting cybersecurity is a shared responsibility and we see increased need for governments, tech companies and users to work together on topics like encryption, security vulnerabilities and surveillance.

The most well known example is the Apple vs FBI case from earlier this year. In this case, law enforcement officials said they were unable to access encrypted data on an iPhone during an investigation. The FBI wanted to require Apple to create flawed versions of their software to access encrypted data on an iPhone of a known criminal.

Mozilla argued in statements and filings that requiring tech companies to create encryption backdoors for law enforcement to decrypt data would 1) weaken security for individuals and the Internet overall, defeating the purpose of creating such technology in the first place and 2) set a dangerous precedent in the US and globally for governments to require tech companies to make flawed versions of software that would be vulnerable to criminals (not just government hacking).

We said there were other ways the FBI could access this data, as did Apple and many other tech companies. Mozilla also launched a global encryption advocacy and education campaign just days before news of the Apple vs. FBI case broke. The FBI found alternate methods to get the data (spending more than $1 million on a hacking tool) and dropped the case, without disclosing any details to Apple to help the company patch the software and protect its users.

This case is important for many reasons. One of the most important is that it created mainstream discourse about some very important topics relevant to all Internet users – encryption, user security and government access to data. Government access to encrypted data isn’t a new topic, but I love that this case created more awareness and discussion about what needs to change to balance the needs of national and individual security in today’s fragile cybersecurity reality.

The bipartisan Congressional Encryption Working Group was created in the wake of the Apple vs FBI case. This working group was formed because “the case, and the heated rhetoric exchanged by parties on all sides, reignited a decades – old debate about government access to encrypted data.”

The Encryption Working Group just released their end of year report, which concludes encryption backdoors do more harm than good. While there are law enforcement challenges to accessing encrypted data, “stakeholders from all perspectives acknowledged the importance of encryption to our personal, economic, and national security.”

The report talks about the profound impact that encryption has had on law enforcement investigations and the “going dark” phenomenon, but cautions that there is no “one-size-fits-all” solution to the encryption challenge. The report calls for next steps including “exploring opportunities to reduce the knowledge and capabilities gap between law enforcement and the technology community.” Helping to close this gap and solve for the “going dark” phenomenon is something Mozilla is committed to and well suited to do as part of our mission.

The report included questions about other important cybersecurity issues that the Apple vs. FBI case raised in relation to encryption, including two Mozilla has strongly worked on reform to – government hacking and government disclosure of security vulnerabilities.

You can read the Mozilla Policy blog post from Heather West for more information, but I’ll leave you with the closing to the Encryption Working Group report because I think it nicely echoes what Mozilla and I personally have been advocating for in cybersecurity this year.


“We must strive to find common ground in our collective responsibility: to prevent crime, protect national security, and provide the best possible conditions for peace and prosperity. That is why this can no longer be an isolated or binary debate. There is no ‘us versus them,’ or ‘pro-encryption versus law enforcement.’ This conversation implicates everyone and everything that depends on connected technologies including our law enforcement and intelligence communities.

This is a complex challenge that will take time, patience, and cooperation to resolve. The potential consequences of inaction—or overreaction—are too important to allow historical or ideological perspectives to stand in the way of progress.”

SeaMonkeyUpdates and 2.40


First off, there are issues with the website not showing updates to 2.46.  That was my oversight and is being followed up with a patch.

Secondly, updating 2.40 to 2.46 is not working (as like 2.39-> 2.40).  That is currently being worked on.:ewong

Open Policy & AdvocacyBipartisan Congressional Group Confirms Encryption Backdoors Are Unnecessary

The bipartisan Congressional Encryption Working Group just released an end of year report after spending much of the last year looking into the decades-long encryption debate – and have squarely refuted the idea that weakening encryption is necessary to protect people.

The working group was formed after several high-profile cases where law enforcement asked for additional access to consumer devices, citing howe “the widespread adoption of encryption poses a real challenge to the law enforcement community and strong encryption is essential to both individual privacy and national security.”

We’ve talked about how protecting cybersecurity is a shared responsibility and we see increased need for governments, tech companies and users to work together on topics like encryption, security vulnerabilities and surveillance – as Denelle notes in her blog post here.

The report refutes the idea that encryption backdoors are a necessary (or good) solution and argues against laws that would mandate weakening encryption – saying that “any measure that weakens encryption works against the national interest.” The report acknowledges the profound impact that encryption has on law enforcement investigations and the “going dark” phenomenon, but cautions that there is no “one-size-fits-all” solution to the encryption challenge.

Four key observations are highlighted for the next Congress as they work on encryption related matters:

  • Any measure that weakens encryption works against the national interest.
  • Encryption technology is a global technology that is widely and increasingly available around the world. (it’s free and often open source)
  • The variety of stakeholders, technologies, and other factors create different and divergent challenges with respect to encryption and the “going dark” phenomenon, and therefore there is no “one-size-fits-all” solution to the encryption challenge.
  • Congress should foster cooperation between the law enforcement community and technology companies.

The Encryption Working Group also called for additional inquiry into topics including lawful hacking and the Vulnerabilities Equities Process (VEP), two areas that Mozilla has been advocating for reform to add transparency and accountability measures. The report said “stakeholders expressed concern that a legal hacking regime creates the wrong incentives for government agencies that should be working with private companies to patch vulnerabilities and improve cybersecurity” and the report included questions about the existing Vulnerability Equities Process (VEP) and how Congress might formalize it.

While we are encouraged by the Encryption Working Group report, it has findings and recommendations that are not currently binding. So, we will continue to work with legislators, tech companies and internet users to bring more education, awareness and advocacy for the protection of encryption and cybersecurity. We look forward to working with the next administration, Congress and government law enforcement agencies on protecting cybersecurity and national security.

SUMO BlogWhat’s Up with SUMO – 22nd December

Greetings, SUMO Nation!

Welcome to one of the “final stretch” posts for 2016 on (y)our blog. The last days of the year are a bit binary – because of the holidays (for many of us), they’re a bit slower and mellower… Then again, because it’s the end of the year, many things are to be finalized, locked down, and completed – so there’s a bit of a rush as well :-) No time to waste, then… Dive into the news below, friends!

Welcome, new contributors!

If you just joined us, don’t hesitate – come over and say “hi” in the forums!

Contributors of the week

Don’t forget that if you are new to SUMO and someone helped you get started in a nice way you can nominate them for the Buddy of the Month!

SUMO Community meetings

  • LATEST ONE: 21st of December – you can read the notes here (and see the video at AirMozilla).
  • NEXT ONE: happening on the 28th of December!
  • Reminder – if you want to add a discussion topic to the upcoming meeting agenda:
    • Start a thread in the Community Forums, so that everyone in the community can see what will be discussed and voice their opinion here before Wednesday (this will make it easier to have an efficient meeting).
    • Please do so as soon as you can before the meeting, so that people have time to read, think, and reply (and also add it to the agenda).
    • If you can, please attend the meeting in person (or via IRC), so we can follow up on your discussion topic during the meeting with your feedback.




  • Lots of questions coming in, so please jump in and help! We’re popular, but with great popularity comes great responsibility ;-) Help us represent Firefox out there!
  • We are looking into integrating Facebook, more details coming early 2017.
  • Reminder: if you assign a conversation to someone else, please be sure to leave a note for them explaining why you did that
  • Remember, you can contact Sierra (sreed@), Elisabeth (ehull@), or Rachel (guigs@) to get started with Social support. Help us provide friendly help through the likes of @firefox, @firefox_es, @firefox_fr and @firefoxbrasil on Twitter and beyond :-)
  • Remember that you can subscribe to the social-support@ mailing list and get updates from Sierra!

Support Forum

  • Are you listening to music while responding to posts in the forums? What’s your favourite (or not so) holiday song?
  • A polite reminder: please do not delete posts without an explanation to the poster in the forums, it can be frustrating to both the author and the user in the thread – thank you!

Knowledge Base & L10n

  • Over 320 edits in the KB in all locales since the last blog post – thank you so much, Editors & Reviewers!
  • We need your help with a couple of strings for Firefox Focus! Jump into Pontoon and search for “Firefox Focus” and “Automatic privacy browser and content blocker.” – if they need localization into your language, please make sure they’re translated – thank you!
  • The documentation for l10n in Lithium that explains the process for newcomers and veterans will be shared with you soon in our l10n forums.
  • A quick note: the most recent test migration in Lithium moved the localized content to incorrect categories – do not worry if content is missing – the upcoming migration will have that fixed!


  • for iOS
    • 6.0 happening in 2017. Most likely around January 12th. The date will be confirmed as soon as we can!
      • Highlights will include handling mailto: links and (perhaps) Sync improvements ;-)

Whew, that’s it… So, what are your dreams for the new year? Do you make a list? Do you plan something special? Or do you just keep going at your usual pace? Tell us in the comments!

SUMO BlogSUMO Release Report for Firefox 50

This report is aiming to capture and explain what has happened during and after the launch of Firefox 50 on multiple support fronts: Knowledge Base and localization, 1:1 social and forum support, trending issues and reported bugs, as well as to celebrate and recognize the tremendous work the SUMO community is putting in to make sure our users experience a happy release. We have lots of ways to contribute, from Support to Social to PR, the ways you can help shape our communications program and tell the world about Mozilla are endless. For more information: []

Thank yous from users that received help from the SUMO community:


Knowledge Base and Localization


Article Voted “helpful” (English/US only) Global views Select user feedback
Desktop (Nov. 15 – Dec. 19) 50-66% 21042 “Why is there an arbitrary limit when searching a webpage: cf ‘more than 100 matches’. Is there any way to disable this ‘feature’?” 77% 372839 “i don’t get the option to disable” 86-91% 19766 “I am still seeing searches I have made show up in facebook ads.” 71% 3 “FF keeps opening new windows as opposed to opening tabs like i have set up. Why is this?” 78-82% 27311 none
Android (Nov. 15 – Dec. 19) 50% 78 none 33-75% 1,413 “I want to open links in a new tab directly, like in the PC browser version, without having to click another \”switch to\” button first. I assume that is not possible.”

More info in this document

Article Top 10 locale coverage Top 20 locale coverage
Desktop (Nov. 15 – Dec. 19) 100% 57% 100% 90% 100% 90% 100% 90% 100% 57%
Android (Nov. 15 – Dec. 19) 100% 76% 100% 81%


Support Forum Threads

760 of 3787 solved

By Locale Questions volume

locale No response answered unsolved solved volume
english en-US 867 2573 727 2713 3440
portuguese pt-Br 24 62 8 78 86
finish fi 4 10 14 0 14
spanish es 110 36 5 141 146
cech cs 0 0 0 0 0
turkish tr 7 12 1 18 19
slovenian sl 0 0 0 0 0
hungarian hu 26 3 1 28 29
serbian sr 2 0 0 2 2

Top solvers – FredMcD, philipp, Scribe, jscher2000, James, ideato, the-edmeister, John99,Happy112

What we are really good at troubleshooting: Addon compatibility, Customization, Start up Crashes

Solved top viewed threads

Firefox for Desktop by Google Analytics

Firefox for Android

Firefox Klar and Firefox Focus had no issues upon the first first week release.

One highlight would be Firefox is confusing and they would rather share with Firefox and they would like the ability to change the search engine.

See more Data on the threads this Release here

Bugs Created from Forum threads – SUMO Community

Bug 1324064 – [e10s] printing causes content process to crash with Foxit Reader PDF

Bug 1322029 – Startup crashes on ZTE Max Duo devices after update to Firefox 50.0.2

Bug 1319543 – ogg file no longer playing in Firefox 50 [FIXED!]

Social Support Highlights

Brought to you by Respond by Buffer and Sierra

The Social Support program has grown a lot with the new tool and since Sierra has been involved. Here are some highlights of the amazing work this team has been doing.

If you are interested in getting started answering support questions on Twitter as the Mozilla brand sign up here: []

Total Active contributors in program 32!

Top Responders: You have been busy, way to go!

Top Responders last week (November 7-15)

  • Andrew – 42 tweets
  • Daniela – 33 tweets
  • Zilmar – 8 tweets

Top Responders (November 13-19)

  • Magno – 193 tweets
  • Andrew – 37 tweets
  • Daniela – 28 tweets
  • Swarnava – 16 tweets
  • Noah – 7 tweets

Top Responders: November 20-26

  • Magno (MR) – 297 tweets
  • Barend (BR) – 48 tweets
  • Andrew (AT) – 34 tweetsAlex (AM) – 21 tweets
  • Geraldo (GB) – 11 tweets

Top Responders: November 27-December 10

  • Andrew (AT) – 129 Tweets
  • Geraldo (GB) – 118 Tweets
  • Magno (MR) – 78 tweets
  • Josh (JR) – 49 Tweets
  • Barend (BR) – 39 Tweets

Top Responders for the Release November 15 – December 10

  1. Magno Reis – 568 tweets
  2. Andrew Trung – 200 tweets
  3. Geraldo – 143 tweets
  4. Baredn – 92 tweets
  5. Josh – 49 tweets
  6. Daniella – 45 tweets
  7. Alex Mayorga – 33 tweets
  8. Nildelea  – 19 tweets
  9. Noah  – 14 tweets

Social Support Highlights

We had a Social Support Sprint the second week of the release on November 18 and we loved having you.

Common questions:

  • Is Firefox Focus going to be available on Android?
  • I keep seeing a “your connection is not secure” message. Why?
  • Why does Firefox keep crashing?

November 30 there was a social responses made around this, “Firefox zero-day: Mozilla races to patch bug used to attack Tor browser users.” We responded to all of them.

In December, Best Practices for the Social Support people was published, be sure to check it out: Best Practices for Social Support

Thanks for reading everyone, see you next release in January 2017! Happy Holidays in the meantime!

Air MozillaReps Weekly Meeting Dec. 22, 2016

Reps Weekly Meeting Dec. 22, 2016 This is a weekly call with some of the Reps to discuss all matters about/affecting Reps and invite Reps to share their work with everyone.

SeaMonkeyTears of joy…

Hi All..

My goodness.

2.46 has finally been released! <or insert in your mind as many ! as you want>

It has been a painful and arduous journey and it has finally come to this moment.  SeaMonkey 2.46 IS OUT!

Please do check it out and report any badness (the bad badness… not the good badness..if such things exist) that happens.

Oh one more thing that I might have forgotten to mention.

SeaMonkey 2.46 is out!  ;P

Seriously though…  I do have one nagging feeling that updating for Windows 64 bit users *might* have an issue.  If so, please post here or on the newsgroups and I’ll fix it.

My goodness….  I think I’m going to cry.


Mozilla VR BlogMastering A-Painter

Mastering A-Painter

It has been almost four months since we released A-Painter. We've received lots of compliments, help and feedback from users and developers. Thanks for your support!

Now that you're familiar with the basics, let's explore some advanced features that you might not know and make part of my A-Painter creative workflow.

Reference Images and 3D Models

You can use images and 3D models as references for your paintings. Just drag and drop images or OBJ files directly on A-Painter. Please note that neither reference images or models are saved with the painting!. They are just that: references for painting.

Mastering A-Painter

The images or models are randomly placed in the space, you cannot modify their position (yet). If by any chance they overlap or you don't like the layout you can refresh the page and load the files again.

3D models will be loaded without any transformation. Make sure to prepare them beforehand with the scale, position and rotation you prefer. 3D models will have a dark grey plastic as predefined material so they don't interfere with your painting.

Remember: 1 unit = 1 real meter in VR. So if you create a default UV Sphere in Blender that has radius 1, export it to OBJ and bring it to A-Painter, you will have in the scene a sphere with a radius of 1 meter (2 meters diameter).

Keyboard Shortcuts

BackspaceUndo (same as the UNDO button in the controller menu, multiple levels of undo1)
c Clear the painting (same as the CLEAR button in the controller menu)
o Show/hide reference objects and images
u Upload your painting to Uploadcare2 (same action as the SAVE button). You will get a share link in your browser. If you want to download the file, trim the Uploadcare part out of the whole url and you will asked to save it. Just name it with an .apa extension.
v Save your painting locally in an .apa file3 (think of the v as a down arrow).
j Save your painting locally in a .json file.
n Select next brush
1 Note that the undo command only undoes previous strokes, not scene clearing or other actions.
2 We are using file hosting services for now, but this may change depending on A-Painter evolution and usage.
3 APA is a binary format designed for A-Painter much more compact than JSON. For more information, check the Readme (

URL Parameters

You can use a number of parameters when loading or sharing an A-Painter url:

urlURLLoad a painting in APA format
urljsonURLLoad a painting in JSON format
skyimage URLSet a different sky texture (leave empty to remove sky)
floorimage URLSet a different floor texture (leave empty to remove floor)
bgcolorHex color without the # (for example, bgcolor=FFF) Set a different background color


Hacking Your Paintings

You can save paintings in JSON format, which can be loaded by simply dragging and dropping them inside A-Painter. Note that the previous painting is not cleared! Use the CLEAR button or c key to do it before dragging the new painting. But hey, it can be interesting to mix paintings together..

Warning: large paintings can take some seconds to load, be patient!

Would you like to play and hack with A-Painter paintings data? The format is quite simple. What you get is an array of brush presets and an array of strokes, each one done with one of those brush presets:

   version: "apainter1",
   brushes: string [],
   strokes: {
      brush: {
         index: int, 
         color: {r: float, g: float, b: float}, 
         size: float
      points: {
         position: {x: float, y: float, z: float},
         orientation: {x: float, y: float, z: float, w: float},
         pointerPosition: {x: float, y: float, z: float},
         pressure: float,
         timestamp : int

For example, a very simple painting is something like this:

Mastering A-Painter

We have access to each point's position, orientation, pressure, and time of creation! We can reinterpret this data the way we want. For example, from the data of the painting above, we can make some UFOs fly (z for scale):

See the Pen apainter-apa-ufo by Diego F Goberna (@feiss) on CodePen.

We can draw patterns:

See the Pen apainter-tutorial-random-lines by Diego F Goberna (@feiss) on CodePen.

See the Pen apainter-tutorial-connecting-lines by Diego F Goberna (@feiss) on CodePen.

...endless possibilities!!

See the Pen apainter-tutorial-piano by Diego F Goberna (@feiss) on CodePen.

We are showing basic 2D examples here to simplify, I'm sure you got the point! With our HTC Vive or Oculus Rift Touch controllers we have a very reliable and performant Motion Capture System in our hands, and A-Painter provides a very easy way to create and retrieve motion data with it :)

Custom Brushes

Since A-Painter is open source, you can customize, change and improve any aspect of it, and even send us a pull request to add that change to the official version.

Making new custom brushes can be done in two ways: by adding new presets to the line and stamp brushes, or by making complete new brushes using the brush API.

Please note that for customizing brushes, you need your own local copy of A-Painter. Grab it from gitHub and follow these instructions.

Adding new Line and Stamp presets

Apart from some FX brushes in the third page of brushes of the UI, all A-Painter brushes are grouped in two main categories: Line and Stamp, defined in src/brushes/line.js and src/brushes/stamp.js.

The main difference is that line brushes stretch a texture along the stroke, and stamp brushes drop a sample of the texture in each point of the stroke.

Mastering A-Painter

(Left: the texture used. Top: sample stroke done using a line brush using that texture. Bottom: same stroke done with a stamp brush)

So two implementations of the brush API (line.js and stamp.js) are enough to provide about 30 different brushes, just by using different presets and textures. At the end of each of those files you will find the presets. So just by adding (or modifying) presets to those lists you can add your custom brushes based on these two main categories.

New line brush preset

Let's say we want a brush that starts and ends thick but it is thin in the middle of the stroke. Prepare a texture like this in your favorite painting application (the gray part is the transparent part of the image) or just download this one:

Mastering A-Painter


All A-Painter textures are located in the /brushes folder, you could use one of those as a starting point

And you need to make another image for the thumbnail. Something like this:

Mastering A-Painter


Add these two images to the /brushes folder, and add the new preset at the beginning of the preset list (so it is listed in the first position in the UI):

var lines = [  
      name: 'mybrush',
      materialOptions: {
        type: 'textured',
        textureSrc: 'brushes/mybrush.png'
      thumbnail: 'brushes/thumb_mybrush.png'
//rest of presets..

Line options are:

  • name An unique name for your brush.
  • materialOptions.type One of 'flat' (constant color) or 'shaded' (color changes with light)
  • materialOptions.textureSrc The path to the brush texture
  • thumbnail The path to the thumbnail image

Save the line.js file, start the server of your local version of A-Painter (npm start), go to localhost:8080 and voila!

New Stamp Brush Preset

Let's create a new Stamp brush now. What about flowers?

Mastering A-Painter


Mastering A-Painter


Stamp options are:

  • name (string) An unique name for your brush
  • materialOptions
    • type (string) Either 'flat' (constant color) or 'shaded' (color changes with light)
    • textureSrc (string) Path to the texture source
    • autoRotate (boolean - optional) Each sample of the stamp is rotated 0.1 radian respective to the previous
    • angleJitter (float - optional) Each sample is randomly rotated +-angleJitter radians
    • subTextures (int - optional) If you want more variation in your stamp brush you can add additional textures to it, just by putting them together one after another in one row, and specifying how many of them are there using this parameter.
  • thumbnail (string) Path to the thubmnail image
  • spacing (float) This parameter is quite important, to control the minimum separation (in meters) you want among the stamps.

Our flower stamp preset could have these parameters:

  name: 'flowers',
  materialOptions: {
    type: 'shaded',
    textureSrc: 'brushes/flower.png',
    angleJitter: Math.PI / 2,
  thumbnail: 'brushes/thumb_flower.png',
  spacing: 0.15

By adding the parameter subTextures:3 we could use this texture to have more variation:

Mastering A-Painter


Using the Brush API to Create a New Brush

Another way of making brushes is by programming them from scratch using the Brush API. Next week I will post a detailed tutorial about it. Stay tuned!

Small Tips

  • The more strokes you do, the less performant the app will be. One long stroke is more lightweight performance wise than many short strokes, even if their total length is much shorter than the long one. (There is a lot of room for optimization in A-Painter, and this is a pending enhancement we have).

  • The colors you see in your VR headset may look quite different in your monitor. Consider this when taking screenshots, you may want to tweak them before sharing.

Join the A-Painter Family!

A-Painter hasn't been around long, but has a lot of potential. Mozilla VR is committed to bringing new VR technologies, experiments and experiences, and we need your help! If you have ideas or improvements, join us on GitHub. Your contributions will help make A-Painter better for everyone!

Air MozillaThe Joy of Coding - Episode 84

The Joy of Coding - Episode 84 mconley livehacks on real Firefox bugs while thinking aloud.