Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project. NOTE: For details of what branches are used for what releases, see
Switch branches/tags
v1.0 shira-closed nightly-closed m4-demo-candidate-1 m2.5 bubble-tea-closed B2G_2_5_20160125_MERGEDAY B2G_2_5_20151214_MERGEDAY B2G_2_2_20151214_MERGEDAY B2G_2_2_20151029_MERGEDAY B2G_2_2_20150921_MERGEDAY B2G_2_2_20150810_MERGEDAY B2G_2_2_20150629_MERGEDAY B2G_2_2_20150511_MERGEDAY B2G_2_2_20150330_MERGEDAY B2G_2_2_20150223_MERGEDAY B2G_2_2r_20151214_MERGEDAY B2G_2_2r_20151029_MERGEDAY B2G_2_2r_20150921_MERGEDAY B2G_2_2r_20150810_MERGEDAY B2G_2_1_20150629_MERGEDAY B2G_2_1_20150511_MERGEDAY B2G_2_1_20150330_MERGEDAY B2G_2_1_20150223_MERGEDAY B2G_2_1_20150112_MERGEDAY B2G_2_1_20141013_MERGEDAY B2G_2_1_20140902_MERGEDAY B2G_2_1s_20150810_MERGEDAY B2G_2_1s_20150629_MERGEDAY B2G_2_1s_20150511_MERGEDAY B2G_2_1s_20150330_MERGEDAY B2G_2_1s_20150223_MERGEDAY B2G_2_1s_20150112_MERGEDAY B2G_2_0_20150629_MERGEDAY B2G_2_0_20150511_MERGEDAY B2G_2_0_20150330_MERGEDAY B2G_2_0_20150223_MERGEDAY B2G_2_0_20150112_MERGEDAY B2G_2_0_20141013_MERGEDAY B2G_2_0_20140902_MERGEDAY B2G_2_0_20140721_MERGEDAY B2G_2_0_20140609_MERGEDAY B2G_1_4_20150511_MERGEDAY B2G_1_4_20150330_MERGEDAY B2G_1_4_20150223_MERGEDAY B2G_1_4_20150112_MERGEDAY B2G_1_4_20141013_MERGEDAY B2G_1_4_20140902_MERGEDAY B2G_1_4_20140721_MERGEDAY B2G_1_4_20140609_MERGEDAY B2G_1_4_20140428_MERGEDAY B2G_1_4_20140317_MERGEDAY B2G_1_3_20140902_MERGEDAY B2G_1_3_20140721_MERGEDAY B2G_1_3_20140609_MERGEDAY B2G_1_3_20140428_MERGEDAY B2G_1_3_20140317_MERGEDAY B2G_1_3_20140203_MERGEDAY B2G_1_3T_20141013_MERGEDAY B2G_1_3T_20140902_MERGEDAY B2G_1_3T_20140721_MERGEDAY B2G_1_3T_20140609_MERGEDAY B2G_1_3T_20140428_MERGEDAY B2G_1_2_20140428_MERGEDAY B2G_1_2_20140317_MERGEDAY B2G_1_2_20140203_MERGEDAY B2G_1_1_20140428_MERGEDAY B2G_1_1_20140317_MERGEDAY B2G_1_1_20140203_MERGEDAY B2G_1_1_0_hd_20140428_MERGEDAY B2G_1_1_0_hd_20130530182315 B2G_1_1_0_hd_20130530182315_BASE B2G_1_0_1_20130217163900 B2G_1_0_1_20130213094222 B2G_1_0_1_20130213094222_BASE B2G_1_0_0_20130125190500 B2G_1_0_0_20130115070201
Nothing to show
Clone or download
kskarthik and fabricedesre Bug 1300279 - New init logos for B2G OS r=fabrice (#34419)
* Bug 1300279 - New init logos for B2G OS
Latest commit 975a35c Sep 21, 2016
Failed to load latest commit information.
apps Bug 1302652 - Fix typo in class used by FullscreenManager r=fabrice Sep 14, 2016
bin Bug 1222215 - Relanding disabling the retry logic since reverting thi… Jan 8, 2016
build Bug 1290161 - Merge remote-tracking branch 'origin/kanikani' into mas… Jul 28, 2016
customization Bug 1184342 - Part II, Remove keyboard_layouts.json generation from t… Feb 1, 2016
dev_apps Bug 1280376 - Disable all Gaia marionette-js tests. Replace with a si… Jul 7, 2016
disabled_apps Bug 123472 - Remove :-moz-full-screen-ancestor from gaia code R=fabrice Sep 12, 2016
distros booting to the (empty) homescreen! Feb 24, 2016
images Create gaia web page May 5, 2016
locales Bug 1222204 - Add Persian (fa) to master and 2.5 builds, r=stas Nov 12, 2015
shared Bug 1300279 - New init logos for B2G OS r=fabrice (#34419) Sep 20, 2016
test_media Bug 1214222 - Fix the dialer reference workloads. r=jhylands Nov 10, 2015
tests Bug 1290161 - Merge remote-tracking branch 'origin/kanikani' into mas… Jul 28, 2016
tools Bug 1131503 - Running csslint.js on node.js Feb 22, 2016
tv_apps Merge pull request #34377 from zbraniecki/1278358-update-formatoparts Jun 8, 2016
webapps/facebook Bug 1274928 - Facebook as an example of hosted app May 30, 2016
.editorconfig Bug 1155979 - Ensure Makefile can be indent with tabs Apr 18, 2015
.eslintrc Bug 1218725 - Add no-wildcard-postmessage plugin to eslint r=julienw Nov 27, 2015
.gitignore Bug 1184342 - Part II, Remove keyboard_layouts.json generation from t… Feb 1, 2016
.jsdocrc Bug 1015013 - JSDoc 3 parse error getter/setter with the same name in… May 23, 2014
.jshintignore Bug 1240740 - Running all app's build.js on node.js Jan 27, 2016
.jshintrc Bug 987282 - JSHint allow getter without setter globally r=julienw Mar 24, 2014 Revert "Bug 832165 - Fix using GAIA_PATH to build r=me" Mar 21, 2016 Bug 1055914 - Fix/update three links in contributing guide R=julien Mar 26, 2015
LICENSE XXX - Update license to 2015 r=self Jun 7, 2015
Makefile Bug 1304038 - MakeFile make mulet switch from pine to mozilla-central… Sep 20, 2016 Bug 1229635 - use make test-integration command for integration test,… Dec 24, 2015 Revert "Revert "Bug 1059051 - Convert Keyboard-Symbols.woff to Keyboa… Aug 27, 2014
gaia_node_modules.revision bug 1159667 - add eslint to tests r=julienw Jun 4, 2015
gulpfile.js Bug 1223651 - jsdoc with better es6 support, r=ricky Nov 11, 2015
httpd Forgot to commit changes... Mar 5, 2016
index.html Bug 1277689 - Move dead_apps to more apt disabled_apps. Jun 2, 2016
package.json New version of moz-download checks for presence of b2g-desktop, mulet… Apr 7, 2016
taskgraph.json Bug 1283578 - Remove artifact expiration from taskgraph.json r=aus Jun 30, 2016


Gaia is Mozilla's Phone UX for the Boot to Gecko (B2G) project.

Boot to Gecko aims to create a complete, standalone operating system for the open web.

You can read more about B2G here:

follow us on twitter: @Boot2Gecko

join the Gaia mailing list:

and talk to us on IRC:

#fxos on

Hacking Gaia

The Gaia/Hacking page on MDN has all the information that you need to start working on Gaia, including building and running Gaia on a compatible device or desktop computer.

Autolander (bot)

Autolander is a bot which integrates github and bugzilla workflows.

Features available:

  • Automatic pull request to bugzilla attachment linking.
  • Automatic landing, on green integration run, with a R+ from a suggested reviewer and the autoland keyword.
  • Comments in the bug with the landed commit, and marks the bug as fixed.
  • Validates pull request title and commit message formats.
  • Currently only runs a subset of the gaia CI tests which are stable on taskcluster. Ensure you have a green gaia-try run before adding the autoland keyword.
  • See more at: The Autolander guide on MDN


Unit Tests

Unit tests for an app go in apps/<APP>/test/unit/.

To run all the unit tests with B2G Desktop:

  1. Run DEBUG=1 make

  2. Run make test-agent-server &

  3. Run B2G Desktop and open the Test Agent app

  4. Run make test-agent-test

    or make test-agent-test APP=<APP> to run unit tests for a specific app

More importantly, you can use test-agent-server to watch the files on the filesystem and execute relevant tests when they change:

  1. Run DEBUG=1 make
  2. Run make test-agent-server &
  3. Run B2G Desktop and open the Test Agent app
  4. Edit files and when you save them, glance at the console with test-agent-server running

Note: If you add new files, you will need to restart test-agent-server.

As a convenience, you can also use the gaia-test script to launch the test-agent-server and open the Test Agent app in firefox:

  1. Add firefox to your $PATH or set $FIREFOX to your preferred firefox/aurora/nightly binary.
  2. Run ./bin/gaia-test to run the test-agent-server and launch firefox.
  3. Run make test-agent-test or modify files as described above.

For more details on writing tests, see:

Integration Tests

Gaia uses marionette-js-runner for ui testing. Tests need to live in apps/<some app>/test/marionette and should be named *_test.js. Gaia's marionette tests run on nodejs and you'll need nodejs>=v0.12 and npm>=v2.0 installed.

Shared code for tests lives in plugins at tests/jsmarionette/plugins or in helpers at shared/test/integration.

For more details on writing integration tests, see:

Running integration tests

make test-integration

Invoking tests for a specific app

APP=<APP> make test-integration

Invoking specific test files

TEST_FILES="/abs/path/to/some_test.js /abs/path/to/other_test.js" make test-integration
Running tests on device

You can run tests on device by plugging in your phone and adding the BUILDAPP=device to the make command:

BUILDAPP=device make test-integration

More things

  • VERBOSE=1 pipes gecko logs to your command line process for debugging.

Build System Tests

Build system has its own unit test and integration test. Both are running on Node.js

Build System Unit Tests

To run unit test locally, using following command:

$ make build-test-unit

Build System Integration Tests

To run integration test locally, using following command:

$ make build-test-integration

Invoking specific test files

Both the build unit or integration test can invoke specific test files by TEST_FILES

make build-test-unit TEST_FILES=<test file path>
make build-test-integration TEST_FILES=<test file path>

For example, we could run the keyboard_test.js build integration test in keyboard app with the below command.

make build-test-integration TEST_FILES=apps/keyboard/test/build/integration/keyboard_test.js

If you would like to run more than one test, we could do the below command.

make build-test-integration TEST_FILES="apps/keyboard/test/build/integration/keyboard_test.js apps/keyboard/test/build/integration/keyboard_layout_test.js"

Generate JSDOC

To generate API reference locally, run make docs command to generate docs. The generated per app API docs will be located in docs folder.

You could generate single app doc with this:

$ gulp jsdoc:system