Servo 0.5.0 contains all of the changes we landed in July, which came out to 488 commits. For security fixes, see § Security.
DOM text selections are now visible (@mrobinson, @SimonSapin, #46698, #46864, #46742, #46889, #46126). Interactive selection is coming soon!
We’ve shipped several new web platform features:
- ‘Cache-Control: stale-while-revalidate’ (@arayaryoma, #46060)
- <path d> (@mu-mostafa98, #46558)
- <circle cx, cy, r> (@mu-mostafa98, #46558)
- <ellipse cx, cy, rx, ry> (@mu-mostafa98, #46558)
- <image x, y, width, height> (@mu-mostafa98, #46558)
- <rect x, y, width, height, rx, ry> (@mu-mostafa98, #46558)
- ‘text-decoration-thickness’ (@nicoburns, #46592)
- ‘box-decoration-break’, for the most part (@Psychpsyo, #45492)
- ‘@font-feature-values’, for the most part (@simonwuelker, #45308)
- ‘font-language-override’, for the most part (@simonwuelker, #46618)
- ‘font-variant-alternates’, for the most part (@simonwuelker, #45308)
Plus a bunch of new DOM APIs:
- Ed448, X448, and KMAC algorithms in SubtleCrypto (@kkoyung, #46402, #46141, #46180, #46583, #46606, #46622, #46334, #46376)
- ‘insertHorizontalRule’, ‘insertImage’, ‘insertText’, and ‘forwardDelete’ commands in document.execCommand() (@Psychpsyo, #46608, #46597, #46538, #46838)
- AnimationEffect (@simonwuelker, #46677)
- new Touch() (@yezhizhen, #46741)
- duplex property on Request (@Taym95, #46858)
- effect property on Animation (@simonwuelker, #46677)
- getKeyframes() and setKeyframes() on KeyframeEffect (@simonwuelker, #46118)
- id property on LargestContentfulPaint (@shubhamg13, #46828)
- read-only CSSFontFeatureValuesRule (@simonwuelker, #46728)
This is another big update, so here’s an outline:
You can help!
If you’re working on a pull request that you think might be interesting for the next monthly update, even if you’re not 100% sure, tell us about it by following the steps below:
-
You add the monthly update label to your pull request, or comment
@servo-highfive monthly update -
Highfive posts a comment asking you some questions
-
You answer those questions in a comment containing
@servo-highfive monthly update answer
Security
Real world compat
We’re interested to hear how well your favourite websites run in Servo! Report successes in this Zulip thread, and failures in our GitHub issues.
Work in progress
The upgrade to Stylo 2026-07-01 brings several changes to built-in CSS functions (@Loirooriol, #46129):
-
‘alpha()’ is now supported, under
--pref layout_css_alpha_color_function_enabled -
‘progress()’ is now supported, under
--pref layout_css_progress_function_enabled -
‘ellipse()’ values ‘closest-corner’ and ‘farthest-corner’ are no longer stable due to spec uncertainty, but they are still experimental, under
--pref layout_css_ellipse_corners_enabled -
‘attr()’ is more conformant, under
--pref layout_css_attr_enabled
WebGPU content can now enjoy better conformance and use GPUExternalTexture and importExternalTexture() on GPUDevice, under --pref dom_webgpu_enabled (@sagudev, #45873, #46178, #46286).
IndexedDB content can now use the name property on IDBIndex, under --pref dom_indexeddb_enabled (@skyz1, #45512).
document.fonts now includes a FontFace for each valid ‘@font-face’, under --pref dom_fontface_enabled (@simonwuelker, #46509, #46537).
All of the features above are enabled in servoshell’s experimental mode.
We’ve started implementing WebVTT for native subtitles and captions, enabled by default (no --pref).
While they don’t render just yet, we can now fetch each <track src>, parse the WebVTT, and expose cues via the track property on HTMLTrackElement (@TimvdLippe, #46289, #46383).
August was a big month for accessibility in Servo, under --pref accessibility_enabled.
The focus for this month has been on performance, with the accessibility tree now supporting incremental updates (@alice, @delan, #45578, #45971, #46589, #46691, #46385), requiring fewer HashMap lookups and tree walks (@alice, @delan, #45798, #46740, #46348), and allowing for faster DOM mutations (@alice, #46348, #46530).
We’ve also started working on the File and Directory Entries API, to allow users to select and upload entire directories via <input type=file> and drag-and-drop.
To that end, we now have webkitGetAsEntry() on DataTransferItem, plus minimal support for FileSystemEntry, FileSystemDirectoryEntry, and FileSystemFileEntry, under --pref dom_entries_api_enabled (@yezhizhen, #46456).
Embedding API
We’ve improved the docs for the servo crate, and for WebViewDelegate (@mukilan, #46193).
Breaking change: ServoBuilder::webxr_registry() has been removed.
Instead use the new Servo::register_webxr_registry, which is a lazy design that has allowed servoshell to halve its startup time (@Narfinger, #46494).
For users and developers
servoshell for Android now runs on Android 10+ (91% market share), not just Android 13+ (68% market share), improving adaptability and reducing waste (@jschwe, #46142, #46308). We’ve also fixed a problem with building for Android on macOS (@jschwe, #46128).
servoshell for Windows is now better behaved when run in a console window, making the command prompt wait until servoshell exits (@yezhizhen, #43010).
When using the Firefox DevTools, the Console tab now supports some basic autocomplete (@freyacodes, #46382).
More on the web platform
Inline SVG can now use web fonts defined in the containing page (@yodalee, #45979). We’re also implementing the SVG DOM, starting with stub interfaces for SVGElement, SVGCircleElement, SVGDefsElement, SVGEllipseElement, SVGLineElement, SVGLinearGradientElement, SVGPathElement, SVGPolygonElement, SVGPolylineElement, SVGRadialGradientElement, SVGStopElement, SVGRectElement, SVGSymbolElement, and SVGUseElement (@mu-mostafa98, #46558).
We’ve improved the conformance of <form> without <form action> (@kevlu93, #46860), <color> values (@Loirooriol, #46129), GamepadEvent (@log101, #46788), document.execCommand(“delete”) (@Psychpsyo, #46539), the selectorText property on CSSStyleRule (@simonwuelker, #46687), and Set Window Rect in WebDriver (@janeoa, #46475, #46477).
We’ve fixed bugs related to <iframe> (@jschwe, @jdm, #46587), <img> (@yodalee, #46892), <textarea> (@SimonSapin, @mrobinson, #46309), custom properties (@Loirooriol, #46129), ‘::before’ and ‘::after’ (@Loirooriol, #46640), ‘float’ (@Loirooriol, @mrobinson, #46407, #46500, #46505), ‘@font-face’ (@simonwuelker, #46568, #46271, #46436), ‘position: absolute’ (@simonwuelker, #46358, #46637), Blob (@jdm, #46881), IDBDatabase and IDBObjectStore and IDBIndex (@mrobinson, #46615), the adoptedStyleSheets property on ShadowRoot (@simonwuelker, #46738), delete() on FontFaceSet (@simonwuelker, #46634), moveBefore() on Element (@mrobinson, #46599), resizeTo() on Window (@janeoa, #46477), the selected property on HTMLOptionElement (@rhit-kapilaar, #46386), and the value property on HTMLSelectElement (@simonwuelker, #46230).
Garbage collection safety
Performance and stability
Text rendering is up to 10x faster for cases with the same text and different ‘font-size’ (@Loirooriol, #46129).
We’ve also reduced allocations, GC rooting steps, and other operations in many parts of Servo (@Narfinger, @mrobinson, @Gae24, @SimonSapin, @Taym95, @cychronex-labs, @yezhizhen, #45758, #46440, #46762, #46301, #46349, #46419, #46418, #46420, #46460, #46633, #46638, #46690, #46745, #46726, #46564, #46144, #46664, #46462, #46139, #46430, #46446, #46498, #46548, #46598, #46632, #46656, #46678, #46718).
We’ve fixed a crash regression with memory corruption (@mrobinson, #46316), several dynamic-borrow-related crashes (@Narfinger, @SharanRP, @Taym95, @agrawalx, @amittenak47, @sungmen, #46381, #46384, #46405, #46684, #46452, #46770, #46830, #46763), plus crashes related to:
- <area> without <area href> (@simonwuelker, #46341)
- <progress> or shadow DOM (@mrobinson, @simonwuelker, #46188)
- <table> layout (@mrobinson, #46775)
- <td rowspan> (@mrobinson, #46841)
- <svg> without <svg viewBox> (@Narfinger, @mrobinson, #46199)
- <use> in SVG (@mrobinson, @Loirooriol, #46261)
- ‘animation’ (@mrobinson, @Loirooriol, #46689)
- ‘content’ (@Loirooriol, @mrobinson, #46314)
- ‘mix-blend-mode’ (@mrobinson, #45624)
- ArrayBuffer (@jdm, #46504)
- adoptedStyleSheets on Document (@TimvdLippe, #46373)
- execCommand(
"delete") on Document (@TimvdLippe, #46265) - removing DOM nodes (@SimonSapin, #46866)
We’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey safer and more reliable (@Gae24, @Narfinger, @TimvdLippe, @jdm, @kunalmohan, @lumiscosity, @simonwuelker, #46191, #46777, #46890, #46243, #46248, #46246, #46310, #46312, #46333, #46147, #46150, #46151, #46229, #46262, #46375, #46374, #46529, #46584, #46585, #46593, #46693, #46166, #46156, #46254, #46267, #46268, #46269, #46270, #46284, #46285, #46318, #46435).
New contributors
A special thanks to the following people for landing their first patch in Servo:
- Umut Cevdet Koçak (@UMCEKO, #46256)
- Yash Agrawal (@agrawalx, #46770)
- amittenak47 (@amittenak47, #46743)
- Apoorva Pendse (@apoorvapendse, #46739)
- dDostalker (@dDostalker, #46181)
- Oisín Ó Maolchathail (@eachra-bawn, #46478)
- Kevin Lu (@kevlu93, #46860)
- Mohamed Mostafa (@mu-mostafa98, #45405)
- SeongMan Jeon (@sungmen, #46763)
- Yoda Lee (@yodalee, #45979)
Interested in helping build a web browser? Take a look at our curated list of issues that are good for new contributors!
Donations
Thanks again for your generous support! We are now receiving 7824 USD/month (+1.8% from June) in recurring donations. This helps us cover the cost of our speedy CI and benchmarking servers, one of our latest Outreachy interns, and funding maintainer work that helps more people contribute to Servo.
Servo is also on thanks.dev, and already 35 GitHub users (same as June) 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.
We now have sponsorship tiers that allow you or your organisation to donate to the Servo project with public acknowlegement of your support. If you’re interested in this kind of sponsorship, please contact us at [email protected].
Use of donations is decided transparently via the Technical Steering Committee’s public funding request process, and active proposals are tracked in servo/project#187. For more details, head to our Sponsorship page.