geckodriver is written in Rust, a systems programming language from Mozilla. Crucially, it relies on the webdriver crate to provide the HTTPD and do most of the heavy lifting of marshalling the WebDriver protocol. geckodriver translates WebDriver commands, responses, and errors to the Marionette protocol, and acts as a proxy between WebDriver and Marionette.
To build geckodriver:
% ./mach build testing/geckodriver
If you use artifact builds you may build geckodriver using cargo, since mach in this case does not have a compile environment:
% cd testing/geckodriver % cargo build … Compiling geckodriver v0.21.0 (file:///code/gecko/testing/geckodriver) … Finished dev [optimized + debuginfo] target(s) in 7.83s
Because all Rust code in central shares the same cargo workspace,
the binary will be put in the
You can run your freshly built geckodriver this way:
% ./mach geckodriver -- --other --flags
See Testing for how to run tests.