Update on marionette library conversion

Andreas Tolfsen ato at sny.no
Wed Sep 4 12:26:46 UTC 2019

I thought I’d give a brief update on the status of the Marionette
Rust library project that Nupur Baghel has worked on as part of her
Outreachy internship at Mozilla, and what work remains to be done.

The Marionette protocol consists of namespaces that groups together
commands offering different kinds of functionality.  Examples include
commands for Marionette- or application specific control, add-on
management, localisation (l10n), reftests, and WebDriver.  The scope
of Nupur’s project was to port the WebDriver namespace into a
separate library, and I’m happy to report that this work is nearly

Although not feature complete or ready for public consumption, the
new Marionette Rust library can be perused here:


The majority of the WebDriver namespace conversion work was completed
in this bug:


On this bug there are seven unlanded patches that requires rebasing
and fixing.  With those landed, the new library covers most types
and messages needed for geckodriver to implement the WebDriver
standard using Marionette.

Some work remains related to despatching actions, extension commands
(contexts, add-ons, anonymous XBL element finding, and full
screenshots), as well as many responses.

I’ve filed various bugs about this:


Finally, some work remains to move the connection handling and
message sequencing parts in to the new library so that geckodriver
can instantiate Marionette sessions without worrying about
implementation details of the protocol.  To track this work I’ve
filed this bug:


We should do a sweeping review of API naming as there are some
inconsistencies.  One of the great challenges has been to find
naming conventions that accurately represent the Marionette command
names, yet doesn’t conflict with similarly-named concepts in

Ultimately, when all this work is completed, we will have decoupled
all Marionette specific functionality from geckodriver.  This will
make it easier to utilise alternate backend protocols for implementing
WebDriver in geckodriver, such as CDP in some form.

I want to extend my thanks to those of you who have been available
for reviews and feedback throughout this project, and of course in
particular to Nupur Baghel who have conducted the majority of the
implementation work.

More information about the tools-marionette mailing list