.
()
Plus a bunch of new DOM APIs:
- SharedWorker ()
- console.dir() ()
- customElementRegistry on Document and ShadowRoot ()
- initialize() on CustomElementRegistry (, , )
- textStream() on Request, Response, and Blob (, , , , ,
Servo is steadily becoming a bigger and busier project every month, and by June 2026, we’ve been reading through over four times the commits as we did when we started in September 2023.
, it’s now easier than ever for you to help us answer those questions, using the Servo Highfive bot!
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
monthly update answer
Security , , , .
Several more security bugs in Servo’s JS runtime have been fixed in Servo 0.4.0 with the update to SpiderMonkey 140.12.0 ().
The exact CVEs that apply to us are not yet known, but for more details, see , – for more details, see ().
We’ve fixed an HTML injection bug (XSS) in file:/// directory listings, which affected file names containing
</script>().
Real world compat , and many websites have become a lot more readable thanks to our improved handling of variable fonts (), including Zulip ().
v0.3.0
v0.4.0


)
v0.3.0
v0.4.0


Speedtest () and Cash Converters () and OpenStreetMap (
Google Photos (
Cash Converters (
Google Maps (
OpenStreetMap (, and failures
We’re implementing the more powerful version of ‘attr()’ that can be used anywhere, not just in ‘content’, under
--pref layout_css_attr_enabled(, , , , , , , , .
We’ve made more progress towards accessibility support, under
--pref accessibility_enabled(, , , ), one of the most long-awaited features of any web browser.
Stay tuned!
We’ve also started working on Web Animations, under
--pref dom_web_animations_enabled(, , , so it has generally not been possible to embed Servo in another application without building Servo from source.
To make it possible, we’ve started designing a wrapper C API that will let you consume Servo as a prebuilt shared library using the stable and ubiquitous C ABI ().
Eventually the idea is that we’ll create a wrapper Rust API around that wrapper C API, so you can have both the ergonomics of Rust and the build simplicity of C.
Embedding API :
- ()
Breaking changes:
- , , ).
For users and developers , , , , , , , , )
When using the Firefox DevTools:
in the Console tab, uncaught exceptions are reported correctly ()
in the Console and Debugger tabs, you can now inspect the elements of nested arrays and the entries of Map objects (, )
in the Debugger tab, the Scopes panel now shows any ‘(uninitialized)’ variables, the value of
this, and the global scope (, )
We’ve fixed some build issues on riscv32, riscv64, and arm64 (, ), and modernised servoshell for Android to use Compose UI and Kotlin (, , , , , , , , , , , , , in a single command (), rather than having to run
mach test-wpt --log-raw <path>followed bymach update-wpt <path>
More on the web platform event listeners ().
Note that like in Firefox, ‘wheel’ events are passive by default.
‘dotted’, ‘dashed’, and ‘wavy’ text decorations are now continuous across element boundaries ().
We’ve improved the conformance of <dialog> (, ), <iframe sandbox> (), <input minlength> and <input maxlength> (), CSS gradients (), ‘font-style’ and ‘unicode-range’ in ‘, , ), HTMLInputElement (), IntersectionObserver (, ), new Response() (), URL.createObjectURL() and URL.revokeObjectURL() (, , ).
We’ve fixed bugs related to <input hidden> (), ‘animation-delay’ (), ‘clip-path’ (, , ), ‘width’ and ‘height’ (), ‘box-shadow: inset’ (), ‘animationiteration’ events (), ‘click’ events (), ‘load’ events (), ‘error’ events in Worker global scopes (), and document.getElementById() ().
Garbage collection safety to store many of our DOM types in other DOM types, enforcing Rust’s “aliasing xor mutability” rule at runtime by panicking if the rule is violated.
But when garbage collection happens, we need to , call to prove that GC can not occur by passing a NoGC marker value.
We can then require that a &NoGC must be borrowed from a &JSContext (which blocks GC) and not a &mut JSContext (which allows GC), taking advantage of how Rust references work without needing any custom static analysis.
We have a large codebase that needs to be migrated in parts, so for now we’ve created the new method , , rather than creating an owned JSContext on the spot.
This continues our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey safer and more reliable (, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
NoGC was designed to prevent dynamic borrow failures, but it also enables some performance optimisations!
If we can prove that garbage collection is impossible in some part of Servo, we can often avoid rooting JavaScript objects when interacting with them within that region of code.
This has allowed us to reduce overheads by over 1% in the layout process and in HTMLCollection (, , , ).
We’ve fixed some nasty memory leaks when reloading and in 2D canvases (, , ).
Speaking of which, 2D canvases now use up to 23% less power (), and we now avoid rasterising the same SVG more than once (, , ).
On top of that, we’ve improved incremental layout (, , , ).
We’ve also reduced allocations, copies, GC rooting steps, and other operations in many parts of Servo (, , , , , ).
For several months, Frédéric ( for Servo bugs, and thanks to his work we’ve fixed sixteen (16) crash bugs in June, affecting <iframe>, <slot>, <link onerror>, ‘animation’, ‘clip-path’, ‘content’, ‘rotate’, ‘transition’, ‘transform-style’, ‘display: contents’, ‘overflow: clip’, CSSKeyframesRule, FontFace, stop() on Window, document.elementFromPoint(), and the DOM tree (, , , , , , , , , , ).
We’ve also fixed crash bugs related to IPC failures, HTMLInputElement, Range, the DevTools Debugger tab, and when servoshell is built with --features native-bluetooth (, , , , ).
New contributors , , , , , , , , , , , , , , , , , , , , , of issues that are good for new contributors!
Donations , one of our latest that helps more people contribute to Servo.
Servo is also on , , or could be a good way for you (or your employer) to give back to the community.
We now have , and active proposals are tracked in .
SOCIAL SHARE CARD GENERATOR