January in Servo: preloads, better forms, details styling, and more
Comments
January in Servo: preloads, better forms, details styling, and more!
The web works hard, but Servo contributors work harder.
Posted 2026-02-28
Servo 0.0.5 is here, bringing with it lots of improvements in web platform features.
Some highlights:
- <link rel=preload> (@TimvdLippe, @jdm, #40059)
- <style blocking> and <link blocking> (@TimvdLippe, #42096)
- <img align> (@mrobinson, #42220)
- <select disabled> (@simonwuelker, #42036)
- ‘cursor-color’ (@mrobinson, #41976)
- ‘content: <image>’ works on all elements (@andreubotella, #41480)
- ‘::details-content’ on <details> (@lukewarlow, #42107)
- ‘:open’ on <details> (@lukewarlow, #42195)
- ‘:active’ on <input type=button> (@mrobinson, #42095)
- Origin API (@WaterWhisperer, #41712)
- navigator.sendBeacon() is enabled by default (@TimvdLippe, #41694)
https_proxy,HTTPS_PROXY, andNO_PROXY(@Narfinger, #41689)
- ML-KEM, ML-DSA, and AES-OCB in Crypto (@kkoyung, #41604, #41617, #41615, #41627, #41628, #41647, #41659, #41676, #41791, #41822, #41813, #41829)
[Servo 0.0.5 showing improved appearance of buttons, text inputs, radio buttons, and checkboxes, plus new support for ‘::details-content’ and ‘:open’ selectors]
Web APIs
Servo now plays OGG media inside <audio> elements (@jdm, #41789)!
We disabled this feature many years ago due to bugs in GStreamer, our media playback engine, but those bugs have since been fixed.
We now support non-px sizes for width and height attributes in <svg> elements (@rodio, #40761).
Inactive documents will now correctly reject fullscreen mode changes (@stevennovaryo, #42068).
We’ve enabled support for the navigator.sendBeacon() by default (@TimvdLippe, #41694); the dom_navigator_sendbeacon_enabled preference has been removed.
As part of this work, we implemented the keepalive feature of the Request API (@TimvdLippe, @WaterWhisperer, #41457, #41811).
That’s not all for network-related improvements!
Quota errors from the fetchLater() API provide more details (@TimvdLippe, #41665), and fetch response body promises now reject when invalid gzip content is encountered (@arayaryoma, #39438).
Meanwhile, EventSource connections will no longer endlessly reconnect for permanent failures (@WaterWhisperer, #41651, #42137), and now use the correct ‘Last-Event-Id’ header when reconnecting (@WaterWhisperer, #42103).
Finally, Servo will create PerformanceResourceTiming entries for requests that returned unsuccessful responses (@bellau, #41804).
There has been lots of work related to navigating pages and loading iframes.
We process URL fragments more consistently when navigating via window.location (@TimvdLippe, #41805, #41834), and allow evaluating javascript: URLs when a document’s domain has been modified (@jdm, #41969).
XML documents loaded in an <iframe> no longer inherit their encoding from the parent document (@simonwuelker, #41637).
We’re also made it possible to use blob: URLs from inside ‘about:blank’ and ‘about:srcdoc’ documents (@jdm, #41966, #42104).
Finally, constructed documents (e.g. new Document()) now inherit the origin and domain of the document that created them (@TimvdLippe, #41780), and we implemented the new Origin API (@WaterWhisperer, #41712).
[...]