Servo is a prototype web browser engine written in the Rust language. It is currently developed on 64-bit macOS, 64-bit Linux, 64-bit Windows, and Android.
Servo welcomes contribution from everyone. See
CONTRIBUTING.md and HACKING_QUICKSTART.md
for help getting started.
Visit the Servo Project page for news and guides.
If these instructions fail or you would like to install dependencies manually, try the manual build setup.
- Ensure that the version showed by
python --versionis >= 3.10: - Install Xcode
- Install Homebrew
- Run
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Run
./mach bootstrap
Note: This will install the recommended version of GStreamer globally on your system.
- Run
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Install Python (version >= 3.10):
- Debian-like: Run
sudo apt install python3-pip python3-venv - Fedora: Run
sudo dnf install python3 python3-pip python3-devel - Arch: Run
sudo pacman -S --needed python python-pip - Gentoo: Run
sudo emerge dev-python/pip
- Debian-like: Run
- Run
./mach bootstrap
- Download and run
rustup-init.exe - Make sure to select Quick install via the Visual Studio Community installer or otherwise install Visual Studio 2022.
- In the Visual Studio Installer ensure the following components are installed for Visual Studio 2022:
- Windows 10 SDK (10.0.19041.0) (
Microsoft.VisualStudio.Component.Windows10SDK.19041) - MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) (
Microsoft.VisualStudio.Component.VC.Tools.x86.x64) - C++ ATL for latest v143 build tools (x86 & x64) (
Microsoft.VisualStudio.Component.VC.ATL) - C++ MFC for latest v143 build tools (x86 & x64) (
Microsoft.VisualStudio.Component.VC.ATLMFC)
- Windows 10 SDK (10.0.19041.0) (
- Install chocolatey
- Install Python 3.11
- Run
mach bootstrap- *This will install CMake, Git, Ninja, via choco in an
- This will install CMake, Git, and Ninja via choco in an Administrator console. Allow the scripts to run and once the operation finishes, close the new console.
- Run
refreshenv
See also Windows Troubleshooting Tips.
- Ensure that the following environment variables are set:
ANDROID_SDK_ROOTANDROID_NDK_ROOT:$ANDROID_SDK_ROOT/ndk/25.2.9519653/ANDROID_SDK_ROOTcan be any directory (such as~/android-sdk). All of the Android build dependencies will be installed there.
- Install the latest version of the Android command-line
tools to
$ANDROID_SDK_ROOT/cmdline-tools/latest. - Run the following command to install the necessary components and the path t
sudo $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "build-tools;33.0.2" \ "emulator" \ "ndk;25.2.9519653" \ "platform-tools" \ "platforms;android-33" \ "system-images;android-33;google_apis;x86_64"
For information about building and running the Android build, see the Android documentation.
Your CARGO_HOME needs to point to (or be in) the same drive as your Servo repository (See #28530).
git clone https://github.com/servo/servo
cd servoServo is built with Cargo, the Rust package manager. We also use Mozilla's Mach tools to orchestrate the build and other tasks. You can call Mach like this:
On Unix systems:
./mach [command] [arguments]
On Windows Commandline:
mach.bat [command] [arguments]
The examples below will use Unix, but the same applies to Windows.
Servo's build system uses rustup.rs to automatically download a Rust compiler.
This is a specific version of Rust Nightly determined by the
rust-toolchain.toml file.
To build Servo in development mode. This is useful for development, but the resulting binary is very slow:
./mach build --dev
./mach run tests/html/about-mozilla.htmlFor benchmarking, performance testing, or real-world use.
Add the --release flag to create an optimized build:
./mach build --release
./mach run --release tests/html/about-mozilla.htmlFor an armv7 Android build run the following command.
./mach build --androidIf you’re making changes to one crate that cause build errors in another crate, consider this instead of a full build:
./mach checkIt will run cargo check, which runs the analysis phase of the compiler
(and so shows build errors if any) but skips the code generation phase.
This can be a lot faster than a full build,
though of course it doesn’t produce a binary you can run.
Run Servo with the command:
./servo [url] [arguments] # if you run with nightly build
./mach run [url] [arguments] # if you run with mach
# For example
./mach run https://www.google.com-p INTERVALturns on the profiler and dumps info to the console everyINTERVALseconds-s SIZEsets the tile size for painting; defaults to 512-zdisables all graphical output; useful for running JS / layout tests-Z helpdisplays useful output to debug servo
Ctrl+Lopens URL prompt (Cmd+Lon Mac)Ctrl+Rreloads current page (Cmd+Ron Mac)Ctrl+-zooms out (Cmd+-on Mac)Ctrl+=zooms in (Cmd+=on Mac)Alt+left arrowgoes backwards in the history (Cmd+left arrowon Mac)Alt+right arrowgoes forwards in the history (Cmd+right arrowon Mac)EscorCtrl+Qexits Servo (Cmd+Qon Mac)
GStreamer>=1.18gst-plugins-bad>=1.18libXcursorlibXrandrlibXilibxkbcommonvulkan-loader
There are lots of mach commands you can use. You can list them with ./mach --help.
The generated documentation can be found on https://doc.servo.org/servo/index.html