.
Note: the GitHub release is available now, but
We’ve shipped several new web platform features:
<select multiple> (, , , , )
‘color-mix()’ with any number of <color> values ()
‘&::before’ and ‘&::after’ in ‘::details-content’ ()
‘revert-rule’ ()
‘tab-size’ (, , , , , )
Plus a bunch of new DOM APIs:
‘selectionchange’ events on <input> and <textarea> ()
StorageManager , in experimental mode ()
activeElement on Document and ShadowRoot ()
crypto.subtle.supports() () – Servo is the first major browser engine to support this!
cellPadding , cellSpacing , and align properties on HTMLTableElement () – previously supported in HTML only
relatedTarget on ‘focus’ and ‘blur’ events ()
transferFromImageBitmap() on ImageBitmapRenderingContext ()
Servo’s support for text in Chinese , Japanese , and Korean languages has improved, with correct wrapping in the layout engine (), and CJK fonts now enabled in servoshell’s browser UI on Windows, Linux, and FreeBSD (, , ).
Navigating to a JSON file as the top-level document now renders the JSON with an interactive pretty-printer (, ,
Security , , ).
We’ve fixed a bug where localStorage and sessionStorage were usable in sandboxed <iframe> and shared with every other sandboxed <iframe>, rather than throwing SecurityError ().
We’ve fixed a bug where localStorage and sessionStorage were shared between all <iframe srcdoc> documents , rather than isolated using the origin of the containing document (, , , , ,
IndexedDB is now enabled in servoshell’s experimental mode ().
As always, embedders can enable it with (, and will allow us to have a unified on-disk format and quota management for all web platform features that persistently store data (, , , , , , , ).
We’ve made more progress on the IntersectionObserver API , under --pref dom_intersection_observer_enabled (, , , , , , , , , , , , , , , ).
This includes text runs, plus nine other non-interactive accessibility roles (, , , , , , , ).
We’ve also started implementing SharedWorker , under --pref dom_sharedworker_enabled (, , ,
servoshell for Android now has a revamped browser UI , including a new history view (), the apk is 30% smaller (, , ,
As for servoshell on desktop platforms, we’ve fixed some focus- and IME-related bugs (, ,
When using the Inspector tab in the Firefox DevTools , the Rules panel now includes declarations in ‘@layer’ rules ().
When logging expressions in the Console tab, and when hovering over symbols in the Debugger tab, you can now get more information about the contents of functions, arrays, objects, and other values (, , , , , , , , , , , ).
We’re working towards re-enabling our automated DevTools tests in CI, which should make the feature more reliable (), and we’ve landed a small build reproducibility fix too ().
For developers of Servo itself, please note that the Cargo ‘release’ profile is no longer #[cfg(debug_assertions)] (, , , which will provide an alternative to , , , ).
Keep an eye out for that or in the book to learn more.
We’ve also fixed a regression that made --debug-mozjs and MOZJS_FROM_SOURCE builds take much longer to complete on Linux when not using Nix ().
We’ve fixed building Servo with the ‘jitspew’ feature in mozjs, allowing you to set IONFLAGS to enable JIT logging ().
We’ve also fixed build issues on Windows and FreeBSD (, ).
Embedding API package follows and , , , , , ::, ::, ::play_gamepad_haptic_effect and stop_gamepad_haptic_effect have been removed (), but they have not worked since February 2026 – use ::, , ::, :: was not exposed to the public API, but we’ve fixed that now ().
You can now clear session cookies without clearing ::, :: and , we now include a in the , ::, ::::, ).
We’ve improved our API docs for , , , , and servoshell’s , , , , ).
We’ve also improved our API docs for , , , and ,
Tab navigation now works across <iframe> boundaries (), and Ctrl +Backspace (or ⌥ ⌫ ) now deletes a whole word in input fields ().
Tab characters are now rendered correctly in <pre> (and other elements with ‘white-space: pre’ ), with proper tab stops (, , , , , , , , , , , , , , ), focus and tab navigation (, , ), form submission (), JS modules (, , , , , , , , , , , , , , , ), texImage3D() on WebGL2RenderingContext (), environmentBlendMode on XRSession (), mark() and measure() on Performance (, , ), and PerformanceResourceTiming ().
We’ve fixed bugs related to console logging (), ‘animation’ (), ‘box-shadow’ (, , , , , , , , , , , , ).
Performance and stability , ), and we’ve halved the time it takes to load , , , , ).
Like most browser engines, Servo is a multi-threaded (and sometimes multi-process) system requiring a great deal of IPC messages to keep everything connected.
, , ), and fixed a memory leak when deleting <video controls> or <audio controls> ().
Our about:memory page is more accurate now too, with new tracking of libc memory allocations on macOS, improved tracking of libc memory allocations on Linux (), and more accurate tracking of PathBuf and types in tokio, http, data_url, and urlpattern ().
Less memory usage isn’t always better in browser engines though, because there are many kinds of caches and other optimisations we can do to make browsing the web faster, at the expense of increased memory usage.
For example, we can greatly speed up prototype checks for DOM objects by storing a number in each object that identifies the concrete type, at the expense of making each DOM object 64 bits larger ().
Layout can now reuse fragments in later reflows, in many cases that involve block layout or ‘position: absolute’ (, , , , , , , , , , , , , , , , #44050)
in console.log() ()
in getData() on DataTransfer ()
in remove() on Element ()
in replaceWith() on Element ()
in --debug-mozjs builds (, )
in flex and grid layout (, )
in layout queries like offsetHeight ()
in the devtools Debugger tab, when stepping and when inspecting nested values (, )
when removing <colgroup> from the DOM ()
when running garbage collection ()
when running servoshell with a , , , )
when , , , .
But when DOM objects are being destroyed, those references can become invalid for a brief moment, depending on the order the GC finalizers run in.
This can be unsound if those references are accessed, which is a very easy mistake to make if the type has an impl Drop.
To help prevent that class of bug, we’re reworking our DOM types so that none of them have #[dom_struct] and impl Drop at the same time (, ).
We’ve improved our static analysis for GC rooting (), and we’ve continued our long-running effort to use the Rust type system to make certain kinds of dynamic borrow failures impossible (, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ).
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