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.
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.htmlIf 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.
Prerequisites:
Servo's build system assumes that both the Android SDK & NDK are
already installed and expects the paths to be specified via the
environment variables ANDROID_SDK_ROOT and ANDROID_NDK_ROOT.
Servo also expects the following components are installed via sdkmanager:
For building:
sdkmanager install platform-tools platforms;android-33To run in emulator, also install the related components:
sdkmanager install emulator system-images;android-33;google_apis;x86Build commands:
For ARM (armv7-linux-androideabi, most phones):
./mach build --release --android
./mach package --release --androidFor x86 (typically for the emulator):
./mach build --release --target i686-linux-android
./mach package --release --target i686-linux-androidInstall the APK to the device or emulator:
./mach install --release --androidRun 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.16gst-plugins-bad>=1.16libXcursorlibXrandrlibXilibxkbcommonvulkan-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