The articles below include content about downloading and building Mozilla code. In addition, you'll find helpful articles about how the code works, how to build add-ons for Mozilla applications and the like.

Accessibility and Mozilla
Accessibility is the idea that software (among other things) should be designed to be usable and, as much as possible, convenient to use for people with disabilities. Mozilla strives to make its software accessible; the documents below cover the ways in which we do so.
Add-ons add new functionality to Gecko-based applications such as Firefox, SeaMonkey, and Thunderbird.
Adding a new CSS property
This page describes how to add a new CSS property to the style system.  The style system is the part of the code in Gecko that is responsible for producing a computed value for every property for every element.  See the Gecko Overview for more information about the style system.
Adding a new event
Roughly, there are 3 types of event. First, you need to choose which type you need.
Adding a new word to the en-US dictionary
Occasionally bugs are filed pointing out situations where perfectly legitimate words are missing from the English spell check dictionary in Firefox. This article describes the process for adding a word to the dictionary.
Browser security
An important aspect of developing code for any browser, including Firefox, as well as any Web-oriented project, is its security. These articles provide important guides and references to ensuring the code you write is secure, including both design recommendations and testing guidelines.
Bugzilla (often abbreviated b.m.o) is's bug-tracking system, a database for recording bugs and enhancement requests for Firefox, Thunderbird, SeaMonkey, Camino, and other projects.
C++ portability guide
What follows is a set of rules, guidelines, and tips that we have found to be useful in making C++ code portable across many machines and compilers.
The Mozilla Calendar Project is a community driven project based on the Mozilla application architecture. The Project's heart is a calendaring backend based on libical. The Lightning extension is built on top of this platform and provides integrated calendaring capabilities for Mozilla Messaging's Email client Thunderbird.
Chat Core
Chat Core is the shared code for instant messaging that is shared by Instantbird and Thunderbird. It provides a number of functions and capabilities, including:
ChromeWorkers and the Chrome worker loader
To complement the open Web Worker functionality, Mozilla has introduced the ChromeWorker interface, which provides this capability within application chrome. That makes it available not only to the application itself, but also to add-ons.
Command Line Options
Command line options are used to specify various startup options for Mozilla applications.
Connect with Mozilla
Enable, inspire and collaborate to make the Web the primary platform used to create experiences across all connected devices.
Debugging a project as large as Mozilla can be a daunting task. Fortunately, over the years, Mozilla developers have come up with not just technologies and features to help you debug code, but have devised tips and techniques that can help too. Also available are assorted tools that you can use when debugging.
Developer guide
There are lots of ways to contribute to the Mozilla project: coding, testing, improving the build process and tools, or contributing to the documentation. This guide provides information that will not only help you get started as a Mozilla contributor, but that you'll find useful to refer to even if you are already an experienced contributor.
Error codes returned by Mozilla APIs
The following tables list errors that can occur when calling various Mozilla APIs. Each error is listed by its name and an error code in parentheses. An error will typically be displayed on the error console, but can be captured using a try-catch block in JavaScript. These constants can be accessed through Components.results. For example, by using Components.results.NS_ERROR_NOT_INITIALIZED
Firefox is Mozilla's popular Web browser, available for multiple platforms including Windows, OS X, and Linux on the desktop and all Android mobile devices. With broad compatibility, the latest in Web technologies, and powerful development tools, Firefox is a great choice for both Web developers and end users.
Firefox Marketplace
In this zone you'll find all the information you need to prepare and publish apps on the Firefox Marketplace. Find guidance on how to make apps successful, delivery options, monetization, publishing and updating apps, and the libraries and APIs to make use of Marketplace features.
Firefox OS
Firefox OS is the mobile operating system developed by Mozilla, based on Linux and Firefox's powerful Gecko rendering engine.
Firefox for Android
For more and more people mobile devices are the primary way, or even the only way, to access the Web. Firefox for Android (codenamed Fennec) is an open, hackable, standards-based browser, just like the desktop Firefox.
Firefox for iOS
For more and more people mobile devices are the primary way, or even the only way, to access the Web. Firefox for iOS (codenamed Fennec like its Android counterpart) is an open, hackable, standards-based browser, just like the desktop Firefox.
Gecko is the name of the layout engine developed by the Mozilla Project. It was originally named NGLayout. Gecko's function is to read web content, such as HTML, CSS, XUL, JavaScript, and render it on the user's screen or print it. In XUL-based applications Gecko is used to render the application's user interface as well.
HTTP Cache
IME handling guide
This document explains how Gecko handles IME.
IPC Protocol Definition Language (IPDL)
IPDL, short for "IPC (Inter-process communication) Protocol Definition Language", is a Mozilla-specific language allowing C++ code to pass messages between processes or threads in an organized and secure way. All messages for multi-process plugins and tabs in Firefox are declared in the IPDL language.
JavaScript code modules
JavaScript code modules let multiple privileged JavaScript scopes share code. For example, a module could be used by Firefox itself as well as by extensions, in order to avoid code duplication.
JavaScript libraries from Mozilla projects
In addition to Firefox and other applications, Mozilla developers have created a number of useful JavaScript libraries you can use in your projects. Documentation for these libraries can be found here.
Localization at Mozilla
Localization (L10n) is the process of translating software user interfaces from one language to another and adapting it to suit a foreign culture. These resources are for anyone with an interest in the technical aspects involved in localization.
Mercurial (also known as "hg"), is the distributed version control software used for the development of Firefox, Thunderbird, and the shared Gecko core. It replaced CVS after Mozilla 1.9 was branched.
Firefox OS is an open source mobile operating system which uses Linux and Mozilla's Gecko engine to run a user interface and set of applications written entirely in HTML, CSS and JavaScript.
Mozilla Framework Based on Templates (MFBT)
The Mozilla Framework Based on Templates ("mfbt") is the central repository for macros, functions, and data structures used throughout Mozilla code, including in the JavaScript engine.
Mozilla MathML Project
The Mozilla MathML project is Mozilla's project to build and enhance MathML support within Firefox and other Mozilla-based applications. For a quick overview, see the slides for the innovation fairs at Mozilla Summit 2013.
Mozilla projects on GitHub
Although Mozilla's major, core projects are located on the Mozilla Mercurial server, such as mozilla-central, there are a number of tools, services, and so forth whose code is hosted on GitHub. This article offers a quick guide to getting started with Mozilla code on GitHub as well as a list of many of the most interesting GitHub repositories containing Mozilla project code.
Mozilla technologies
Mozilla has several technologies used as components of its projects. These are documented here.
Multiple Firefox profiles
A profile in Firefox is the collection of settings, customizations, and personalizations that a user has made in the program. You can find details about Profiles on Mozilla's end-user support site.
The articles linked to from here will help you improve performance, whether you're developing core Mozilla code or an add-on.
Mozilla Persona is a cross-browser login system for the Web, that's easy to use and easy to deploy. It works on all major browsers, and you can get started today.
The preference system makes it possible to store data for Mozilla applications using a key/value pairing system. These articles provide information about how to use the preference system.
Here you'll find links to documentation about various Mozilla projects; these are often parts of Firefox or other products, but may also be used in other projects as well.
QA: Quality assurance at Mozilla
Here you'll find articles and tools to help you gear up to join the QA team testing Firefox to ensure that each release is as good as it can be.
Redis Tips
This document is a collection of some examples and tips for using redis, the open-source data structure server.  It is intended primarily for developers, and deliberately omits some topics that will be important in any redis deployment, like security and backups.
SeaMonkey is Mozilla's all in one internet suite. These pages document SeaMonkey's MailNews component and also provide links to documentation about the MailNews backend which is also used in other projects such as Eudora/Penelope, Thunderbird, Correo, etc.
Setting up an update server
The goal of this document is to provide basic instructions on setting up your own update server.
Signing Mozilla apps for Mac OS X
Mac OS X's Gatekeeper functionality prevents users from launching applications that haven't been code-signed, in order to help keep their computers secure. Firefox and Thunderbird releases are both signed before shipping; this article describes the process.
Testing Mozilla code
Testing your code is important! Before you can even get your code committed into the source tree, you have to test it, and larger patches have to have automated tests. These articles will help you master (and continue to excel at) testing Mozilla code.
Thunderbird is Mozilla's mail/messaging application. These pages document Thunderbird and also provide links to documentation about the MailNews backend which is also used in other projects such as Eudora/Penelope, Seamonkey, Correo, etc.
Using Mozilla code in other projects
There are several ways you can use Mozilla code in your own project.
Using RAII classes in Mozilla
RAII classes are useful when two operations (e.g., Lock/Unlock, AddRef/Release, PushState/PopState) must be paired.
WebIDL bindings
The WebIDL bindings are generated at build time based on two things: the actual WebIDL file and a configuration file that lists some metadata about how the WebIDL should be reflected into Gecko-internal code.
XPIDL is an Interface Description Language used to specify XPCOM interface classes.
js-ctypes allows application and extension code to call back and forth to native code written in C. C++ support is possible through vtable pointers see Using COM from js-ctypes. For a discussion on extended C++ support see bug 505907. Other work made possible by js-ctypes is JNI, this is elaborated on in the JNI.jsm section and not the js-ctypes section due to the JSM abstracting away all of the js-ctypes. Unlike binary XPCOM components, It allows developers to ship a single binary for use with multiple versions of Firefox.
omni.ja (formerly omni.jar)
Firefox and Thunderbird achieve performance improvements by moving many of their internal parts from being standalone files or sets of JAR files into just one JAR file called omni.ja; this reduces the amount of I/O needed to load the application.  This article covers the contents of the archive and techniques for inspecting those contents.

Document Tags and Contributors

 Last updated by: Bonners,