WEFT_OS/crates/weft-servo-shell/SERVO_PIN.md
Marco Allegretti 2a9f034815 feat(servo-shell): add servo-embed feature gate and embedder contract
Adds src/embedder.rs with the full Servo embedding implementation behind
#[cfg(feature = " servo-embed)]:
2026-03-11 14:52:13 +01:00

2.6 KiB
Raw Blame History

Servo Pin

Current pin

Field Value
Source https://github.com/servo/servo
Rev c242860f0ef4e7c6e60dfea29310167898e6eb38 (main, 2026-03-11)
Crate servo (package name as of 2026-03-11; previously libservo)
Feature servo-embed (optional; off by default)

Adding the Cargo dependencies

The Servo deps are not in Cargo.toml by default to avoid pulling the Servo monorepo (~1 GB) into every cargo check cycle. To activate, add the following to crates/weft-servo-shell/Cargo.toml and change the servo-embed feature line to declare dep:servo, dep:winit, and dep:softbuffer:

[features]
servo-embed = ["dep:servo", "dep:winit", "dep:softbuffer"]

[dependencies.servo]
git = "https://github.com/servo/servo"
rev = "c242860f0ef4e7c6e60dfea29310167898e6eb38"
optional = true
default-features = false

[dependencies.winit]
version = "0.30"
optional = true
features = ["wayland"]

[dependencies.softbuffer]
version = "0.4"
optional = true

Then build:

cargo build -p weft-servo-shell --features servo-embed

The first build downloads and compiles Servo and its dependencies, which takes 3060 minutes cold. Subsequent incremental builds are faster.

System dependencies

The following system packages are required when servo-embed is enabled:

  • libgles2-mesa-dev or equivalent OpenGL ES headers
  • libssl-dev
  • libdbus-1-dev
  • libudev-dev
  • libxkbcommon-dev
  • libwayland-dev

On Fedora/RHEL: mesa-libGL-devel openssl-devel dbus-devel systemd-devel libxkbcommon-devel wayland-devel

Rendering approach

Initial bringup uses SoftwareRenderingContext (CPU rasterisation) blitted to a softbuffer-backed winit window. Production rendering will move to an EGL/GL context once the Wayland surface pipeline is stable.

Known gaps at this pin

  • GAP-1: Wayland input events not forwarded to Servo (keyboard/pointer stubs)
  • GAP-2: DMA-BUF surface export not implemented (software blit only)
  • GAP-3: WebGPU adapter on Mesa may fail CTS
  • GAP-4: CSS backdrop-filter and CSS Grid have partial coverage

Update policy

Pin is reviewed monthly. To update:

  1. Check the Servo release page for new tags.
  2. Update tag in Cargo.toml and run cargo update -p servo.
  3. Confirm the compositor and shell tests still pass.
  4. Update this file with the new tag and any new or resolved gaps.