The Servo Browser Engine

Last update: Jun 26, 2022

The Servo Parallel Browser Engine Project

Linux Build Status Changelog #228

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.

Setting up your environment

Rustup.rs

Building servo requires rustup, version 1.8.0 or more recent. If you have an older version, run rustup self update.

To install on Windows, download and run rustup-init.exe then follow the onscreen instructions.

To install on other systems, run:

curl https://sh.rustup.rs -sSf | sh

This will also download the current stable version of Rust, which Servo won’t use. To skip that step, run instead:

curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain none

See also Other installation methods

Other dependencies

Please select your operating system:

macOS

Xcode version 10.2 or above is recommended.

On macOS (Homebrew)

NOTE: run these steps after you've cloned the project locally.

cd servo 
brew bundle install --file=etc/taskcluster/macos/Brewfile
brew bundle install --file=etc/taskcluster/macos/Brewfile-build
pip install virtualenv

On Debian-based Linuxes

sudo apt install python-virtualenv python-pip
./mach bootstrap

If you are on Ubuntu 20.04 or higher you need to do the following to install the missing python2 bits:

curl https://bootstrap.pypa.io/get-pip.py -sSf -o get-pip.py
python2 get-pip.py
python2 -m pip install virtualenv
sudo apt install python-dev

If ./mach bootstrap doesn't work, file a bug, and, run the commands below:

sudo apt install git curl autoconf libx11-dev libfreetype6-dev libgl1-mesa-dri \
    libglib2.0-dev xorg-dev gperf g++ build-essential cmake libssl-dev \
    liblzma-dev libxmu6 libxmu-dev \
    libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
    libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libharfbuzz-dev ccache \
    clang libunwind-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
    libgstreamer-plugins-bad1.0-dev autoconf2.13 llvm-dev

Additionally, you'll need a local copy of GStreamer with a version later than 16.2. You can place it in support/linux/gstreamer/gst, or run ./mach bootstrap-gstreamer to set it up. On Ubuntu 20.04LTS, you can use the system GStreamer if you install the necessary packages:

sudo apt install gstreamer1.0-nice gstreamer1.0-plugins-bad

If you are using Ubuntu 16.04 or Linux Mint 18.* run export HARFBUZZ_SYS_NO_PKG_CONFIG=1 before building to avoid an error with harfbuzz.

If you get an undefined symbol error on gst_player_get_config try removing gir1.2-gst-plugins-bad-1.0 and all old versions of clang, see #22016

On Fedora

sudo dnf install python3 python3-virtualenv python3-pip python3-devel
python3 ./mach bootstrap

If python3 ./mach bootstrap doesn't work, file a bug, and, run the commands below:

sudo dnf install curl libtool gcc-c++ libXi-devel libunwind-devel \
    freetype-devel mesa-libGL-devel mesa-libEGL-devel glib2-devel libX11-devel \
    libXrandr-devel gperf fontconfig-devel cabextract ttmkfdir  expat-devel \
    rpm-build openssl-devel cmake libX11-devel libXcursor-devel \
    libXmu-devel dbus-devel ncurses-devel harfbuzz-devel \
    ccache clang clang-libs python3-devel gstreamer1-devel \
    gstreamer1-plugins-base-devel gstreamer1-plugins-bad-free-devel autoconf213

On CentOS

sudo yum install python-virtualenv python-pip
./mach bootstrap

If ./mach bootstrap doesn't work, file a bug, and, run the commands below:

sudo yum install curl libtool gcc-c++ libXi-devel freetype-devel \
    mesa-libGL-devel mesa-libEGL-devel glib2-devel libX11-devel libXrandr-devel \
    gperf fontconfig-devel cabextract ttmkfdir python expat-devel rpm-build \
    openssl-devel cmake3 libXcursor-devel libXmu-devel \
    dbus-devel ncurses-devel python34 harfbuzz-devel \
    ccache clang clang-libs llvm-toolset-7

Build inside llvm-toolset and devtoolset:

scl enable devtoolset-7 llvm-toolset-7 bash

with the following environmental variables set:

export CMAKE=cmake3
export LIBCLANG_PATH=/opt/rh/llvm-toolset-7/root/usr/lib64

On openSUSE Linux

