The Servo Browser Engine
Find a file
Martin Robinson e5598590ba
layout: Add line height from preserved segment breaks in quirks mode (#31419)
In quirks mode, preserved segment breaks should add line height to
lines. This matches the behavior of WebKit and Blink, but not Gecko.

This also handles the special-case of `<br>` elements, which are
implemented with preserved segment breaks via `white-space: pre-line`.
This is an implementation detail though because `<br>` has a special
behavior if the line isn't empty -- it doesn't add any line height in
this case.
2024-02-26 17:26:41 +00:00
.cargo Preliminary Android build support (#31086) 2024-01-22 13:00:15 +00:00
.github ci: Fix nightly release action (#31420) 2024-02-23 14:55:00 +00:00
.vscode Format toml files (#30112) 2023-08-17 15:07:43 +00:00
components layout: Add line height from preserved segment breaks in quirks mode (#31419) 2024-02-26 17:26:41 +00:00
docs Initial overview of webxr initialization (#31255) 2024-02-05 08:54:55 +00:00
etc install libudev-dev required by gamepad API (#31376) 2024-02-19 12:04:38 +00:00
ports Implement non-XR Gamepad discovery and input (#31200) 2024-02-17 18:42:31 +00:00
python style: Remove dependency on servo_config (was #31409) (#31411) 2024-02-23 08:40:54 +00:00
resources <hr> elements are expected to have a default overflow:hidden (#31297) 2024-02-10 21:27:50 +00:00
support build: Add support for Visual Studio 2022 and VC143 DLLs (#31148) 2024-01-23 11:04:01 +00:00
tests layout: Add line height from preserved segment breaks in quirks mode (#31419) 2024-02-26 17:26:41 +00:00
third_party WebIDL: Use Uint8ClampedArray instead of raw JSObject in bindings (#31317) 2024-02-16 16:40:45 +00:00
.clang-format Run test-tidy on Windows 2019-11-21 09:56:39 +01:00
.flake8 Improve formatting of Python files (#30919) 2023-12-24 23:58:37 +00: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 Allow building with Nix on Linux distros other than NixOS (#31001) 2024-01-09 10:29:25 +00:00
.mailmap Update Tetsuharu OHZEKI's entry in mailmap 2019-11-15 00:46:45 +09:00
Cargo.lock Update time (#31424) 2024-02-25 17:18:35 +00:00
Cargo.toml style: Remove dependency on servo_config (was #31409) (#31411) 2024-02-23 08:40:54 +00:00
CLOBBER Add clobber mechanism 2017-05-08 16:19:56 +02:00
CONTRIBUTING.md Update branch name to main (#30877) 2023-12-16 09:32:20 +00: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 Make Android build optional on Nix (#31231) 2024-02-02 02:13:24 +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 Update README.md (#31324) 2024-02-12 22:56:41 +00:00
rust-toolchain.toml Fix crown on NixOS (#30987) 2024-01-05 02:15:16 +00:00
rustfmt.toml Strict import formatting (grouping and granularity) (#30325) 2023-09-11 19:16:54 +00:00
servo-tidy.toml Update mozangle and mozjs in order to use bindgen 0.69.4 (#31306) 2024-02-10 06:28:26 +00:00
servobuild.example Preliminary Android build support (#31086) 2024-01-22 13:00:15 +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

  • Ensure that the version showed by python --version is >= 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.

Linux

  • 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
  • Run ./mach bootstrap

Windows

  • 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)
  • Install chocolatey
  • Install Python 3.11
  • Run mach bootstrap
    • 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.

Android

  • Ensure that the following environment variables are set:
    • ANDROID_SDK_ROOT
    • ANDROID_NDK_ROOT: $ANDROID_SDK_ROOT/ndk/25.2.9519653/ ANDROID_SDK_ROOT can 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.

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

Android build

For an armv7 Android build run the following command.

./mach build --android

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.

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.18
  • gst-plugins-bad >=1.18
  • libXcursor
  • libXrandr
  • libXi
  • libxkbcommon
  • vulkan-loader
  • libegl1-mesa-dev

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