.
, , , , , , , , , , , , , , , )
This is another big update, so here’s an outline:
– execCommand(), Sanitizer, IndexedDB, accessibility, workers
–--host-file,--userscripts, DevTools Debugger
– about:memory, threads, layout, DOM, build times
Servo’s JS runtime, SpiderMonkey 140.10.0, had several memory safety bugs that have been fixed in Servo 0.3.0 with the update to SpiderMonkey 140.10.1 ().
For more details, see , and
We’re continuing to implement document.execCommand() for rich text editing, under
--pref dom_exec_command_enabled(, ).
This release adds support for the ‘backColor’, ‘foreColor’, ‘createLink’, ‘unlink’, ‘superscript’, ‘subscript’, and ‘removeFormat’ commands (, , ), plus partial support for the ‘insertParagraph’ command ().
We’re also working on the Sanitizer API, under
--pref dom_sanitizer_enabled.
With the feature now enabled in servoshell’s experimental mode (), this release adds support for setComments(), setDataAttributes(), allowProcessingInstruction(), removeProcessingInstruction(), and removeUnsafe() on Sanitizer (, , algorithm (, ) and several changes towards building the accessibility tree incrementally (, , , , , , , ,
Servo now requires Rust 1.88.0 or newer, up from the old MSRV of 1.86.0 ().
We run compile tests with the MSRV, but most of our testing is now done with Rust 1.95.0 ().
Breaking changes to the cookies methods in our , ::::::::
set_cookie_for_url_asynchas been removed in favour of API (,
threadpools_fallback_worker_numhas been renamed to
threadpools_webrender_workers_maxhas been renamed to API ():
You can now set options with , and check if they are enabled with
Each option is a variant of no longer has
pubfields representing each option – to migrate, replace field writes and field reads with respectively
(Breaking change) no longer accepts a
helpoption – this option only existed to support servoshell’s-Z help/--debug=helpoption, so the code implementing it has been moved to servoshell
For users and developers with --host-file= (singular), as an alternative to the HOST_FILE (singular) environment variable ().
You can now provide a directory of user scripts to run in every document with --userscripts= ().
When using the Debugger tab in the Firefox DevTools:
You can now , , ).
For developers of Servo itself, please note that , ).
We’ve also fixed build issues with --features vello (, ).
More on the web platform , ).
CryptoKey is now serializable, allowing it to be used in structuredClone() and postMessage() ().
We’ve improved JS error messages in several parts of the DOM (, , , , , ), tab navigation (), javascript: url navigation (, , , , ), assign() on Location (, , , , , ), stream() on Blob (), and ML-KEM in SubtleCrypto ().
We’ve also landed improvements to GPUSupportedLimits (), GPUTexture (), createBindGroup() on GPUDevice (), and other WebGPU features ().
We’ve fixed bugs related to <svg> with ‘Content-Security-Policy’ (, , ), ‘:hover’ (, , , , , , , ,
We’ve built a tool that will help us improve ‘about:memory’ by finding untracked allocations (, , , ).
We’ve landed a bunch of layout optimisations:
The fragment tree is now immutable for the most part, with small pockets of interior mutability where mutability is needed.
This means that most fragment tree accesses no longer have to incur the runtime cost of borrowing an , ).
Two steps in the layout process, calculating containing blocks and building the stacking context tree, require traversing the fragment tree.
This can be expensive, but we’ve now combined them into a single fragment tree traversal in most cases (, ).
Another step in the layout process, calculating scrollable overflow, used to require traversing the entire fragment tree.
We’ve effectively eliminated that traversal, by making the calculation both lazy and incremental (, , , ).
We’ve made incremental fragment layout more precise (, , ).
DOM attributes are much more efficient in this release:
When scripts write attribute values, we avoid serialising them until the attribute is read back by a script (if ever), speeding up frequent writes to inline styles by up to 25% ().
When we parse attributes in HTML or read attribute values internally, we avoid constructing , , , ).
We’ve eliminated a traversal of the whole DOM tree whenever an <iframe> is attached to the tree, which is especially noticeable when parsing documents with many <iframe> tags ().
Stylesheet locks now use ::, , ), and we now cache the font list on disk for faster startup (, , , , , , , , , , , , , ), and reduced the size of our dependency tree ().
Stability , , )
document.execCommand("delete") ()--debug-mozjs builds (, )We’ve continued our long-running effort to use the Rust type system to make certain kinds of dynamic borrow failures impossible (, , , , , , , , , , , , , , , , , , , , , , , , , ,
A special thanks to the following people for landing their first patch in Servo:
- AbdAlRahman Gad ()
- Onyeka Obi ()
- Steve Sharon Sam ()
- avis137 ()
- Xabier Rodríguez ()
- June ()
- Matt Van Horn ()
- nicole ()
- panxt8 ()
Interested in helping build a web browser?
Take a look at our
Thanks again for your generous support!
We are now receiving 7659 USD/month (+4.2% from April) in recurring donations.
This helps us cover the cost of our , and funding , and already 35 GitHub users (+2 from April) that depend on Servo are sponsoring us there.
If you use Servo libraries like , , signing up for 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 , and active proposals are tracked in .
SOCIAL SHARE CARD GENERATOR