sudo zypper install libX11-devel libexpat-devel Mesa-libEGL-devel Mesa-libGL-devel cabextract cmake \
    dbus-1-devel fontconfig-devel freetype-devel gcc-c++ git glib2-devel gperf \
    harfbuzz-devel libXcursor-devel libXi-devel libXmu-devel libXrandr-devel libopenssl-devel \
    python-pip python-virtualenv rpm-build ccache llvm-clang libclang autoconf213 gstreamer-devel \
    gstreamer-plugins-base-devel gstreamer-plugins-bad-devel

On Arch Linux

sudo pacman -S --needed base-devel git python2 python2-virtualenv python2-pip mesa cmake libxmu \
    pkg-config ttf-fira-sans harfbuzz ccache llvm clang autoconf2.13 gstreamer gstreamer-vaapi

On Gentoo Linux

sudo emerge net-misc/curl \
    media-libs/freetype media-libs/mesa dev-util/gperf \
    dev-python/virtualenv dev-python/pip dev-libs/openssl \
    media-libs/harfbuzz dev-util/ccache sys-libs/libunwind \
    x11-libs/libXmu x11-base/xorg-server sys-devel/clang \
    media-libs/gstreamer media-libs/gst-plugins-bad media-libs/gst-plugins-base

With the following environment variable set:

export LIBCLANG_PATH=$(llvm-config --prefix)/lib64

On Windows (MSVC)

  1. Install Python 2.7 for Windows (https://www.python.org/downloads/release/python-2716/). The Windows x86-64 MSI installer is fine. This is required for the build system execution and many dependencies.

You should change the installation to install the "Add python.exe to Path" feature.

You will also need to set the PYTHON2 environment variable, e.g., to 'C:\Python27\python.exe' by doing:

setx PYTHON2 "C:\Python27\python.exe" /m
  1. Install Python 3.7 for Windows (https://www.python.org/downloads/release/python-374/). The Windows x86-64 MSI installer is fine. This is required in order to build the JavaScript engine, SpiderMonkey.

You will also need to set the PYTHON3 environment variable, e.g., to 'C:\Python37\python.exe' by doing:

setx PYTHON3 "C:\Python37\python.exe" /m

The /m will set it system-wide for all future command windows.

  1. Install virtualenv.

In a normal Windows Shell (cmd.exe or "Command Prompt" from the start menu), do:

pip install virtualenv

If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.

  1. Install the most recent GStreamer MSVC packages. You need to download the two .msi files for your platform from the GStreamer website and install them. The currently recommended version is 1.16.0. i.e.:

Note that the MinGW binaries will not work, so make sure that you install the MSVC the ones.

Note that you should ensure that all components are installed from gstreamer, as we require many of the optional libraries that are not installed by default.

  1. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).

  2. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). You MUST add "Visual C++" to the list of installed components as well as the "Windows Universal C runtime." They are not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.

Note that version is hard to download online and is easier to install via Chocolatey with:

choco install -y visualstudio2017community --package-parameters="'--add Microsoft.VisualStudio.Component.Git'"
Update-SessionEnvironment #refreshing env due to Git install

#--- UWP Workload and installing Windows Template Studio ---
choco install -y visualstudio2017-workload-nativedesktop
[Optional] Install LLVM for faster link times

