The Servo Browser Engine
Find a file
Martin Robinson f4d3af296c Move *_traits and other shared types to shared
This is the start of the organization of types that are in their own
crates in order to break dependency cycles between other crates. The
idea here is that putting these packages into their own directory is the
first step toward cleaning them up. They have grown organically and it
is difficult to explain to new folks where to put new shared types. Many
of these crates contain more than traits or don't contain traits at all.

Notably, `script_traits` isn't touched because it is vendored from
Gecko. Eventually this will move to `third_party`.
2023-11-03 15:38:18 +00:00
.cargo Enforce formatting of TOML files (#30128) 2023-09-19 08:57:27 +00:00
.github ci: use ubuntu 22.04 on linux runners (#30162) 2023-11-03 05:42:44 +00:00
.vscode Format toml files (#30112) 2023-08-17 15:07:43 +00:00
components Move *_traits and other shared types to shared 2023-11-03 15:38:18 +00:00
docs fix typo in debugging.md from servo to Servo (#30644) 2023-10-30 13:53:37 +00:00
etc Remove __future__ imports that are no longer necessary (#30661) 2023-11-02 12:01:10 +00:00
ports Enable debug assertions for all builds other than official releases (#30509) 2023-10-26 08:22:14 +00:00
python Update mozjs and setuptools (#30685) 2023-11-02 16:55:12 +00:00
resources Anonymous boxes that wrap inlines should not inherit overflow (#30579) 2023-10-19 13:43:55 +00:00
support Bootstrap pkg-config and cmake on MacOS (#30497) 2023-10-05 01:12:29 +00:00
tests Move *_traits and other shared types to shared 2023-11-03 15:38:18 +00:00
third_party Vendor mozdebug and stop using distutils (#30659) 2023-10-31 09:42:14 +00:00
.clang-format Run test-tidy on Windows 2019-11-21 09:56:39 +01:00
.flake8 Standalone Flake8 config 2023-06-23 16:24:35 +02:00
.gitattributes Explicitly declare image files to be binaries in .gitattributes, so as to avoid crlf-munging 2019-07-05 09:00:56 -05:00
.gitignore Sync WPT with upstream (04-10-2023) (#30493) 2023-10-06 00:51:48 +00:00
.hgignore Add .hgignore file 2017-02-03 18:42:52 -08:00
.mailmap Update Tetsuharu OHZEKI's entry in mailmap 2019-11-15 00:46:45 +09:00
Cargo.lock Update network stack dependencies (#30612) 2023-11-02 18:41:25 +00:00
Cargo.toml Move *_traits and other shared types to shared 2023-11-03 15:38:18 +00:00
CLOBBER Add clobber mechanism 2017-05-08 16:19:56 +02:00
CONTRIBUTING.md Update link to CoC 2023-05-19 19:09:45 +02:00
dependencyci.yml Don't report smallbitvec as an error. 2017-10-16 11:38:34 -04:00
Info.plist remove bhtml 2018-02-11 08:02:39 +01:00
LICENSE Update MPL license to https (part 1) 2018-11-19 14:46:43 +01:00
mach Remove __future__ imports that are no longer necessary (#30661) 2023-11-02 12:01:10 +00:00
mach.bat Make mach.bat request Python 3 2021-05-22 18:27:10 +09:00
PULL_REQUEST_TEMPLATE.md Minor pull request template cleanup 2018-12-08 13:11:37 -08:00
README.md Bootstrap pkg-config and cmake on MacOS (#30497) 2023-10-05 01:12:29 +00:00
rust-toolchain.toml Update rust version to "nightly-2023-03-18" (#30630) 2023-11-01 13:28:26 +00:00
rustfmt.toml Strict import formatting (grouping and granularity) (#30325) 2023-09-11 19:16:54 +00:00
servo-tidy.toml Update network stack dependencies (#30612) 2023-11-02 18:41:25 +00:00
servobuild.example Enable debug assertions for all builds other than official releases (#30509) 2023-10-26 08:22:14 +00:00
taplo.toml Format toml files (#30112) 2023-08-17 15:07:43 +00:00

The Servo Parallel Browser Engine Project

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.

Build Setup

If these instructions fail or you would like to install dependencies manually, try the manual build setup.

macOS

  • Install Xcode
  • Install Homebrew
  • Run curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Run pip3 install virtualenv
  • Run ./mach bootstrap
    Note: This will install the recommended version of GStreamer globally on your system.

Linux

  • Run curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Install Python and virtualenv
    • Debian-like: Run sudo apt install python3-virtualenv python3-pip
    • Fedora: Run sudo dnf install python3 python3-virtualenv python3-pip python3-devel
    • Arch: Run sudo pacman -S --needed python python-virtualenv python-pip
    • Gentoo: Run sudo emerge dev-python/virtualenv dev-python/pip
  • Run ./mach bootstrap

Windows

  • Download and run rustup-init.exe then follow the onscreen instructions.
  • Install chocolatey
  • Run mach bootstrap
  • This will install CMake, Git, Ninja, Python and the Visual Studio 2019 Build Tools via choco in an Administrator console. It can take quite a while.
  • If you already have Visual Studio 2019 installed, this may not install all necessary components. Please follow the Visual Studio 2019 installation instructions in the manual setup.
  • Run refreshenv

See also Windows Troubleshooting Tips.

Cloning the Repo

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 servo

Building

Servo 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.

The Rust compiler

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 file.

Normal build

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.html

Release build

For 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.html

Checking for build errors, without building

If youre making changes to one crate that cause build errors in another crate, consider this instead of a full build:

./mach check

It 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 doesnt produce a binary you can run.

Building for Android target

For ARM (armv7-linux-androideabi, most phones):

./mach build --release --android
./mach package --release --android

For x86 (typically for the emulator):

./mach build --release --target i686-linux-android
./mach package --release --target i686-linux-android

Running

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

Commandline Arguments

  • -p INTERVAL turns on the profiler and dumps info to the console every INTERVAL seconds
  • -s SIZE sets the tile size for painting; defaults to 512
  • -z disables all graphical output; useful for running JS / layout tests
  • -Z help displays useful output to debug servo

Keyboard Shortcuts

  • Ctrl+L opens URL prompt (Cmd+L on Mac)
  • Ctrl+R reloads current page (Cmd+R on Mac)
  • Ctrl+- zooms out (Cmd+- on Mac)
  • Ctrl+= zooms in (Cmd+= on Mac)
  • Alt+left arrow goes backwards in the history (Cmd+left arrow on Mac)
  • Alt+right arrow goes forwards in the history (Cmd+right arrow on Mac)
  • Esc or Ctrl+Q exits Servo (Cmd+Q on Mac)

Runtime dependencies

Linux

  • GStreamer >=1.16
  • gst-plugins-bad >=1.16
  • libXcursor
  • libXrandr
  • libXi
  • libxkbcommon
  • vulkan-loader

Developing

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