This month in Servo: dark mode, keyword sizes, XPath, and more!
2025-01-10 Servo nightlies are now faster, more reliable, 20% smaller, and more compatible with real web apps.
Servo now supports dark mode (@arthmis, @lazypassion, #34532), respecting the platform dark mode in servoshell and ‘prefers-color-scheme’ (@nicoburns, #34423, stylo#93) on Windows and macOS.
CSS transitions can now be triggered properly by script (@mrobinson, #34486), and we now support ‘min-height’ and ‘max-height’ on column flex containers (@Loirooriol, @mrobinson, #34450), ‘min-content’, ‘max-content’, ‘fit-content’, and ‘stretch’ in block layout (@Loirooriol, #34641, #34568, #34695), ‘stretch’ on replaced positioned elements (@Loirooriol, #34430), as well as ‘align-self: self-start’, ‘self-end’, ‘left’, and ‘right’ on positioned elements (@taniishkaaa, @Loirooriol, #34365).
Servo can now run Discord well enough to log in and read messages, though you can’t send messages yet.
To get this working, we landed some bare-bones AbortController support (@jdm, @syvb, #34519) and a WebSocket fix (@jdm, #34634).
Try it yourself with --pref dom.svg.enabled --pref dom.intersection_observer.enabled --pref dom.abort_controller.enabled
!
We now support console.trace() (@simonwuelker, #34629), PointerEvent (@wusyong, #34437), and the clonable property on ShadowRoot (@simonwuelker, #34514).
Shadow DOM support continues to improve (@jdm, #34503), including very basic Shadow DOM layout (@mrobinson, #34701) when enabled via --pref dom.shadowdom.enabled
.
script
underwent (and continues to undergo) major rework towards being more reliable and faster to build.
We’ve landed better synchronisation for DOM tree mutations (@jdm, #34505) and continued work on splitting up the script
crate (@jdm, #34366).
We’ve moved our ReadableStream support into Servo, eliminating the maintenance burden of a downstream SpiderMonkey patch (@gterzian, @wusyong, @Taym95, #34064, #34675).
The web platform guarantees that same-origin frames and their parents can synchronously observe resizes and their effects. Many tests rely on this, and not doing this correctly made Servo’s test results much flakier than they could otherwise be. We’ve made very good progress towards fixing this (@mrobinson, #34643, #34656, #34702, #34609), with correct resizing in all cases except when a same-origin frame is in another script thread, which is rare.
We now support enough of XPath to get htmx working (@vlindhol, #34463), when enabled via --pref dom.xpath.enabled
.
Servo’s performance continues to improve, with layout caching for flex columns delivering up to 12x speedup (@Loirooriol, @mrobinson, #34461), many unnecessary reflows now eliminated (@mrobinson, #34558, #34599, #34576, #34645), reduced memory usage (@mrobinson, @Loirooriol, #34563, #34666), faster rendering for pages with animations (@mrobinson, #34489), and timers now operating without IPC (@mrobinson, #34581).
servoshell nightlies are up to 20% smaller (@atbrakhi, #34340), WebGPU is now optional at build time (@atbrakhi, #34444), and --features tracing
no longer enables --features layout-2013
(@jschwe, #34515) for further binary size savings.
You can also limit the size of several of Servo’s thread pools with --pref threadpools.fallback_worker_num
and others (@jschwe, #34478), which is especially useful on machines with many CPU cores.
We’ve started laying the groundwork for full incremental layout in our new layout engine, starting with a general layout caching mechanism (@mrobinson, @Loirooriol, #34507, #34513, #34530, #34586). This was lost in the switch to our new layout engine, and without it, every time a page changes, we have to rerun layout from scratch. As you can imagine, this is very, very expensive, and incremental layout is critical for performance on today’s highly dynamic web.
Donations
Thanks again for your generous support!
We are now receiving 4329 USD/month (+0.8% over November) in recurring donations.
With this money, we’ve been able to cover our web hosting and self-hosted CI runners for Windows, Linux, and now macOS builds (@delan, #34868), halving mach try
build times from over an hour to under 30 minutes!
Next month, we’ll be expanding our CI capacity further, all made possible thanks to your help.
Servo is also on thanks.dev, and already sixteen GitHub users that depend on Servo are sponsoring us there. If you use Servo libraries like url, html5ever, selectors, or cssparser, signing up for thanks.dev could be a good way for you (or your employer) to give back to the community.
As always, use of these funds will be decided transparently in the Technical Steering Committee. For more details, head to our Sponsorship page.