You may experience much faster builds on Windows by following these steps. (Related Rust issue: https://github.com/rust-lang/rust/issues/37543)

  1. Download the latest version of LLVM (https://releases.llvm.org/).
  2. Run the installer and choose to add LLVM to the system PATH.
  3. Add the following to your Cargo config (Found at %USERPROFILE%\.cargo\config). You may need to change the triple to match your environment.
[target.x86_64-pc-windows-msvc]
linker = "lld-link.exe"
Troubleshooting a Windows environment

If you encountered errors with the environment above, do the following for a workaround:

  1. Download and install Build Tools for Visual Studio 2017
  2. Install python2.7 x86-x64 and virtualenv
  3. Run mach.bat build -d.

If you have troubles with x64 type prompt as mach.bat set by default:

  1. You may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)
  2. cd to/the/path/servo
  3. python mach build -d

If you got the error Cannot run mach in a path on a case-sensitive file system on Windows:

  1. Open Command Prompt or PowerShell as administrator.
  2. Disable case-sensitive for servo path, fsutil.exe file SetCaseSensitiveInfo X:\path\to\servo disable

If you got the error DLL file api-ms-win-crt-runtime-l1-1-0.dll not found! then set the WindowsSdkDir environment variable to an appropriate Windows Kit directory containing Redist\ucrt\DLLs\x64\api-ms-win-crt-runtime-l1-1-0.dll, for example C:\Program Files (x86)\Windows Kits\10.

If you get the error thread 'main' panicked at 'Unable to find libclang: "couldn\'t find any valid shared libraries matching: [\'clang.dll\', \'libclang.dll\'], set the LIBCLANG_PATH environment variable to a path where one of these files can be found (invalid: ... invalid DLL (64-bit))])"' then rustup may have installed the 32-bit default target rather than the 64-bit one. You can find the configuration with rustup show, and set the default with rustup set default-host x86_64-pc-windows-msvc.

Cross-compilation for Android

Run ./mach bootstrap-android --build to get Android-specific tools. See wiki for details.

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.

Building

Servo is built with Cargo, the Rust package manager. We also use Mozilla's Mach tools to orchestrate the build and other tasks.

Normal build

To build Servo in development mode. This is useful for development, but the resulting binary is very slow.

git clone https://github.com/servo/servo
cd servo
./mach build --dev
./mach run tests/html/about-mozilla.html

Or on Windows MSVC, in a normal Command Prompt (cmd.exe):

git clone https://github.com/servo/servo
cd servo
mach.bat build --dev

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

Note: mach build will build both servo and libsimpleservo. To make compilation a bit faster, it's possible to only compile the servo binary: ./mach build --dev -p servo.

Checking for build errors, without building

If you’re 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 doesn’t 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)

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

GitHub

https://github.com/servo/servo
Comments
  • 1. Upgrade to SM 60

    This is the mozjs_sys smup PR. Depends on https://github.com/servo/mozjs/pull/138 and https://github.com/servo/rust-mozjs/pull/430.


    • [X] ./mach build -d does not report any errors
    • [X] ./mach test-tidy does not report any errors
    • [X] These changes fix #20585
    • [X] These changes do not require tests because the existing tests will ensure SM is still working

    This change is Reviewable

    Reviewed by asajeffrey at 2018-06-08 19:28
  • 2. Windows Nightly blockers

    The below bugs are the ones that are required to at least have a first linked nightly build of Servo on Windows.

    • [x] #11307 - Hot spinning on Windows shutdown
    • [x] #11967 - Add Windows MSI packaging and publishing of the nigthtly build
    • [x] #11969 - Add an icon to Windows
    • [x] #12231 - Upload failing due to bad s3cmd invocation
    • [x] #12523 - Windows tarball missing files
    • [x] #13257 - Very slow to load or just white screen launched from installer
    • [x] #13371 - implement font rendering on Windows
    • [x] #15255 - Windows servo UI missing elements
    • [x] #15428 - Windows nightly hangs when loading pages
    • [x] #15698 - Windows Servo renders reddit text squished
    • [x] #12937 - Keyboard input dropouts
    Reviewed by larsbergstrom at 2016-07-01 20:03
  • 3. Continue message port

    Fixes #7457. Fixes #12715. Fixes #12717. Fixes #16095. Fixes #18969.


    • [ ] ./mach build -d does not report any errors
    • [ ] ./mach test-tidy does not report any errors
    • [ ] These changes fix #___ (GitHub issue number if applicable)
    • [ ] There are tests for these changes OR
    • [ ] These changes do not require tests because ___

    This change is Reviewable

    Reviewed by gterzian at 2019-06-26 16:31
  • 4. Replace mpsc with crossbeam-channel

    Follow up on https://github.com/servo/servo/pull/19515


    Selecting over multiple channels in std::sync::mpsc is not stable and likely never will be:

    https://github.com/rust-lang/rust/issues/27800#issuecomment-260136777

    It seems the only thing keeping mpsc_select around is Servo.

    crossbeam-channel is designed specifically to replace std::sync::mpsc and fix many of its shortcomings: https://github.com/stjepang/rfcs-crossbeam/blob/channel/text/2017-11-09-channel.md

    This is to be landed together with https://github.com/servo/ipc-channel/pull/183.


    This change is Reviewable

    Reviewed by gterzian at 2018-08-02 16:10
  • 5. Replace glutin by winit + surfman 0.2

    This PR updates surfman to 0.2, and replaces glutin with winit+surfman.


    • [x] ./mach build -d does not report any errors
    • [x] ./mach test-tidy does not report any errors
    • [x] These changes do not require tests because this should all be invisible
    Reviewed by asajeffrey at 2020-02-27 16:34
  • 6. Support type=module script element

    This is still WIP but hope can be reviewed first to see if I'm on the right track. Thanks! 🙇‍♂️

    • [x] Support external module script
    • [x] Support internal module script
    • [x] Compile cyclic modules

    • [x] ./mach build -d does not report any errors
    • [x] ./mach test-tidy does not report any errors
    • [x] These changes fix #23370 (GitHub issue number if applicable)
    • [x] There are tests for these changes

    This change is Reviewable

    Reviewed by CYBAI at 2019-06-10 14:58
  • 7. make sure UWP app can run

    Fix #25718

    This includes https://github.com/servo/servo/pull/25661 with some minor tweaks (certificate file reference was missing, and its id was wrong) and a python script.

    Still need to hook that to our CI.

    Reviewed by paulrouget at 2020-02-12 15:05
  • 8. Clean-up navigation

    1. Navigation as a result of following a hyperlink should be done in a task: https://html.spec.whatwg.org/multipage/links.html#following-hyperlinks:dom-manipulation-task-source
    2. The javascript url navigation should also be done in a task: https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigating-across-documents:dom-manipulation-task-source
    3. In window.load_url, it seems there is no need to send a message to the script-thread(the entirety of load_url should instead be done in a task when appropriate), so we can just do that last part "sync" by calling a method on the script, which will send a message to the constellation(for the parallel navigation steps), or queue task(for the JS navigation), as appropriate.
    4. Separate the "normal" navigation flow from the handling of "navigate an iframe" message from constellation, since doing everything in one method as was previously done with handle_navigate, is confusing.

    • [ ] ./mach build -d does not report any errors
    • [ ] ./mach test-tidy does not report any errors
    • [ ] These changes fix #___ (GitHub issue number if applicable)
    • [ ] There are tests for these changes OR
    • [ ] These changes do not require tests because ___

    This change is Reviewable

    Reviewed by gterzian at 2019-05-12 10:49
  • 9. Kicking off a WebGL implementation

    @jdm @ecoal95 I'm working on making VR happen in the Browser and I want to bring to Servo the webVR APIs we already have in Gecko. Before anything happens we need a working implementation of WebGL (and also the fullscreen API). My implementation is very basic and probably naive (I just recently started to contribute to Servo). My patch is just a starting point:

    • It only implements clearColor and clear methods of the WebGL spec.
    • It uses the readback strategy that canvasRenderingContext2D is using (The webgl task paints stuff independently on it's own buffer and the compositor task request the pixels back to the webgl task when it needs them) I'm sure there are much better ways to handle this. Latency and FPS are critical in VR so we have to figure out the fastest way to push pixels to the screen. I've read something about layerizing the canvas but I'm still not sure what that even means :)
    • There's an included test you can try ./mach run tests/ref/webgl-context/clearcolor.html

    @ecoal95 I know you'll be working on this for the next three months. With a foundation in place we will be able to make quick progress in parallel. This is exciting!

    Review on Reviewable

    Reviewed by dmarcos at 2015-04-12 07:47
  • 10. Implement unhandledrejection event


    • [x] ./mach build -d does not report any errors
    • [x] ./mach test-tidy does not report any errors
    • [x] These changes fix #15412
    • [x] There are tests for these changes

    This change is Reviewable

    Reviewed by CYBAI at 2018-05-06 13:10
  • 11. Use surfman for managing GL surfaces

    Replaces texture sharing with surfman surface sharing.


    • [x] ./mach build -d does not report any errors
    • [x] ./mach test-tidy does not report any errors
    • [x] These changes fix #23509 and #24256
    • [x] These changes do not require tests because this is backend gfx
    Reviewed by asajeffrey at 2019-10-17 16:52
  • 12. Bump cbindgen from 0.20.0 to 0.24.3

    Bumps cbindgen from 0.20.0 to 0.24.3.

    Release notes

    Sourced from cbindgen's releases.

    v0.24.3

    • Make struct expressions correctly generated through typedefs (#768).

    v0.24.2

    • Make bitfield operators use explicit constructors.

    v0.24.1

    • Add support for unary negation (#765).
    • Make more bitfield operators constexpr (#765).

    v0.24.0

    • Basic const generic support (#759, #760 #762).
    • Suffixes on integer literals are now honored to avoid narrowing (#764).

    v0.23.0

    • Better support for constexpr. (#756)
    • constexpr is now enabled by default in C++ mode. You can use const.allow_constexpr=false to revert to previous behavior. (#756)
    • Minimum syn version no longer parses old rust code. (#754)

    v0.22.0

    • Support rename rule for union body members (#751).
    • constant: Add support for associated constant expressions (#752).
    • Fix regression in CamelCase rename rule (should be lowerCamelCase) (#750).
    • enumeration: simplify standard types in variants (#749).
    • Avoid generating and writing bindings when called recursively (#747).
    • Cython: Omit per-variant tags in unions generated for Rust enums (#748).
    • Update various dependencies.

    v0.21.0

    • Update MSRV to 1.54.0
    • Update clap to 3.1.
    • Update heck to 0.4.0
    • unraw identifiers
    • Honor documentation_length in Cython.
    • Add documentation_style to with short and full options
    • Map RawFd to Int
    • Respect remove_underscores config when prefixing name to enum
    Changelog

    Sourced from cbindgen's changelog.

    0.24.3

      * Make struct expressions correctly generated through typedefs ([#768](https://github.com/eqrion/cbindgen/issues/768)).
    

    0.24.2

      * Make bitfield operators use explicit constructors.
    

    0.24.1

      * Add support for unary negation ([#765](https://github.com/eqrion/cbindgen/issues/765)).
      * Make more bitfield operators constexpr ([#765](https://github.com/eqrion/cbindgen/issues/765)).
    

    0.24.0

      * Basic const generic support ([#759](https://github.com/eqrion/cbindgen/issues/759), [#760](https://github.com/eqrion/cbindgen/issues/760) [#762](https://github.com/eqrion/cbindgen/issues/762)).
      * Suffixes on integer literals are now honored to avoid narrowing ([#764](https://github.com/eqrion/cbindgen/issues/764)).
    

    0.23.0

      * Better support for constexpr. ([#756](https://github.com/eqrion/cbindgen/issues/756))
      * constexpr is now enabled by default in C++ mode. You can use const.allow_constexpr=false to revert to previous behavior. ([#756](https://github.com/eqrion/cbindgen/issues/756))
      * Minimum syn version no longer parses old rust code. ([#754](https://github.com/eqrion/cbindgen/issues/754))
    

    0.22.0

      * Support rename rule for union body members ([#751](https://github.com/eqrion/cbindgen/issues/751)).
      * constant: Add support for associated constant expressions ([#752](https://github.com/eqrion/cbindgen/issues/752)).
      * Fix regression in CamelCase rename rule (should be lowerCamelCase) ([#750](https://github.com/eqrion/cbindgen/issues/750)).
      * enumeration: simplify standard types in variants ([#749](https://github.com/eqrion/cbindgen/issues/749)).
      * Avoid generating and writing bindings when called recursively ([#747](https://github.com/eqrion/cbindgen/issues/747)).
      * Cython: Omit per-variant tags in unions generated for Rust enums ([#748](https://github.com/eqrion/cbindgen/issues/748)).
      * Update various dependencies.
    

    0.21.0

      * Update MSRV to 1.54.0
      * Update clap to 3.1.
      * Update heck to 0.4.0
      * unraw identifiers
      * Honor documentation_length in Cython.
      * Add documentation_style to with short and full options
      * Map RawFd to Int
      * Respect remove_underscores config when prefixing name to enum
    
    Commits
    • f43ccfc Bump version.
    • 116a18c tests: Add a test for struct constants going through typedefs.
    • fc98189 bindings: Peel through typedefs for struct constant generation.
    • 4b30c56 Rustfmt recent changes.
    • 3d06ae1 Version bump.
    • 80da604 bitflags: Be explicit in binary operators and such.
    • 9855f90 Version bump.
    • 5da3715 constant: Add support for unary negation.
    • 021d09d bitflags: Make more operations constexpr.
    • 2e2c87e Fix changelog typo.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-06-10 16:15
  • 13. Bump libz-sys from 1.1.5 to 1.1.8

    Bumps libz-sys from 1.1.5 to 1.1.8.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-05-30 16:33
  • 14. Bump rayon from 1.5.1 to 1.5.3

    Bumps rayon from 1.5.1 to 1.5.3.

    Changelog

    Sourced from rayon's changelog.

    Release rayon 1.5.3 (2022-05-13)

    • The new ParallelSliceMut::par_sort_by_cached_key is a stable sort that caches the keys for each item -- a parallel version of slice::sort_by_cached_key.

    Release rayon-core 1.9.3 (2022-05-13)

    • Fixed a use-after-free race in job notification.

    Release rayon 1.5.2 / rayon-core 1.9.2 (2022-04-13)

    • The new ParallelSlice::par_rchunks() and par_rchunks_exact() iterate slice chunks in reverse, aligned the against the end of the slice if the length is not a perfect multiple of the chunk size. The new ParallelSliceMut::par_rchunks_mut() and par_rchunks_exact_mut() are the same for mutable slices.
    • The ParallelIterator::try_* methods now support std::ops::ControlFlow and std::task::Poll items, mirroring the unstable Try implementations in the standard library.
    • The ParallelString pattern-based methods now support &[char] patterns, which match when any character in that slice is found in the string.
    • A soft limit is now enforced on the number of threads allowed in a single thread pool, respecting internal bit limits that already existed. The current maximum is publicly available from the new function max_num_threads().
    • Fixed several Stacked Borrow and provenance issues found by cargo miri.

    Contributors

    Thanks to all of the contributors for this release!

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-05-16 16:37
  • 15. Update to image 0.24.2, implement WebP support

    This PR updates image to 0.24.2 and implements WebP support. I've been watching the progress on image-rs's WebP implementation, and from what I've seen, the situation has changed from "can only decode the luma channel from lossy WebPs" to pretty much full support (with image 0.24.2 implementing support for the extended WebP format).

    Here are screenshots of it viewing the WebP page's example:

    Screenshots

    Servo viewing the main WebP gallery: A screenshot of Servo viewing the WebP Gallery Servo viewing a lossless example from WebP's Lossless and Alpha Demonstration: A screenshot of Servo viewing the lossless version of the "Transparent compass card for overlays" example from WebP's Lossless and Alpha Demonstration Servo viewing a lossy-with-alpha example from WebP's Lossless and Alpha Demonstration A screenshot of Servo viewing the lossy-with-alpha version of the "Transparent compass card for overlays" example from WebP's Lossless and Alpha Demonstration

    This also changes the package name from piston_image to simply image. It appeared to be a piece of legacy from ages ago which can be safely changed now.

    (PS: I'm still pretty new at Rust, please let me know if I have done any mistakes in the process)


    • [X] ./mach build -d does not report any errors
    • [X] ./mach test-tidy does not report any errors
    • [X] These changes fix #20045 (GitHub issue number if applicable)
    • [X] There are tests for these changes OR
    • [ ] These changes do not require tests because ___
    Reviewed by EnnuiL at 2022-05-10 22:42
  • 16. How to hack around iframe components?

    I was thinking of making a headless app with servo with the motive of making a os mockup (or possibly a internet os, as described in Wikipedia

    And to achieve low resource usage, i would like to use iframes for managing "apps/websites" instead of multiple instances. And iframes does sound better if I'm making a mockup of a app's window inside the web app itself. But the problem is, most of the websites would not allow loading in iframes (due to cors and stuff) so i would like to make a new iframe like component for my app itself, which doesn't follow cors, and not allow the same custom iframe component to be ran inside itself, to avoid other sites misusing this feature.

    Therefore, i want to know where is the code for the iframe element in this repo (sorry but i couldn't find it) and wanted to know where is it 😅.

    Reviewed by renhiyama at 2022-05-03 12:23
  • 17. Bump num-integer from 0.1.44 to 0.1.45

    Bumps num-integer from 0.1.44 to 0.1.45.

    Changelog

    Sourced from num-integer's changelog.

    Release 0.1.45 (2022-04-29)

    Contributors: @​ciphergoth, @​cuviper, @​tspiteri, @​WizardOfMenlo

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-05-02 16:18
The Bloat-Free Browser Game in Rust but in C and not in a Browser
The Bloat-Free Browser Game in Rust but in C and not in a Browser

rust-browser-game but native and rendered with SDL in C without the Browser The original idea of rust-browser-game is that the game.wasm module is com

Nov 14, 2021
Rslide - A web service that allows you to move through multiple html pages in the browser like a slide, even without focusing on the app console or the browser. Currently only supports Windows.

rslide rslide is a web service that allows you to move through multiple html pages in the browser like a slide, even without focusing on the app conso

Jan 1, 2022
Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs

localbang Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs What are "bangs"?? Bangs are a way to define where to search inside

May 9, 2022
Minecraft-esque voxel engine prototype made with the bevy game engine. Pending bevy 0.6 release to undergo a full rewrite.
Minecraft-esque voxel engine prototype made with the bevy game engine. Pending bevy 0.6 release to undergo a full rewrite.

vx_bevy A voxel engine prototype made using the Bevy game engine. Goals and features Very basic worldgen Animated chunk loading (ala cube world) Optim

Jun 18, 2022
X-Engine: A SQL Engine built from scratch in Rust.

XNGIN (pronounced "X Engine") This is a personal project to build a SQL engine from scratch. The project name is inspired by Nginx, which is a very po

May 3, 2022
Payments Engine is a simple toy payments engine

Payments Engine is a simple toy payments engine that reads a series of transactions from a CSV, updates client accounts, handles disputes and chargebacks, and then outputs the state of clients accounts as a CSV.

Feb 3, 2022
Extensible inline parser engine, the backend parsing engine for Lavendeux.

Lavendeux Parser - Extensible inline parser engine lavendeux-parser is an exensible parsing engine for mathematical expressions. It supports variable

May 10, 2022
🌲 Open the current remote repository in your browser
🌲 Open the current remote repository in your browser

gitweb Some of the flags and options are subject to change in the future. Ideas are welcome. Ideas are bulletproof (V). gitweb is a command line inter

Mar 19, 2022
High-performance browser-grade HTML5 parser

html5ever API Documentation html5ever is an HTML parser developed as part of the Servo project. It can parse and serialize HTML according to the WHATW

Jun 15, 2022
WASM wrapper of mozjpeg, ready for the browser

mozjpeg-wasm This library wraps mozjpeg-sys and exposes a few functions to perform decoding, encoding and simple transformation on JPEG images using m

May 4, 2022
🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)
🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)

DOM in Rust without a browser Hello and welcome. This library provides server-side or browserless simulation of a DOM. Example Usage use std::sync::Ar

Jun 10, 2022
Web Browser Engineering

This is a port of Web Browser Engineering series from Python to Rust done by Korean Rust User Group.

May 3, 2022
Bloat-Free Browser Game in Rust (rustc-only challenge)
Bloat-Free Browser Game in Rust (rustc-only challenge)

Bloat-Free Browser Game in Rust (rustc-only challenge) Don't blame me if this code breaks in 1 year The idea is to make a simple game in Rust as bloat

May 2, 2022
The Bloat-Free Browser Game in Rust but in C and in UEFI
 The Bloat-Free Browser Game in Rust but in C and in UEFI

rust-browser-game but in UEFI instead of browser quick start deps rust gnu-efi gcc make build process $ make running after building everything you wil

Oct 11, 2021
web browser as a language server
web browser as a language server

web-browser-lsp A toy program that implements a text-based web browser as a language server. Motivation My favorite progrmming tools are neovim, tmux

Mar 14, 2022
puppy is an example implementation of a tiny Web browser for educational purposes.
puppy is an example implementation of a tiny Web browser for educational purposes.

An example implementation of a tiny Web browser for educational purposes.

Jun 19, 2022
Play Onitama in your browser, compete with friends or lose to a bot

Play Onitama in your browser, compete with friends or lose to a bot

Jun 7, 2022
A browser app that evolves vehicles using genetic algorithms, written in Rust and Bevy
A browser app that evolves vehicles using genetic algorithms, written in Rust and Bevy

Vehicle Evolver Deluxe This is a simulation that uses AI (to be specific: genetic algorithms) to try to build better and better vehicles. The vehicles

May 23, 2022
🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)
🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)

DOM in Rust without a browser Hello and welcome. This library provides server-side or browserless simulation of a DOM. Example Usage use std::sync::Ar

Jun 10, 2022
Murasaki is a Fast, Secure, and Reliable Webkit based web browser.
Murasaki is a Fast, Secure, and Reliable Webkit based web browser.

Murasaki is a Fast, Secure, and Reliable Webkit based web browser. Table of Contents Goals Status Usage License Goals Security: Be secure, and not com

Nov 17, 2021