<?xml version="1.0" encoding="utf-8"?>
<feed xml:base="https://servo.org" xmlns="http://www.w3.org/2005/Atom">
  <title>Servo Blog</title>
  <subtitle>All the entries in the Servo blog.</subtitle>
  <link href="https://servo.org/blog/feed.xml" rel="self"/>
  <link href="https://servo.org"/>
  <updated>2026-04-13T00:00:00Z</updated>
  <id>https://servo.org</id>
  <author>
    <name>Servo Team</name>
    <email>info@servo.org</email>
  </author>
  <entry>
    <title>Servo is now available on crates.io</title>
    <link href="https://servo.org/twismar/blog/2026/04/13/servo-0.1.0-release/"/>
    <updated>2026-04-13T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2026/04/13/servo-0.1.0-release/</id>
    <content xml:lang="en" type="html">&lt;p&gt;Today the Servo team has released v0.1.0 of the servo crate.
This is our &lt;strong&gt;first &lt;a href=&quot;https://crates.io/crates/servo&quot;&gt;crates.io release&lt;/a&gt;&lt;/strong&gt; of the &lt;code&gt;servo&lt;/code&gt; crate that allows Servo to be used as a library.&lt;/p&gt;
&lt;p&gt;We currently do not have any plans of publishing our demo browser servoshell to &lt;a href=&quot;http://crates.io/&quot;&gt;crates.io&lt;/a&gt;.
In the 5 releases since our initial GitHub release in October 2025, our release process has matured, with the main “bottleneck” now being the human-written monthly blog post.
Since we’re quite excited about this release, we decided to not wait for the monthly blog post to be finished, but promise to deliver the monthly update in the coming weeks.&lt;/p&gt;
&lt;p&gt;As you can see from the version number, this release is not a 1.0 release. In fact, we still haven’t finished discussing what 1.0 means for Servo.
Nevertheless, the increased version number reflects our growing confidence in &lt;strong&gt;&lt;a href=&quot;https://docs.rs/Servo&quot;&gt;Servo’s embedding API&lt;/a&gt;&lt;/strong&gt; and its ability to meet some users’ needs.&lt;/p&gt;
&lt;p&gt;In the meantime we also decided to offer a long-term support (LTS) version of Servo, since breaking changes in the regular monthly releases are expected and some embedders might prefer doing major upgrades on a scheduled half-yearly basis while still receiving security updates and (hopefully!) some migration guides.
For more details on the LTS release, see the respective &lt;a href=&quot;https://book.servo.org/embedding/lts-release.html&quot;&gt;section in the Servo book&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>February in Servo: faster layout, pause and resume scripts, and more!</title>
    <link href="https://servo.org/twismar/blog/2026/03/31/february-in-servo/"/>
    <updated>2026-03-31T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2026/03/31/february-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.0.6&quot;&gt;&lt;strong&gt;Servo 0.0.6&lt;/strong&gt;&lt;/a&gt; includes some exciting new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;button command&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;button commandfor&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41237&quot;&gt;#41237&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘:modal’&lt;/strong&gt; selectors on &lt;strong&gt;&amp;lt;dialog&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42201&quot;&gt;#42201&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@property’&lt;/strong&gt; rules (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42136&quot;&gt;#42136&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42858&quot;&gt;#42858&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘alignment-baseline’&lt;/strong&gt; and &lt;strong&gt;‘baseline-shift’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42361&quot;&gt;#42361&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘Content-Security-Policy: base-uri’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42272&quot;&gt;#42272&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;partial support for &lt;strong&gt;&amp;lt;iframe loading=lazy&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41959&quot;&gt;#41959&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;partial support for &lt;strong&gt;‘transform-style: preserve-3d’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42755&quot;&gt;#42755&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plus a bunch of new DOM APIs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;most of the &lt;a href=&quot;https://w3c.github.io/pointerevents/&quot;&gt;&lt;strong&gt;Pointer Events&lt;/strong&gt;&lt;/a&gt; API (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41290&quot;&gt;#41290&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;UserActivation&lt;/strong&gt; API (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42060&quot;&gt;#42060&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;import.meta.resolve()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42506&quot;&gt;#42506&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;integrity&lt;/strong&gt; in &lt;strong&gt;&amp;lt;script type=importmap&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42604&quot;&gt;#42604&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;formData()&lt;/strong&gt; method on &lt;strong&gt;Request&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42041&quot;&gt;#42041&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;alpha&lt;/strong&gt; property on &lt;strong&gt;HTMLInputElement&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42293&quot;&gt;#42293&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tabIndex&lt;/strong&gt; on &lt;strong&gt;HTMLElement&lt;/strong&gt; and &lt;strong&gt;SVGElement&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42913&quot;&gt;#42913&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fullscreenElement&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; and &lt;strong&gt;ShadowRoot&lt;/strong&gt; (&lt;a href=&quot;https://github.com/onsah&quot;&gt;@onsah&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42401&quot;&gt;#42401&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;toJSON()&lt;/strong&gt; on &lt;strong&gt;PerformancePaintTiming&lt;/strong&gt; (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42396&quot;&gt;#42396&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;navigator.pdfViewerEnabled&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42277&quot;&gt;#42277&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;keyPath&lt;/strong&gt; on &lt;strong&gt;IDBIndex&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42431&quot;&gt;#42431&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;createIndex()&lt;/strong&gt;, &lt;strong&gt;deleteIndex()&lt;/strong&gt;, and &lt;strong&gt;index()&lt;/strong&gt; on &lt;strong&gt;IDBObjectStore&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/bulltickr&quot;&gt;@bulltickr&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38840&quot;&gt;#38840&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42440&quot;&gt;#42440&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42443&quot;&gt;#42443&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twismar/img/blog/2026-03-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2026-03-diffie.png&quot; alt=&quot;Servo 0.0.6 showing ‘transform-style: preserve-3d’, ‘vertical-align’ shorthand with ‘baseline-shift’, objects being previewed in DevTools when passed to console.log(), pausing script execution in DevTools, and opening a modal `&lt;dialog&gt;` with `&lt;button command&gt;`&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;This is a &lt;em&gt;big&lt;/em&gt; update, so here’s an outline:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#work-in-progress&quot;&gt;&lt;strong&gt;Work in progress&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– accessibility, execCommand()&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#developer-tools&quot;&gt;&lt;strong&gt;Developer tools&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– localhost only by default, Inspector, Console, Debugger&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#servoshell&quot;&gt;&lt;strong&gt;servoshell&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– servo:config, F5 to reload&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#embedding-api&quot;&gt;&lt;strong&gt;Embedding API&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– offline builds, user stylesheets, context menus, gamepad API&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#more-on-the-web-platform&quot;&gt;&lt;strong&gt;More on the web platform&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– font fallback, cookies, IndexedDB, First and Largest Contentful Paint&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#performance-and-stability&quot;&gt;&lt;strong&gt;Performance and stability&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– about:memory, incremental layout, shared memory&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#bug-fixes&quot;&gt;&lt;strong&gt;Bug fixes&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– Windows arm64, layout, DOM events, shadow DOM&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#donations&quot;&gt;&lt;strong&gt;Donations&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– how you can help Servo flourish&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;work-in-progress&quot; tabindex=&quot;-1&quot;&gt;Work in progress &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#work-in-progress&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ve started working on &lt;strong&gt;accessibility support for web content&lt;/strong&gt; (&lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42333&quot;&gt;#42333&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42402&quot;&gt;#42402&lt;/a&gt;), gated by a pref (&lt;code&gt;--pref accessibility_enabled&lt;/code&gt;).
Each webview will be able to expose its own accessibility tree, which the embedder can then integrate into its own accessibility tree.
As part of this work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://accesskit.dev/&quot;&gt;&lt;strong&gt;AccessKit&lt;/strong&gt;&lt;/a&gt; now supports &lt;strong&gt;combining accessibility trees&lt;/strong&gt; with its new “subtree” feature (&lt;a href=&quot;https://github.com/DataTriny&quot;&gt;@DataTriny&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/AccessKit/accesskit/pull/655&quot;&gt;AccessKit/accesskit#655&lt;/a&gt;, &lt;a href=&quot;https://github.com/AccessKit/accesskit/pull/641&quot;&gt;AccessKit/accesskit#641&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.egui.rs/&quot;&gt;&lt;strong&gt;egui&lt;/strong&gt;&lt;/a&gt; has been migrated to the new AccessKit API (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/lucasmerlin&quot;&gt;@lucasmerlin&lt;/a&gt;, &lt;a href=&quot;https://github.com/DataTriny&quot;&gt;@DataTriny&lt;/a&gt;, &lt;a href=&quot;https://github.com/emilk/egui/pull/7850&quot;&gt;emilk/egui#7850&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we added a &lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;&lt;code&gt;Servo&lt;/code&gt;&lt;/a&gt; API for activating accessibility features (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42336&quot;&gt;#42336&lt;/a&gt;), although this has since become a &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;WebView&lt;/code&gt;&lt;/a&gt; API&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve started implementing &lt;strong&gt;document.execCommand()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42621&quot;&gt;#42621&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42626&quot;&gt;#42626&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42750&quot;&gt;#42750&lt;/a&gt;), gated by a pref (&lt;code&gt;--pref dom_exec_command_enabled&lt;/code&gt;).
This feature is also &lt;strong&gt;enabled in experimental mode&lt;/strong&gt;, and together with &lt;strong&gt;contenteditable&lt;/strong&gt;, it’s critical for rich text editing on the web.
The work done in February includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;document.queryCommandEnabled()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42634&quot;&gt;#42634&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;document.queryCommandSupported()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42731&quot;&gt;#42731&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;document.queryCommandIndeterm()&lt;/strong&gt;, &lt;strong&gt;queryCommandState()&lt;/strong&gt;, and &lt;strong&gt;queryCommandValue()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42748&quot;&gt;#42748&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;a href=&quot;https://w3c.github.io/editing/docs/execCommand/#canonicalize-whitespace&quot;&gt;&lt;strong&gt;canonicalize whitespace&lt;/strong&gt;&lt;/a&gt; algorithm – this is used by the ‘delete’, ‘forwardDelete’, and ‘insertText’ commands (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42704&quot;&gt;#42704&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;contentEditable&lt;/strong&gt; on &lt;strong&gt;HTMLElement&lt;/strong&gt; – for execCommand() only, excluding any support for interactive editing (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42633&quot;&gt;#42633&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42734&quot;&gt;#42734&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;developer-tools&quot; tabindex=&quot;-1&quot;&gt;Developer tools &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#developer-tools&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://book.servo.org/contributing/devtools.html&quot;&gt;&lt;strong&gt;DevTools&lt;/strong&gt;&lt;/a&gt; has seen some big improvements in February!&lt;/p&gt;
&lt;p&gt;When enabled in servoshell, the DevTools server is more secure by default, listening only on localhost when only a port number is specified (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42502&quot;&gt;#42502&lt;/a&gt;).
You can open the port for remote debugging by passing a full &lt;a href=&quot;https://doc.rust-lang.org/std/net/enum.SocketAddr.html&quot;&gt;SocketAddr&lt;/a&gt;, such as &lt;code&gt;--devtools=[::]:6080&lt;/code&gt; or &lt;code&gt;--devtools=0.0.0.0:6080&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;Inspector&lt;/strong&gt; tab, you can now &lt;strong&gt;edit DOM attributes&lt;/strong&gt;, and the DOM tree updates when attributes change (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42601&quot;&gt;#42601&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42785&quot;&gt;#42785&lt;/a&gt;).
You can now list the event type and phase of &lt;strong&gt;event listeners&lt;/strong&gt; attached to a DOM node as well (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42355&quot;&gt;#42355&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;Console&lt;/strong&gt; tab, &lt;strong&gt;objects can now be previewed&lt;/strong&gt; when passed to console.log() and friends (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42296&quot;&gt;#42296&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42510&quot;&gt;#42510&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42752&quot;&gt;#42752&lt;/a&gt;), and boolean values are now syntax highlighted (&lt;a href=&quot;https://github.com/pralkarz&quot;&gt;@pralkarz&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42513&quot;&gt;#42513&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;Debugger&lt;/strong&gt; tab, you can now &lt;strong&gt;pause and resume&lt;/strong&gt; script execution, both manually and when breakpoints are hit (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42599&quot;&gt;#42599&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42580&quot;&gt;#42580&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42874&quot;&gt;#42874&lt;/a&gt;).
We’ve also started working on other debugger features (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42306&quot;&gt;#42306&lt;/a&gt;), including stepping execution (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42844&quot;&gt;#42844&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42878&quot;&gt;#42878&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42906&quot;&gt;#42906&lt;/a&gt;), so once again stay tuned!&lt;/p&gt;
&lt;figure&gt;
    &lt;video src=&quot;https://servo.org/twismar/img/blog/2026-03-devtools-debugger.mp4&quot; autoplay=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot;&gt;Servo 0.0.6 showing DevTools debugger setting breakpoints, pausing on those breakpoints, and resuming script execution&lt;/video&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;servoshell&quot; tabindex=&quot;-1&quot;&gt;servoshell &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#servoshell&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Back in August, we added a &lt;strong&gt;servo:preferences&lt;/strong&gt; page to servoshell that allows you to set some of Servo’s &lt;em&gt;most common&lt;/em&gt; preferences at runtime (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38159&quot;&gt;#38159&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twismar/img/blog/2026-03-preferences-page.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2026-03-preferences-page.png&quot; alt=&quot;Servo 0.0.6 showing the ‘servo:preferences’ page, with controls for experimental mode, disabling the HTTP cache, and setting the ‘User-Agent’ header&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;servoshell now has a &lt;strong&gt;servo:config&lt;/strong&gt; page (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40324&quot;&gt;#40324&lt;/a&gt;), allowing you to set &lt;em&gt;any&lt;/em&gt; preference, even internal ones.
Note that preference changes are not yet persistent, and not all prefs take effect when changed at runtime.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twismar/img/blog/2026-03-config-page.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2026-03-config-page.png&quot; alt=&quot;Servo 0.0.6 showing the ‘servo:config’ page, with a search field and a list of preferences, some of which are in bold since they have been changed from their default values&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;You can now &lt;strong&gt;press F5&lt;/strong&gt; to &lt;strong&gt;reload the page&lt;/strong&gt; in servoshell (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42538&quot;&gt;#42538&lt;/a&gt;), in addition to pressing Ctrl+R or ⌘R.&lt;/p&gt;
&lt;p&gt;We’ve fixed a regression where the caret stopped being visible in the location bar (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42470&quot;&gt;#42470&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;embedding-api&quot; tabindex=&quot;-1&quot;&gt;Embedding API &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#embedding-api&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo is now easier to &lt;strong&gt;build offline&lt;/strong&gt;, using the complete source tarball included in each release (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42852&quot;&gt;#42852&lt;/a&gt;).
Go to a release on GitHub, then download &lt;code&gt;servo-[version]-src-vendored.tar.gz&lt;/code&gt; to get started.&lt;/p&gt;
&lt;p&gt;You can now &lt;strong&gt;add and remove user stylesheets&lt;/strong&gt; with &lt;a href=&quot;https://doc.servo.org/servo/struct.UserContentManager.html&quot;&gt;&lt;code&gt;User­Content­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.UserContentManager.html#method.add_stylesheet&quot;&gt;&lt;code&gt;add­_stylesheet&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.UserContentManager.html#method.remove_stylesheet&quot;&gt;&lt;code&gt;remove­_stylesheet&lt;/code&gt;&lt;/a&gt;, and &lt;strong&gt;remove user scripts&lt;/strong&gt; with &lt;a href=&quot;https://doc.servo.org/servo/struct.UserContentManager.html&quot;&gt;&lt;code&gt;User­Content­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.UserContentManager.html#method.remove_script&quot;&gt;&lt;code&gt;remove­_script&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42288&quot;&gt;#42288&lt;/a&gt;).
Previously user stylesheets were only configurable via servoshell’s &lt;code&gt;--user-stylesheet&lt;/code&gt; option.&lt;/p&gt;
&lt;aside class=&quot;_note&quot;&gt;
&lt;p&gt;&lt;strong&gt;User stylesheets&lt;/strong&gt; work a bit differently to &lt;strong&gt;userstyles&lt;/strong&gt;, since they &lt;a href=&quot;https://drafts.csswg.org/css-cascade/#cascading&quot;&gt;cascade&lt;/a&gt; via the &lt;a href=&quot;https://drafts.csswg.org/css-cascade/#cascade-origin-user&quot;&gt;user origin&lt;/a&gt;, not the &lt;a href=&quot;https://drafts.csswg.org/css-cascade/#cascade-origin-author&quot;&gt;author origin&lt;/a&gt;. For more details about the tradeoffs, check out &lt;a href=&quot;https://www.youtube.com/watch?v=xLFQejlPf6U&quot;&gt;&lt;em&gt;Customising the web: browsers as user agents&lt;/em&gt;&lt;/a&gt; (&lt;a href=&quot;https://www.azabani.com/talks/2023-11-10-customising-the-web/&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;Before opening any &lt;a href=&quot;https://doc.servo.org/servo/enum.EmbedderControl.html#variant.ContextMenu&quot;&gt;&lt;strong&gt;context menus&lt;/strong&gt;&lt;/a&gt; on behalf of web content, Servo now closes any context menus that were opened by web content (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42487&quot;&gt;#42487&lt;/a&gt;), to avoid UI problems on some platforms.
This is done by calling &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;&lt;code&gt;WebView­Delegate&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.hide_embedder_control&quot;&gt;&lt;code&gt;hide­_embedder­_control&lt;/code&gt;&lt;/a&gt; before calling &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.show_embedder_control&quot;&gt;&lt;code&gt;show­_embedder­_control&lt;/code&gt;&lt;/a&gt; in those cases.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/enum.EmbedderControl.html#variant.InputMethod&quot;&gt;&lt;strong&gt;Input method events&lt;/strong&gt;&lt;/a&gt; from web content now indicate whether or not the virtual keyboard should be shown (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42467&quot;&gt;#42467&lt;/a&gt;), with the new &lt;a href=&quot;https://doc.servo.org/servo/struct.InputMethodControl.html&quot;&gt;&lt;code&gt;Input­Method­Control&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.InputMethodControl.html#method.allow_virtual_keyboard&quot;&gt;&lt;code&gt;allow­_virtual­_keyboard&lt;/code&gt;&lt;/a&gt; method.
Generally the virtual keyboard should only be shown when the page has &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Glossary/Sticky_activation&quot;&gt;sticky activation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’re reworking our &lt;strong&gt;gamepad API&lt;/strong&gt;, with &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;&lt;code&gt;WebView­Delegate&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;play­_gamepad­_haptic­_effect&lt;/code&gt; and &lt;code&gt;stop­_gamepad­_haptic­_effect&lt;/code&gt; being replaced by a new API that (as of the end of February at least) is known as &lt;code&gt;GamepadProvider&lt;/code&gt; (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41568&quot;&gt;#41568&lt;/a&gt;).
The old methods are no longer called (&lt;a href=&quot;https://github.com/servo/servo/issues/43743&quot;&gt;#43743&lt;/a&gt;), and may be removed at some point.&lt;/p&gt;
&lt;p&gt;We now have better diagnostic output when we fail to create an OpenGL context (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42873&quot;&gt;#42873&lt;/a&gt;), including when the OpenGL versions supported by the device are too old.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;&lt;code&gt;Servo&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;constellation_sender&lt;/code&gt; was removed (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42389&quot;&gt;#42389&lt;/a&gt;), since it was never useful to embedders.&lt;/p&gt;
&lt;p&gt;We’ve also made some changes to &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html&quot;&gt;&lt;code&gt;Preferences&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;devtools­_server­_port&lt;/code&gt; is now &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html#structfield.devtools_server_listen_address&quot;&gt;&lt;code&gt;devtools­_server­_listen­_address&lt;/code&gt;&lt;/a&gt;, and can now take either a port number (as before) or a full &lt;a href=&quot;https://doc.rust-lang.org/std/net/enum.SocketAddr.html&quot;&gt;SocketAddr&lt;/a&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42502&quot;&gt;#42502&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dom­_worklet­_blockingsleep&lt;/code&gt; is now &lt;code&gt;dom­_worklet­_blockingsleep­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42897&quot;&gt;#42897&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Removed many unused preferences (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42897&quot;&gt;#42897&lt;/a&gt;) – &lt;code&gt;js­_asyncstack&lt;/code&gt;, &lt;code&gt;js­_discard­_system­_source&lt;/code&gt;, &lt;code&gt;js­_dump­_stack­_on­_debuggee­_would­_run&lt;/code&gt;, &lt;code&gt;js­_ion­_offthread­_compilation­_enabled&lt;/code&gt;, &lt;code&gt;js­_mem­_gc­_allocation­_threshold­_avoid­_interrupt­_factor&lt;/code&gt;, &lt;code&gt;js­_mem­_gc­_allocation­_threshold­_factor&lt;/code&gt;, &lt;code&gt;js­_mem­_gc­_allocation­_threshold­_mb&lt;/code&gt;, &lt;code&gt;js­_mem­_gc­_decommit­_threshold­_mb&lt;/code&gt;, &lt;code&gt;js­_mem­_gc­_dynamic­_heap­_growth­_enabled&lt;/code&gt;, &lt;code&gt;js­_mem­_gc­_dynamic­_mark­_slice­_enabled&lt;/code&gt;, &lt;code&gt;js­_shared­_memory&lt;/code&gt;, &lt;code&gt;js­_throw­_on­_asmjs­_validation­_failure&lt;/code&gt;, &lt;code&gt;js­_throw­_on­_debuggee­_would­_run&lt;/code&gt;, &lt;code&gt;js­_werror­_enabled&lt;/code&gt;, and &lt;code&gt;network­_mime­_sniff&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;more-on-the-web-platform&quot; tabindex=&quot;-1&quot;&gt;More on the web platform &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#more-on-the-web-platform&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you navigate to a &lt;strong&gt;video file&lt;/strong&gt; or &lt;strong&gt;audio file as a document&lt;/strong&gt;, the player now has controls (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42488&quot;&gt;#42488&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Images now rotate&lt;/strong&gt; according to their &lt;strong&gt;EXIF metadata&lt;/strong&gt; by default (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42567&quot;&gt;#42567&lt;/a&gt;), like they would once we add support for ‘image-orientation: from-image’.&lt;/p&gt;
&lt;p&gt;We’re implementing &lt;strong&gt;system-font-aware font fallback&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42466&quot;&gt;#42466&lt;/a&gt;), with support for this on macOS landing this month (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42776&quot;&gt;#42776&lt;/a&gt;).
This allows Servo to render text in scripts that are not covered by web fonts or any of the fonts on Servo’s built-in lists of fallback fonts, as long as they are covered by fonts installed on the system.&lt;/p&gt;
&lt;p&gt;Servo now supports the newer &lt;strong&gt;pointermove&lt;/strong&gt;, &lt;strong&gt;pointerdown&lt;/strong&gt;, &lt;strong&gt;pointerup&lt;/strong&gt;, and &lt;strong&gt;pointercancel&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41290&quot;&gt;#41290&lt;/a&gt;).
The older &lt;strong&gt;touchmove&lt;/strong&gt;, &lt;strong&gt;touchstart&lt;/strong&gt;, &lt;strong&gt;touchend&lt;/strong&gt;, and &lt;strong&gt;touchcancel&lt;/strong&gt; events continue to be supported.&lt;/p&gt;
&lt;p&gt;The default language in &lt;strong&gt;‘Accept-Language’&lt;/strong&gt; and &lt;strong&gt;navigator.language&lt;/strong&gt; is now taken from the &lt;strong&gt;$LANG&lt;/strong&gt; environment variable if present (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41919&quot;&gt;#41919&lt;/a&gt;), rather than always being set to en-US.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;input type=color&amp;gt;&lt;/strong&gt; now supports any CSS color value (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42275&quot;&gt;#42275&lt;/a&gt;), including the more complex values like color-mix().
We’ve also landed the &lt;strong&gt;colorspace&lt;/strong&gt; attribute (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42279&quot;&gt;#42279&lt;/a&gt;), but only in the web-facing side of Servo for now, not the embedding API or in servoshell.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘vertical-align’&lt;/strong&gt; is now a shorthand for ‘alignment-baseline’ and ‘baseline-shift’ (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42361&quot;&gt;#42361&lt;/a&gt;), and &lt;strong&gt;scrollParent&lt;/strong&gt; on &lt;strong&gt;HTMLElement&lt;/strong&gt; is now a function per &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/12731&quot;&gt;this recent spec update&lt;/a&gt; (&lt;a href=&quot;https://github.com/TimurBora&quot;&gt;@TimurBora&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42689&quot;&gt;#42689&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cookies&lt;/strong&gt; are now more conformant (&lt;a href=&quot;https://github.com/sebsebmc&quot;&gt;@sebsebmc&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42418&quot;&gt;#42418&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42427&quot;&gt;#42427&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42435&quot;&gt;#42435&lt;/a&gt;).
&lt;strong&gt;‘Expires’&lt;/strong&gt; and &lt;strong&gt;‘Max-Age’&lt;/strong&gt; attributes are now handled correctly in ‘Set-Cookie’ headers, &lt;strong&gt;get()&lt;/strong&gt; and &lt;strong&gt;getAll()&lt;/strong&gt; on &lt;strong&gt;CookieStore&lt;/strong&gt; now trim whitespace in cookie names and values, and the behaviour of &lt;strong&gt;set()&lt;/strong&gt; on &lt;strong&gt;CookieStore&lt;/strong&gt; has been improved.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt; elements are now more conformant in how &lt;strong&gt;load&lt;/strong&gt; events are fired on the element and its contentWindow (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42254&quot;&gt;#42254&lt;/a&gt;), although there are still some bugs.
This has long behaved incorrectly in Servo, and it has historically caused many problems in the Web Platform Tests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IndexedDB&lt;/strong&gt; is now more conformant in our handling of transactions (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41508&quot;&gt;#41508&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42732&quot;&gt;#42732&lt;/a&gt;), and when opening and closing connections (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42082&quot;&gt;#42082&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42669&quot;&gt;#42669&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve started implementing &lt;strong&gt;Largest Contentful Paint&lt;/strong&gt; timings (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42024&quot;&gt;#42024&lt;/a&gt;), and we’ve landed a bunch of improvements to how &lt;strong&gt;First Contentful Paint&lt;/strong&gt; timings work in Servo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;we now include ‘background-image’ (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42569&quot;&gt;#42569&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;we now include ‘border-image’ (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42581&quot;&gt;#42581&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;we now ignore subtrees with ‘opacity: 0’ (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42768&quot;&gt;#42768&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;we now ignore zero-sized subtrees (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42178&quot;&gt;#42178&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;we now ignore &amp;lt;iframe&amp;gt; (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42498&quot;&gt;#42498&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;we now ignore &amp;lt;video&amp;gt; and &amp;lt;video poster&amp;gt; unless they actually have an image (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42411&quot;&gt;#42411&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;we now ignore mouse moves when deciding when to stop measuring (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41999&quot;&gt;#41999&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;new WebSocket()&lt;/strong&gt; now resolves relative URLs (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42425&quot;&gt;#42425&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;requestFullscreen()&lt;/strong&gt; on &lt;strong&gt;Element&lt;/strong&gt; now requires &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/User_activation&quot;&gt;user activation&lt;/a&gt; (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42060&quot;&gt;#42060&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;performance.getEntries()&lt;/strong&gt; now returns &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming&quot;&gt;PerformanceResourceTiming&lt;/a&gt; entries for navigations in &amp;lt;iframe&amp;gt; (&lt;a href=&quot;https://github.com/muse254&quot;&gt;@muse254&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42270&quot;&gt;#42270&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When geolocation is enabled (&lt;code&gt;--pref dom_geolocation_enabled&lt;/code&gt;), &lt;strong&gt;navigator­.geolocation­.get­Current­Position()&lt;/strong&gt; and &lt;strong&gt;watch­Position()&lt;/strong&gt; now support the optional &lt;strong&gt;errors&lt;/strong&gt; argument (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42295&quot;&gt;#42295&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We now support the &lt;strong&gt;‘-webkit-text-security’&lt;/strong&gt; property in CSS (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42181&quot;&gt;#42181&lt;/a&gt;), which is not specified anywhere but required for &lt;a href=&quot;https://browserbench.org/MotionMark1.2/&quot;&gt;MotionMark&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;performance-and-stability&quot; tabindex=&quot;-1&quot;&gt;Performance and stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#performance-and-stability&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our &lt;strong&gt;about:memory&lt;/strong&gt; page now knows how to &lt;strong&gt;report many new kinds of memory usage&lt;/strong&gt;, including the &lt;strong&gt;DevTools&lt;/strong&gt; server (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42478&quot;&gt;#42478&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42480&quot;&gt;#42480&lt;/a&gt;), &lt;strong&gt;WebGL&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42570&quot;&gt;#42570&lt;/a&gt;), &lt;strong&gt;localStorage&lt;/strong&gt; and &lt;strong&gt;sessionStorage&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42484&quot;&gt;#42484&lt;/a&gt;), and some of the memory used by &lt;strong&gt;IndexedDB&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42486&quot;&gt;#42486&lt;/a&gt;).
We’ve also started internally tracking the memory usage of the media subsystem (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42504&quot;&gt;#42504&lt;/a&gt;) and WebXR (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42505&quot;&gt;#42505&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layout&lt;/strong&gt; has seen a lot of performance work in February, with our main focus being on improving &lt;a href=&quot;https://servo.org/twismar/blog/2025/07/17/this-month-in-servo/#performance&quot;&gt;&lt;strong&gt;incremental layout&lt;/strong&gt;&lt;/a&gt; of the &lt;strong&gt;box tree&lt;/strong&gt; and &lt;strong&gt;fragment tree&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We now have our first &lt;strong&gt;truly incremental box tree layout&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42700&quot;&gt;#42700&lt;/a&gt;), rather than our previous “dirty roots”-based approach.
Depending on how they were &lt;a href=&quot;https://en.wikipedia.org/wiki/Dirty_bit&quot;&gt;damaged&lt;/a&gt;, some boxes for &lt;strong&gt;floats&lt;/strong&gt; (as above, &lt;a href=&quot;https://github.com/servo/servo/pull/42816&quot;&gt;#42816&lt;/a&gt;), &lt;strong&gt;independent formatting contexts&lt;/strong&gt; (as above, &lt;a href=&quot;https://github.com/servo/servo/pull/42783&quot;&gt;#42783&lt;/a&gt;), and their descendants (as above, &lt;a href=&quot;https://github.com/servo/servo/pull/42582&quot;&gt;#42582&lt;/a&gt;) can now be reused, and they avoid damaging their parents (as above, &lt;a href=&quot;https://github.com/servo/servo/pull/42847&quot;&gt;#42847&lt;/a&gt;).
We also destroy boxes with ‘display: none’ earlier in the layout process (as above, &lt;a href=&quot;https://github.com/servo/servo/pull/42584&quot;&gt;#42584&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Incremental fragment tree layout&lt;/strong&gt; is improving too!
Whereas we previously had to decide whether to run fragment tree layout in an “all or nothing” way, we can now &lt;strong&gt;reuse cached fragments&lt;/strong&gt; in independent formatting contexts (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42687&quot;&gt;#42687&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42717&quot;&gt;#42717&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42871&quot;&gt;#42871&lt;/a&gt;).
We can also measure how much work is being done on each layout (as above, &lt;a href=&quot;https://github.com/servo/servo/pull/42817&quot;&gt;#42817&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo uses &lt;strong&gt;shared memory&lt;/strong&gt; for many situations where copying data over channels would be too expensive, such as for images and fonts.
In multiprocess mode (&lt;code&gt;--multiprocess&lt;/code&gt;), we use the operating system to create the shared memory in a way that can be shared with other processes, such as &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799/functions/shm_open.html&quot;&gt;shm_open(3)&lt;/a&gt; or &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-createfilemappingw&quot;&gt;CreateFileMappingW&lt;/a&gt;, but this consumes resources that can sometimes be exhausted.
We only need to use those kinds of shared memory in multiprocess mode, so we’ve reworked Servo to use &lt;code&gt;Arc&lt;/code&gt;﻿&lt;code&gt;&amp;lt;Vec&amp;lt;u8&amp;gt;&amp;gt;&lt;/code&gt; in single-process mode (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42083&quot;&gt;#42083&lt;/a&gt;), which should avoid resource exhaustion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parsing web pages&lt;/strong&gt; is complicated: we want pages to render incrementally as they stream in from the network, and we want to prefetch resources, but scripts can call document.write(), which injects markup “on the spot”.
This is further complicated if that markup also contains a &amp;lt;script&amp;gt;.&lt;/p&gt;
&lt;p&gt;We’ve recently landed some fixes to Servo’s &lt;strong&gt;async parser&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42882&quot;&gt;#42882&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42910&quot;&gt;#42910&lt;/a&gt;), which handles these issues more efficiently.
This is currently an obscure and somewhat buggy feature (&lt;code&gt;--pref dom­_servoparser­_async­_html­_tokenizer­_enabled&lt;/code&gt;), but if we can get the feature working more reliably (&lt;a href=&quot;https://github.com/servo/servo/issues/37418&quot;&gt;#37418&lt;/a&gt;), it could &lt;strong&gt;halve the energy&lt;/strong&gt; Servo spends on parsing, &lt;strong&gt;lower latency&lt;/strong&gt; for pages that don’t use document.write(), and even &lt;strong&gt;improve the html5ever API&lt;/strong&gt; for the ecosystem.&lt;/p&gt;
&lt;p&gt;We’ve also landed optimisations for &lt;strong&gt;‘Content-Security-Policy’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42716&quot;&gt;#42716&lt;/a&gt;), &lt;strong&gt;IntersectionObserver&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42366&quot;&gt;#42366&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42390&quot;&gt;#42390&lt;/a&gt;), &lt;strong&gt;layout queries&lt;/strong&gt; (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42327&quot;&gt;#42327&lt;/a&gt;), the &lt;strong&gt;bfcache&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42703&quot;&gt;#42703&lt;/a&gt;), loading &lt;strong&gt;images&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42684&quot;&gt;#42684&lt;/a&gt;), and checks for &lt;strong&gt;multiprocess mode&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42782&quot;&gt;#42782&lt;/a&gt;), as well as the interfaces between Servo and &lt;strong&gt;SpiderMonkey&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42135&quot;&gt;#42135&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42576&quot;&gt;#42576&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve continued our long-running effort to &lt;strong&gt;use the Rust type system&lt;/strong&gt; to make certain kinds of dynamic borrow failures impossible (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/pralkarz&quot;&gt;@pralkarz&lt;/a&gt;, &lt;a href=&quot;https://github.com/BryanSmith00&quot;&gt;@BryanSmith00&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimurBora&quot;&gt;@TimurBora&lt;/a&gt;, &lt;a href=&quot;https://github.com/onsah&quot;&gt;@onsah&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42342&quot;&gt;#42342&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42294&quot;&gt;#42294&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42370&quot;&gt;#42370&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42417&quot;&gt;#42417&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42619&quot;&gt;#42619&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42616&quot;&gt;#42616&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42637&quot;&gt;#42637&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42640&quot;&gt;#42640&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42662&quot;&gt;#42662&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42679&quot;&gt;#42679&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42681&quot;&gt;#42681&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42665&quot;&gt;#42665&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42667&quot;&gt;#42667&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42699&quot;&gt;#42699&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42712&quot;&gt;#42712&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42725&quot;&gt;#42725&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42729&quot;&gt;#42729&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42726&quot;&gt;#42726&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42720&quot;&gt;#42720&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42738&quot;&gt;#42738&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42737&quot;&gt;#42737&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42735&quot;&gt;#42735&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42751&quot;&gt;#42751&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42805&quot;&gt;#42805&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42809&quot;&gt;#42809&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42780&quot;&gt;#42780&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42820&quot;&gt;#42820&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42715&quot;&gt;#42715&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42635&quot;&gt;#42635&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42880&quot;&gt;#42880&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42846&quot;&gt;#42846&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#bug-fixes&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ve landed some fixes for issues preventing Servo from being built on &lt;strong&gt;Windows arm64&lt;/strong&gt; (&lt;a href=&quot;https://github.com/dpaoliello&quot;&gt;@dpaoliello&lt;/a&gt;, &lt;a href=&quot;https://github.com/npiesco&quot;&gt;@npiesco&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42371&quot;&gt;#42371&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42341&quot;&gt;#42341&lt;/a&gt;).
Work to enable Windows arm64 as a build platform is ongoing (&lt;a href=&quot;https://github.com/npiesco&quot;&gt;@npiesco&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42312&quot;&gt;#42312&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;img height&amp;gt;&lt;/strong&gt; now takes the default &amp;lt;img width&amp;gt; from the aspect ratio of the image (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42577&quot;&gt;#42577&lt;/a&gt;), rather than using a width of 300px by default.
&lt;strong&gt;&amp;lt;svg width=0&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;svg height=0&amp;gt;&lt;/strong&gt; now take the default width and height (respectively) from the aspect ratio of the &amp;lt;svg viewBox&amp;gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42545&quot;&gt;#42545&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a bug in the result of &lt;strong&gt;layout queries&lt;/strong&gt;, such as getBoundingClientRect(), on inline &lt;strong&gt;&amp;lt;svg&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42594&quot;&gt;#42594&lt;/a&gt;), and we’ve fixed layout bugs related to &lt;strong&gt;‘display: table-cell’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42778&quot;&gt;#42778&lt;/a&gt;), &lt;strong&gt;‘display: list-item’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42825&quot;&gt;#42825&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42864&quot;&gt;#42864&lt;/a&gt;), &lt;strong&gt;‘inset: auto’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42586&quot;&gt;#42586&lt;/a&gt;), &lt;strong&gt;‘width: max-content’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42574&quot;&gt;#42574&lt;/a&gt;), &lt;strong&gt;‘align-self: last baseline’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42724&quot;&gt;#42724&lt;/a&gt;), &lt;strong&gt;‘list-style-image’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42332&quot;&gt;#42332&lt;/a&gt;), &lt;strong&gt;‘content: &amp;lt;image&amp;gt;’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42332&quot;&gt;#42332&lt;/a&gt;), negative &lt;strong&gt;‘margin’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42889&quot;&gt;#42889&lt;/a&gt;), and &lt;strong&gt;ink overflow&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42403&quot;&gt;#42403&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;HTML and CSS bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Empty ‘url()’&lt;/strong&gt; values making requests when they shouldn’t (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42622&quot;&gt;#42622&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;template&amp;gt;&lt;/strong&gt; failing to throw HierarchyRequestError when a DOM API is used to create an invalid hierarchy (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42276&quot;&gt;#42276&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;input&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;textarea&amp;gt;&lt;/strong&gt; selection behaviour being incorrect when the text contains more than one script (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42399&quot;&gt;#42399&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;script nonce&amp;gt;&lt;/strong&gt; validation failing to work correctly in some cases (&lt;a href=&quot;https://github.com/dyegoaurelio&quot;&gt;@dyegoaurelio&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40956&quot;&gt;#40956&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;a target&amp;gt;&lt;/strong&gt; failing to work correctly after the related &amp;lt;iframe&amp;gt; is removed and a new one added with the same name (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42344&quot;&gt;#42344&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;base&amp;gt;&lt;/strong&gt; not taking effect in some cases, or taking effect when given a &lt;strong&gt;data:&lt;/strong&gt; or &lt;strong&gt;javascript:&lt;/strong&gt; URL (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42255&quot;&gt;#42255&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42339&quot;&gt;#42339&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;JavaScript and DOM bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;event.target&lt;/code&gt; being incorrect on &lt;strong&gt;touchmove&lt;/strong&gt;, &lt;strong&gt;touchend&lt;/strong&gt;, and &lt;strong&gt;touchcancel&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42654&quot;&gt;#42654&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;touchmove&lt;/strong&gt; events not being fired when part of a two-finger pinch zoom (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42528&quot;&gt;#42528&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;touchend&lt;/strong&gt; events erroneously firing after touchcancel events (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42654&quot;&gt;#42654&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;assignedNodes()&lt;/strong&gt; on &lt;strong&gt;HTMLSlotElement&lt;/strong&gt; returning incorrect results after the &amp;lt;slot&amp;gt; was removed from the shadow tree (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42250&quot;&gt;#42250&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Largest Contentful Paint&lt;/strong&gt; timings no longer being collected after reloading or navigating (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41169&quot;&gt;#41169&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PerformancePaintTiming&lt;/strong&gt; being exposed to Worker globals when they shouldn’t be (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42409&quot;&gt;#42409&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript modules&lt;/strong&gt; resolved incorrectly when there are overlapping &lt;code&gt;.imports&lt;/code&gt; or &lt;code&gt;.scopes&lt;/code&gt; or import maps (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42668&quot;&gt;#42668&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42630&quot;&gt;#42630&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42754&quot;&gt;#42754&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42821&quot;&gt;#42821&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;changes to how we trigger &lt;strong&gt;garbage collection&lt;/strong&gt; breaking &lt;a href=&quot;https://browserbench.org/Speedometer3.1/&quot;&gt;Speedometer&lt;/a&gt; (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42271&quot;&gt;#42271&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WebDriver bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webdriver/#pointer-actions&quot;&gt;Pointer actions&lt;/a&gt; and &lt;a href=&quot;https://w3c.github.io/webdriver/#wheel-actions&quot;&gt;wheel actions&lt;/a&gt;&lt;/strong&gt; behaving incorrectly when devicePixelRatio ≠ 1 (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42387&quot;&gt;#42387&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42628&quot;&gt;#42628&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webdriver/#wheel-actions&quot;&gt;Wheel actions&lt;/a&gt;&lt;/strong&gt; throwing incorrect exceptions when they are missing properties (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42745&quot;&gt;#42745&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webdriver/#dfn-dispatch-a-pointermove-action&quot;&gt;pointerMove&lt;/a&gt; actions&lt;/strong&gt; with non-zero duration failing to interleave with other actions (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42289&quot;&gt;#42289&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve fixed &lt;strong&gt;crashes in DevTools&lt;/strong&gt;, in the Inspector tab (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42330&quot;&gt;#42330&lt;/a&gt;), when exiting Servo while DevTools is connected (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42543&quot;&gt;#42543&lt;/a&gt;), when setting breakpoints (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42810&quot;&gt;#42810&lt;/a&gt;), and after clients disconnect (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42583&quot;&gt;#42583&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed &lt;strong&gt;crashes in layout&lt;/strong&gt;, when using ‘background-repeat: round’ (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42303&quot;&gt;#42303&lt;/a&gt;), when using ‘list-style-image’ or ‘content: &amp;lt;image&amp;gt;’ (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42332&quot;&gt;#42332&lt;/a&gt;), when calling elementFromPoint() on Document (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42822&quot;&gt;#42822&lt;/a&gt;), and when handling layout queries like getBoundingClientRect() on inline &amp;lt;svg&amp;gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42594&quot;&gt;#42594&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed &lt;strong&gt;crashes related to stylesheets&lt;/strong&gt;, when removing stylesheets from the DOM (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42273&quot;&gt;#42273&lt;/a&gt;), when changing the href of a &amp;lt;link rel=stylesheet&amp;gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42481&quot;&gt;#42481&lt;/a&gt;), and when loading stylesheets with &lt;code&gt;--layout-threads=1&lt;/code&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42685&quot;&gt;#42685&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also fixed crashes when using multitouch input (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42350&quot;&gt;#42350&lt;/a&gt;), when using MediaStreamAudioSourceNode (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42914&quot;&gt;#42914&lt;/a&gt;), when calling add() on HTMLOptionsCollection (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42263&quot;&gt;#42263&lt;/a&gt;), when calling elementFromPoint() on Document or ShadowRoot(), when we fail to open a database for IndexedDB (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42444&quot;&gt;#42444&lt;/a&gt;), and when certain pages are run with a mozjs debug build (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42428&quot;&gt;#42428&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/03/31/february-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;6985 USD/month&lt;/strong&gt; (−0.4% from January) in recurring donations.
This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;32 GitHub users&lt;/strong&gt; (–1 from January) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/twismar/blog/2025/11/21/sponsorship-tiers/&quot;&gt;&lt;strong&gt;sponsorship tiers&lt;/strong&gt;&lt;/a&gt; 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 &lt;a href=&quot;mailto:join@servo.org&quot;&gt;join@servo.org&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; right: calc(100% - 100% * 6985 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;6985&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 6985 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;6985&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
&lt;script&gt;
    (function makeVideoPlayersClickable() {
        addEventListener(&quot;toggle&quot;, event =&gt; {
            const details = event.target.closest(&quot;details&quot;);
            if (!details?.open) {
                return;
            }
            const video = details.querySelector(&quot;video&quot;);
            if (!video) {
                return;
            }
            if (video.fastSeek) {
                video.fastSeek(0);
            } else {
                video.currentTime = 0;
            }
            video.play();
        }, true);
    })();
&lt;/script&gt;
</content>
  </entry>
  <entry>
    <title>January in Servo: preloads, better forms, details styling, and more!</title>
    <link href="https://servo.org/twismar/blog/2026/02/28/january-in-servo/"/>
    <updated>2026-02-28T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2026/02/28/january-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.0.5&quot;&gt;&lt;strong&gt;Servo 0.0.5&lt;/strong&gt;&lt;/a&gt; is here, bringing with it lots of improvements in web platform features.
Some highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;link rel=preload&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40059&quot;&gt;#40059&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;style blocking&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;link blocking&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42096&quot;&gt;#42096&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;img align&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42220&quot;&gt;#42220&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;select disabled&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42036&quot;&gt;#42036&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OGG files&lt;/strong&gt; can now be played in &lt;strong&gt;&amp;lt;audio&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41789&quot;&gt;#41789&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘cursor-color’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41976&quot;&gt;#41976&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘content: &amp;lt;image&amp;gt;’&lt;/strong&gt; works on all elements (&lt;a href=&quot;https://github.com/andreubotella&quot;&gt;@andreubotella&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41480&quot;&gt;#41480&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘::details-content’&lt;/strong&gt; on &amp;lt;details&amp;gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42107&quot;&gt;#42107&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘:open’&lt;/strong&gt; on &amp;lt;details&amp;gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42195&quot;&gt;#42195&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘:active’&lt;/strong&gt; on &amp;lt;input type=button&amp;gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42095&quot;&gt;#42095&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://html.spec.whatwg.org/multipage/#the-origin-interface&quot;&gt;Origin&lt;/a&gt; API&lt;/strong&gt; (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41712&quot;&gt;#41712&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail&quot;&gt;MouseEvent.detail&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41833&quot;&gt;#41833&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Request/keepalive&quot;&gt;Request.keepalive&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41457&quot;&gt;#41457&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41811&quot;&gt;#41811&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cyclic imports&lt;/strong&gt;, &lt;strong&gt;import attributes&lt;/strong&gt;, and &lt;strong&gt;JSON modules&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41779&quot;&gt;#41779&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;navigator.sendBeacon()&lt;/strong&gt; is enabled by default (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41694&quot;&gt;#41694&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https_proxy&lt;/code&gt;, &lt;code&gt;HTTPS_PROXY&lt;/code&gt;, and &lt;code&gt;NO_PROXY&lt;/code&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41689&quot;&gt;#41689&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ML-KEM&lt;/strong&gt;, &lt;strong&gt;ML-DSA&lt;/strong&gt;, and &lt;strong&gt;AES-OCB&lt;/strong&gt; in &lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webcrypto/&quot;&gt;Crypto&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41604&quot;&gt;#41604&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41617&quot;&gt;#41617&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41615&quot;&gt;#41615&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41627&quot;&gt;#41627&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41628&quot;&gt;#41628&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41647&quot;&gt;#41647&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41659&quot;&gt;#41659&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41676&quot;&gt;#41676&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41791&quot;&gt;#41791&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41822&quot;&gt;#41822&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41813&quot;&gt;#41813&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41829&quot;&gt;#41829&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2026-02-diffie.png&quot; alt=&quot;Servo 0.0.5 showing improved appearance of buttons, text inputs, radio buttons, and checkboxes, plus new support for ‘::details-content’ and ‘:open’ selectors&quot; /&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;web-apis&quot; tabindex=&quot;-1&quot;&gt;Web APIs &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#web-apis&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo now &lt;strong&gt;plays OGG media&lt;/strong&gt; inside &amp;lt;audio&amp;gt; elements (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41789&quot;&gt;#41789&lt;/a&gt;)!
We disabled this feature many years ago due to bugs in &lt;a href=&quot;https://gstreamer.freedesktop.org/&quot;&gt;GStreamer&lt;/a&gt;, our media playback engine, but those bugs have since been fixed.&lt;/p&gt;
&lt;p&gt;We now support non-&lt;code&gt;px&lt;/code&gt; sizes for width and height attributes in &amp;lt;svg&amp;gt; elements (&lt;a href=&quot;https://github.com/rodio&quot;&gt;@rodio&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40761&quot;&gt;#40761&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Inactive documents will now correctly reject fullscreen mode changes (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42068&quot;&gt;#42068&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve enabled support for the &lt;strong&gt;navigator.sendBeacon()&lt;/strong&gt; by default (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41694&quot;&gt;#41694&lt;/a&gt;); the &lt;code&gt;dom_navigator_sendbeacon_enabled&lt;/code&gt; preference has been removed.
As part of this work, we implemented the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Request/keepalive&quot;&gt;&lt;code&gt;keepalive&lt;/code&gt;&lt;/a&gt; feature of the Request API (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41457&quot;&gt;#41457&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41811&quot;&gt;#41811&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;That’s not all for network-related improvements!
Quota errors from the &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Window/fetchLater&quot;&gt;fetchLater()&lt;/a&gt; API&lt;/strong&gt; provide more details (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41665&quot;&gt;#41665&lt;/a&gt;), and fetch response body promises now reject when &lt;strong&gt;invalid gzip content&lt;/strong&gt; is encountered (&lt;a href=&quot;https://github.com/arayaryoma&quot;&gt;@arayaryoma&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39438&quot;&gt;#39438&lt;/a&gt;).
Meanwhile, &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/EventSource&quot;&gt;EventSource&lt;/a&gt;&lt;/strong&gt; connections will no longer endlessly reconnect for permanent failures (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41651&quot;&gt;#41651&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42137&quot;&gt;#42137&lt;/a&gt;), and now use the correct &lt;strong&gt;‘Last-Event-Id’ header&lt;/strong&gt; when reconnecting (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42103&quot;&gt;#42103&lt;/a&gt;).
Finally, Servo will create &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming&quot;&gt;PerformanceResourceTiming&lt;/a&gt;&lt;/strong&gt; entries for requests that returned unsuccessful responses (&lt;a href=&quot;https://github.com/bellau&quot;&gt;@bellau&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41804&quot;&gt;#41804&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;There has been lots of work related to &lt;strong&gt;navigating pages&lt;/strong&gt; and &lt;strong&gt;loading iframes&lt;/strong&gt;.
We process &lt;strong&gt;URL fragments&lt;/strong&gt; more consistently when navigating via &lt;strong&gt;window.location&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41805&quot;&gt;#41805&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41834&quot;&gt;#41834&lt;/a&gt;), and allow evaluating &lt;strong&gt;javascript: URLs&lt;/strong&gt; when a document’s domain has been modified (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41969&quot;&gt;#41969&lt;/a&gt;).
XML documents loaded in an &amp;lt;iframe&amp;gt; no longer inherit their encoding from the parent document (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41637&quot;&gt;#41637&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re also made it possible to use &lt;strong&gt;blob: URLs&lt;/strong&gt; from inside &lt;strong&gt;‘about:blank’&lt;/strong&gt; and &lt;strong&gt;‘about:srcdoc’&lt;/strong&gt; documents (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41966&quot;&gt;#41966&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42104&quot;&gt;#42104&lt;/a&gt;).
Finally, constructed documents (e.g. &lt;code&gt;new Document()&lt;/code&gt;) now inherit the origin and domain of the document that created them (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41780&quot;&gt;#41780&lt;/a&gt;), and we implemented the new &lt;strong&gt;&lt;a href=&quot;https://html.spec.whatwg.org/multipage/#the-origin-interface&quot;&gt;Origin&lt;/a&gt; API&lt;/strong&gt; (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41712&quot;&gt;#41712&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo’s &lt;strong&gt;mixed content protections&lt;/strong&gt; are steadily increasing.
Insecure requests (e.g. HTTP) originating from &amp;lt;iframe&amp;gt; elements can now be upgraded to secure protocols (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41661&quot;&gt;#41661&lt;/a&gt;), and redirected requests now check the most recent URL when determining if the protocol is secure (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41832&quot;&gt;#41832&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;style blocking&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;link blocking&amp;gt;&lt;/strong&gt; can now be used to block rendering while loading stylesheets that are added dynamically (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42096&quot;&gt;#42096&lt;/a&gt;), and stylesheets loaded when parsing the document will &lt;strong&gt;block the document ‘load’ event&lt;/strong&gt; more consistently (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41986&quot;&gt;#41986&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41987&quot;&gt;#41987&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41988&quot;&gt;#41988&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41973&quot;&gt;#41973&lt;/a&gt;).
We also &lt;strong&gt;fire the ‘error’ event&lt;/strong&gt; if a fetched stylesheet response is invalid (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42037&quot;&gt;#42037&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now &lt;strong&gt;&lt;a href=&quot;https://wpt.fyi/results/WebCryptoAPI?run_id=5925299129942016&amp;amp;run_id=5929752339939328&amp;amp;run_id=5468032483983360&amp;amp;run_id=5132831023169536&quot;&gt;leads other browsers&lt;/a&gt;&lt;/strong&gt; in support for new &lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webcrypto/&quot;&gt;Web&lt;/a&gt; &lt;a href=&quot;https://wicg.github.io/webcrypto-modern-algos/&quot;&gt;Cryptography&lt;/a&gt;&lt;/strong&gt; algorithms!
This includes full support for &lt;strong&gt;ML-KEM&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41604&quot;&gt;#41604&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41617&quot;&gt;#41617&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41615&quot;&gt;#41615&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41627&quot;&gt;#41627&lt;/a&gt;), &lt;strong&gt;ML-DSA&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41628&quot;&gt;#41628&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41647&quot;&gt;#41647&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41659&quot;&gt;#41659&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41676&quot;&gt;#41676&lt;/a&gt;), and &lt;strong&gt;AES-OCB&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41791&quot;&gt;#41791&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41822&quot;&gt;#41822&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41813&quot;&gt;#41813&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41829&quot;&gt;#41829&lt;/a&gt;), plus improvements to &lt;strong&gt;AES-GCM&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41950&quot;&gt;#41950&lt;/a&gt;).
Additionally, the error messages returned by many Crypto APIs are now more detailed (&lt;a href=&quot;https://github.com/PaulTreitel&quot;&gt;@PaulTreitel&lt;/a&gt;, &lt;a href=&quot;https://github.com/danilopedraza&quot;&gt;@danilopedraza&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41964&quot;&gt;#41964&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41468&quot;&gt;#41468&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41902&quot;&gt;#41902&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules&quot;&gt;JS module&lt;/a&gt; loading&lt;/strong&gt; received a lot of attention – we’ve improved support for &lt;strong&gt;cyclic imports&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41779&quot;&gt;#41779&lt;/a&gt;), &lt;strong&gt;import attributes&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42185&quot;&gt;#42185&lt;/a&gt;), and &lt;strong&gt;JSON modules&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42138&quot;&gt;#42138&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Additionally, the &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/rel/preload&quot;&gt;&amp;lt;link rel=preload&amp;gt;&lt;/a&gt;&lt;/strong&gt; attribute now triggers &lt;strong&gt;preload fetch operations&lt;/strong&gt; that can improve page load speeds (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40059&quot;&gt;#40059&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IndexedDB&lt;/strong&gt; support continues to make progress, though for now the feature is disabled by default (&lt;code&gt;--pref dom_indexeddb_enabled&lt;/code&gt;).
This month we gained improvements to &lt;strong&gt;connection queues&lt;/strong&gt; (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41500&quot;&gt;#41500&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42053&quot;&gt;#42053&lt;/a&gt;) and &lt;strong&gt;request granularity&lt;/strong&gt; (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41933&quot;&gt;#41933&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We were accidentally persisting &lt;strong&gt;SessionStorage&lt;/strong&gt; data beyond the current session, but this has been corrected (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41326&quot;&gt;#41326&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Text input fields&lt;/strong&gt; have received a lot of love this month.
Clicking in an input field will position the cursor accordingly (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41906&quot;&gt;#41906&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41974&quot;&gt;#41974&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41931&quot;&gt;#41931&lt;/a&gt;), as will clicking past the end of a multiline input (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41909&quot;&gt;#41909&lt;/a&gt;).
Selecting text with the mouse in input fields works (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42049&quot;&gt;#42049&lt;/a&gt;), and double and triple clicks now toggle selections (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41926&quot;&gt;#41926&lt;/a&gt;).
Finally, we fixed a bug causing the input caret to be hidden in &amp;lt;input&amp;gt; elements inside of Shadow DOM content (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42233&quot;&gt;#42233&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘cursor-color’&lt;/strong&gt; is respected when rendering the input cursor (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41976&quot;&gt;#41976&lt;/a&gt;), and newlines can no longer be pasted into single line inputs (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41934&quot;&gt;#41934&lt;/a&gt;).
Finally, we fixed a panic when focusing a text field that is disabled (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42078&quot;&gt;#42078&lt;/a&gt;), as well as panics in APIs like &lt;strong&gt;HTMLInputElement.setRangeText()&lt;/strong&gt; that confused bytes and UTF-8 character indices (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41588&quot;&gt;#41588&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We also made time to &lt;strong&gt;improve form controls&lt;/strong&gt;!
The default styling of many controls received some care (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42085&quot;&gt;#42085&lt;/a&gt;), while &lt;strong&gt;&amp;lt;input type=button&amp;gt;&lt;/strong&gt; can now be styled with the &lt;strong&gt;‘:active’ pseudo-class&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42095&quot;&gt;#42095&lt;/a&gt;).
Conversely, disabled &lt;strong&gt;&amp;lt;select&amp;gt;&lt;/strong&gt; elements can no longer be activated (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42036&quot;&gt;#42036&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Mouse events triggered by the embedder are more complete; &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail&quot;&gt;&lt;strong&gt;MouseEvent.detail&lt;/strong&gt;&lt;/a&gt; correctly reports the click count for &lt;strong&gt;‘mouseup’&lt;/strong&gt; and &lt;strong&gt;‘mousedown’&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41833&quot;&gt;#41833&lt;/a&gt;), and many other members are now consistent with other mouse events (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42013&quot;&gt;#42013&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Performing a pinch zoom on mobile is now reflected in the &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport&quot;&gt;VisualViewport&lt;/a&gt; API&lt;/strong&gt; (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41754&quot;&gt;#41754&lt;/a&gt;), though for now the feature is disabled by default (&lt;code&gt;--pref dom_visual_viewport_enabled&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;We’ve changed the behaviour of Web APIs that use the &lt;a href=&quot;https://webidl.spec.whatwg.org/#Clamp&quot;&gt;&lt;code&gt;[Clamp]&lt;/code&gt; annotation&lt;/a&gt; (such as &lt;strong&gt;Blob.slice()&lt;/strong&gt;).
The previous implementation would cast floating point values to their integer equivalents, but the standard requires &lt;a href=&quot;https://webidl.spec.whatwg.org/#abstract-opdef-converttoint&quot;&gt;more specific rounding logic&lt;/a&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41640&quot;&gt;#41640&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;RGBA8&lt;/code&gt; constant is now available in WebGL 1 rendering contexts; it was previously only available in WebGL 2 contexts (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42048&quot;&gt;#42048&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fonts&lt;/strong&gt; were another area of focus this month.
Loading web fonts from &lt;strong&gt;file: URLs&lt;/strong&gt; works as expected (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41714&quot;&gt;#41714&lt;/a&gt;), as does using web fonts within Shadow DOM content (&lt;a href=&quot;https://github.com/minghuaw&quot;&gt;@minghuaw&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42151&quot;&gt;#42151&lt;/a&gt;).
Each web font request now creates a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming&quot;&gt;&lt;strong&gt;PerformanceResourceTiming&lt;/strong&gt;&lt;/a&gt; entry (&lt;a href=&quot;https://github.com/lumi-me-not&quot;&gt;@lumi-me-not&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41784&quot;&gt;#41784&lt;/a&gt;).
Servo supports font variations as of November 2025, so as of this month, the &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/FontFace&quot;&gt;FontFace&lt;/a&gt;&lt;/strong&gt; constructor no longer ignores the &lt;strong&gt;‘font-variation-settings’ property&lt;/strong&gt; (&lt;a href=&quot;https://github.com/muse254&quot;&gt;@muse254&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41968&quot;&gt;#41968&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cursive scripts&lt;/strong&gt; now ignore the &lt;strong&gt;‘letter-spacing’&lt;/strong&gt; CSS property (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42165&quot;&gt;#42165&lt;/a&gt;), and we significantly reduced the time and memory required when &lt;strong&gt;rendering non-ASCII text&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42105&quot;&gt;#42105&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42162&quot;&gt;#42162&lt;/a&gt;) and when text nodes share the same font (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41876&quot;&gt;#41876&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;css&quot; tabindex=&quot;-1&quot;&gt;CSS &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#css&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There were lots of improvements to &lt;strong&gt;block layout&lt;/strong&gt; algorithms (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41492&quot;&gt;#41492&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41624&quot;&gt;#41624&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41632&quot;&gt;#41632&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41655&quot;&gt;#41655&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41652&quot;&gt;#41652&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41683&quot;&gt;#41683&lt;/a&gt;).
These often affect pages where a block element (such as a &amp;lt;div&amp;gt;) exists within some other layout mode (such as an inline &amp;lt;span&amp;gt;, or a flexbox context), and fixes like these ensure Servo matches the output of other browsers.&lt;/p&gt;
&lt;p&gt;Elements with &lt;strong&gt;scrollable overflow&lt;/strong&gt; can be scrolled more consistently, even with CSS transforms applied to them (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41707&quot;&gt;#41707&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42005&quot;&gt;#42005&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You can now use &lt;strong&gt;‘content: &amp;lt;image&amp;gt;’ on any element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/andreubotella&quot;&gt;@andreubotella&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41480&quot;&gt;#41480&lt;/a&gt;).
Generated image content used to only work with pseudo-elements, but that restriction no longer applies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;details&amp;gt; elements&lt;/strong&gt; can now be styled with the &lt;strong&gt;‘::details-content’ pseudo-element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42107&quot;&gt;#42107&lt;/a&gt;), as well as the ‘:open’ pseudo-class (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42195&quot;&gt;#42195&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;CSS styles now inherit correctly through &lt;strong&gt;‘display: contents’&lt;/strong&gt; as well as &lt;strong&gt;&amp;lt;slot&amp;gt; elements&lt;/strong&gt; in Shadow DOM content (&lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41855&quot;&gt;#41855&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘overflow-clip-margin’&lt;/strong&gt; now works correctly when &lt;strong&gt;‘border-radius’&lt;/strong&gt; is present (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41967&quot;&gt;#41967&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We fixed bugs involving text inside flexbox elements: they now use consistent baselines for alignment (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42038&quot;&gt;#42038&lt;/a&gt;), and style updates are propagated to the text correctly (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41951&quot;&gt;#41951&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;img align&amp;gt;&lt;/strong&gt; now aligns the image as expected (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42220&quot;&gt;#42220&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘word-break: keep-all’&lt;/strong&gt; now prevents line breaks in &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CJK_characters&quot;&gt;CJK&lt;/a&gt; text&lt;/strong&gt; (&lt;a href=&quot;https://github.com/RichardTjokroutomo&quot;&gt;@RichardTjokroutomo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42088&quot;&gt;#42088&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We also fixed some bugs involving &lt;strong&gt;floats&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Box_model/Margin_collapsing&quot;&gt;collapsing margins&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;a href=&quot;https://drafts.csswg.org/css-inline-3/#invisible-line-boxes&quot;&gt;phantom line boxes&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41812&quot;&gt;#41812&lt;/a&gt;), which sound much cooler than they actually are.&lt;/p&gt;
&lt;p&gt;Finally, we upgraded our &lt;a href=&quot;https://crates.io/crates/stylo&quot;&gt;Stylo&lt;/a&gt; dependency to the latest changes as of January 1 2026 (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41916&quot;&gt;#41916&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41696&quot;&gt;#41696&lt;/a&gt;).
Stylo powers our CSS parsing and &lt;a href=&quot;https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/&quot;&gt;style resolution engine&lt;/a&gt;, and this upgrade improves support for &lt;strong&gt;parsing color functions&lt;/strong&gt; like &lt;strong&gt;‘color-mix()’&lt;/strong&gt;, and improves our &lt;strong&gt;CSS animations and transitions&lt;/strong&gt; for borders and overflow clipping.&lt;/p&gt;
&lt;h2 id=&quot;automation-and-introspection&quot; tabindex=&quot;-1&quot;&gt;Automation and introspection &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#automation-and-introspection&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Last month Servo gained support for HTTP proxies.
We now support &lt;strong&gt;HTTPS proxies&lt;/strong&gt; as well (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41689&quot;&gt;#41689&lt;/a&gt;), which can be configured with the &lt;code&gt;https_proxy&lt;/code&gt; or &lt;code&gt;HTTPS_PROXY&lt;/code&gt; environment variables, or the &lt;a href=&quot;https://doc.servo.org/servo/prefs/struct.Preferences.html#structfield.network_https_proxy_uri&quot;&gt;&lt;code&gt;network_https_proxy_uri&lt;/code&gt; preference&lt;/a&gt;.
In addition, the &lt;code&gt;NO_PROXY&lt;/code&gt; environment variable or the &lt;a href=&quot;https://doc.servo.org/servo/prefs/struct.Preferences.html#structfield.network_http_no_proxy&quot;&gt;&lt;code&gt;network_http_no_proxy&lt;/code&gt; preference&lt;/a&gt; can &lt;strong&gt;disable any proxy&lt;/strong&gt; for particular domains.&lt;/p&gt;
&lt;p&gt;Our &lt;strong&gt;developer tools&lt;/strong&gt; integration continues to improve.
Worker globals are now categorized correctly in the UI (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41929&quot;&gt;#41929&lt;/a&gt;), and the Sources panel is populated for very short documents (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41983&quot;&gt;#41983&lt;/a&gt;).
Servo will report console messages that were logged before the developer tools are opened (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41895&quot;&gt;#41895&lt;/a&gt;).
Finally, we fixed a panic when selecting nodes in the layout inspector that have no style information (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41800&quot;&gt;#41800&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re working towards supporting pausing in the JS debugger (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42007&quot;&gt;#42007&lt;/a&gt;), and breakpoints can be toggled through the UI (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41925&quot;&gt;#41925&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42154&quot;&gt;#42154&lt;/a&gt;).
While the debugger is paused, hovering over JS objects will report the object’s properties for builtin JS classes (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42186&quot;&gt;#42186&lt;/a&gt;).
Stay tuned for more JS debugging updates in next month’s blog post!&lt;/p&gt;
&lt;p&gt;Servo’s &lt;a href=&quot;https://servo.org/twismar/blog/2025/07/17/this-month-in-servo/#webdriver&quot;&gt;&lt;strong&gt;WebDriver server&lt;/strong&gt;&lt;/a&gt; is also maturing.
Evaluating a synchronous script that returns a Promise will wait until that promise settles (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41823&quot;&gt;#41823&lt;/a&gt;).
&lt;strong&gt;‘touchmove’ events&lt;/strong&gt; are fired for pointer actions when a button is pressed (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41801&quot;&gt;#41801&lt;/a&gt;), and &lt;strong&gt;‘touchcancel’ events&lt;/strong&gt; are fired for canceled pointer action items (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41937&quot;&gt;#41937&lt;/a&gt;).
Finally, any pointer actions that would trigger &lt;strong&gt;duplicate ‘mousemove’ events&lt;/strong&gt; are silently discarded (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42034&quot;&gt;#42034&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webdriver/#element-clear&quot;&gt;Element Clear&lt;/a&gt; commands&lt;/strong&gt; now test whether the element is interactable (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42124&quot;&gt;#42124&lt;/a&gt;).
Now a null &lt;a href=&quot;https://w3c.github.io/webdriver/#dfn-script-timeout&quot;&gt;script execution timeout&lt;/a&gt; value will never trigger a timeout (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42184&quot;&gt;#42184&lt;/a&gt;), and synthesized &lt;strong&gt;‘pointermove’ events&lt;/strong&gt; have a consistent &lt;code&gt;pointerId&lt;/code&gt; value (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41726&quot;&gt;#41726&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;embedding&quot; tabindex=&quot;-1&quot;&gt;Embedding &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#embedding&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now &lt;strong&gt;cross-compile Servo&lt;/strong&gt; using Windows as the host (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41748&quot;&gt;#41748&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve &lt;strong&gt;pinned all git dependencies&lt;/strong&gt; to specific revisions, to reduce the risk of build failures (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42029&quot;&gt;#42029&lt;/a&gt;).
We intend to eventually &lt;a href=&quot;https://github.com/servo/servo/issues/25650&quot;&gt;forbid git dependencies&lt;/a&gt; in Servo libraries, which will help unblock releasing Servo on &lt;a href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;SiteDataManager&lt;/a&gt;&lt;/strong&gt; now has a new &lt;strong&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.clear_site_data&quot;&gt;clear_site_data()&lt;/a&gt;&lt;/strong&gt; method to clear all stored data for a particular host (&lt;a href=&quot;https://github.com/janvarga&quot;&gt;@janvarga&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41618&quot;&gt;#41618&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41709&quot;&gt;#41709&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41852&quot;&gt;#41852&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Our nightly testing UI, &lt;strong&gt;servoshell&lt;/strong&gt;, now respects any customized installation path on Windows (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41653&quot;&gt;#41653&lt;/a&gt;).
We fixed a crash in the Android app when pausing the application (&lt;a href=&quot;https://github.com/NiklasMerz&quot;&gt;@NiklasMerz&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41827&quot;&gt;#41827&lt;/a&gt;).
Additionally, clicking inside a webview in the desktop app will remove focus from any browser UI (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42080&quot;&gt;#42080&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve laid more groundwork towards exposing &lt;strong&gt;accessibility tree&lt;/strong&gt; information from webviews (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41924&quot;&gt;#41924&lt;/a&gt;).
There’s nothing to test yet, but keep an eye on our &lt;a href=&quot;https://github.com/servo/servo/issues/4344&quot;&gt;tracking issue&lt;/a&gt; if you want to be notified when nightly builds are ready for testing!&lt;/p&gt;
&lt;h2 id=&quot;stability-%26-performance&quot; tabindex=&quot;-1&quot;&gt;Stability &amp;amp; performance &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#stability-%26-performance&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ve converted many uses of &lt;strong&gt;IPC channels&lt;/strong&gt; in the engine to channels that are &lt;strong&gt;more efficient&lt;/strong&gt; when multiprocess mode is disabled (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41178&quot;&gt;#41178&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41071&quot;&gt;#41071&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41733&quot;&gt;#41733&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41806&quot;&gt;#41806&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41380&quot;&gt;#41380&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41809&quot;&gt;#41809&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41774&quot;&gt;#41774&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42032&quot;&gt;#42032&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42033&quot;&gt;#42033&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41412&quot;&gt;#41412&lt;/a&gt;).
Since multiprocess mode is not yet enabled by default (&lt;code&gt;--multiprocess&lt;/code&gt;), this is a significant boost to Servo’s everyday performance.&lt;/p&gt;
&lt;p&gt;Servo now sets a &lt;strong&gt;socket timeout for HTTP connections&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41710&quot;&gt;#41710&lt;/a&gt;).
This is controlled by the &lt;a href=&quot;https://doc.servo.org/servo/prefs/struct.Preferences.html#structfield.network_connection_timeout&quot;&gt;&lt;code&gt;network_connection_timeout&lt;/code&gt; preference&lt;/a&gt;, and defaults to &lt;strong&gt;15 seconds&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Each instance of Servo now starts &lt;strong&gt;four fewer threads&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41740&quot;&gt;#41740&lt;/a&gt;).
Any network operations that trigger a synchronous UI operation (such as an HTTP authentication prompt) no longer blocks other network tasks from completing (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41965&quot;&gt;#41965&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41857&quot;&gt;#41857&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;It’s said that one of the hardest problems in computer science is &lt;strong&gt;cache invalidation&lt;/strong&gt;.
We improved the memory usage of &lt;strong&gt;dynamic inline SVG content&lt;/strong&gt; by evicting stale SVG tree data from a cache (&lt;a href=&quot;https://github.com/TomRCummings&quot;&gt;@TomRCummings&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41675&quot;&gt;#41675&lt;/a&gt;).
Meanwhile, we added a new cache to reduce memory usage and improve rendering performance for pages with animating images (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41956&quot;&gt;#41956&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo’s JS engine now accounts for 2D and 3D canvas-related memory usage when deciding how often to perform garbage collection (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42180&quot;&gt;#42180&lt;/a&gt;).
This can reduce the risk of out-of-memory (OOM) errors on pages that create large numbers of short-lived WebGL or WebGPU objects.&lt;/p&gt;
&lt;p&gt;To reduce the risk of panics involving the JS engine integration, we’re continuing to use the &lt;strong&gt;Rust type system&lt;/strong&gt; to make certain kinds of dynamic borrow failures impossible (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41692&quot;&gt;#41692&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41782&quot;&gt;#41782&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41756&quot;&gt;#41756&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41808&quot;&gt;#41808&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41879&quot;&gt;#41879&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41878&quot;&gt;#41878&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41955&quot;&gt;#41955&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41971&quot;&gt;#41971&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42123&quot;&gt;#42123&lt;/a&gt;).
We also continue to identify and &lt;strong&gt;forbid code patterns&lt;/strong&gt; that can trigger rare crashes when garbage collection happens while destroying webviews (&lt;a href=&quot;https://github.com/willypuzzle&quot;&gt;@willypuzzle&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41717&quot;&gt;#41717&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41783&quot;&gt;#41783&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41911&quot;&gt;#41911&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41911&quot;&gt;#41911&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41977&quot;&gt;#41977&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41984&quot;&gt;#41984&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42243&quot;&gt;#42243&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This month also brought fixes for panics in parallel layout (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42026&quot;&gt;#42026&lt;/a&gt;), WebGPU (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42050&quot;&gt;#42050&lt;/a&gt;), &amp;lt;link&amp;gt; fetching (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42208&quot;&gt;#42208&lt;/a&gt;), Element.attachShadow() (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42237&quot;&gt;#42237&lt;/a&gt;), text input methods (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42240&quot;&gt;#42240&lt;/a&gt;), Web Workers when the developer tools are active (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42159&quot;&gt;#42159&lt;/a&gt;), IndexedDB (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41960&quot;&gt;#41960&lt;/a&gt;), and asynchronous &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/History_API/Working_with_the_History_API&quot;&gt;session history&lt;/a&gt; updates (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42238&quot;&gt;#42238&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Node.compareDocumentPosition()&lt;/strong&gt; is now more efficient (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42260&quot;&gt;#42260&lt;/a&gt;), and selections in text inputs no longer require a full page layout (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41963&quot;&gt;#41963&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;7007 USD/month&lt;/strong&gt; (−1.4% over December) in recurring donations.
This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;33 GitHub users&lt;/strong&gt; (+3 over December) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/twismar/blog/2025/11/21/sponsorship-tiers/&quot;&gt;&lt;strong&gt;sponsorship tiers&lt;/strong&gt;&lt;/a&gt; that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.
A big thanks from Servo to our newest Bronze Sponsor: &lt;strong&gt;str4d&lt;/strong&gt;!
If you’re interested in this kind of sponsorship, please contact us at &lt;a href=&quot;mailto:join@servo.org&quot;&gt;join@servo.org&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; right: calc(100% - 100% * 7007 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7007&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7007 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;7007&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;conference-talks-and-blogs&quot; tabindex=&quot;-1&quot;&gt;Conference talks and blogs &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/02/28/january-in-servo/#conference-talks-and-blogs&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There were two talks about Servo at FOSDEM 2026 (videos and slides &lt;a href=&quot;https://servo.org/twismar/about/#presentations&quot;&gt;here&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/3J8GUD-servo-streams-reimplementation/&quot;&gt;&lt;strong&gt;Implementing Streams Spec in Servo&lt;/strong&gt;&lt;/a&gt; – Taym Haddadi (&lt;a href=&quot;https://github.com/taym95&quot;&gt;@taym95&lt;/a&gt;) described the challenges of implementing the &lt;a href=&quot;https://streams.spec.whatwg.org/&quot;&gt;Streams Standard&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/LXFKS9-servo-project-impact/&quot;&gt;&lt;strong&gt;The Servo project and its impact on the web platform&lt;/strong&gt;&lt;/a&gt; – Manuel Rego (&lt;a href=&quot;https://github.com/rego&quot;&gt;@rego&lt;/a&gt;) highlighted the ways that Servo has shaped the web platform and contributed to web standards since it started in 2012.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
&lt;script&gt;
    (function makeVideoPlayersClickable() {
        addEventListener(&quot;toggle&quot;, event =&gt; {
            const details = event.target.closest(&quot;details&quot;);
            if (!details?.open) {
                return;
            }
            const video = details.querySelector(&quot;video&quot;);
            if (!video) {
                return;
            }
            if (video.fastSeek) {
                video.fastSeek(0);
            } else {
                video.currentTime = 0;
            }
            video.play();
        }, true);
    })();
&lt;/script&gt;
</content>
  </entry>
  <entry>
    <title>December in Servo: multiple windows, proxy support, better caching, and more!</title>
    <link href="https://servo.org/twismar/blog/2026/01/23/december-in-servo/"/>
    <updated>2026-01-23T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2026/01/23/december-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.0.4&quot;&gt;&lt;strong&gt;Servo 0.0.4&lt;/strong&gt;&lt;/a&gt; and our December nightly builds now support &lt;strong&gt;multiple windows&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40927&quot;&gt;#40927&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41235&quot;&gt;#41235&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41144&quot;&gt;#41144&lt;/a&gt;)!
This builds on features that landed in Servo’s embedding API &lt;a href=&quot;https://servo.org/twismar/blog/2025/12/15/november-in-servo/&quot;&gt;last month&lt;/a&gt;.
We’ve also landed support for several web platform features, both old and new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;‘contrast-color()’&lt;/strong&gt; in CSS color values (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41542&quot;&gt;#41542&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;partial support for &lt;strong&gt;&amp;lt;meta charset&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41376&quot;&gt;#41376&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;partial support for &lt;a href=&quot;https://html.spec.whatwg.org/multipage/#encoding-sniffing-algorithm&quot;&gt;&lt;strong&gt;encoding sniffing&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41435&quot;&gt;#41435&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘background’&lt;/strong&gt; and &lt;strong&gt;‘bgcolor’&lt;/strong&gt; attributes on &amp;lt;table&amp;gt;, &amp;lt;thead&amp;gt;, &amp;lt;tbody&amp;gt;, &amp;lt;tfoot&amp;gt;, &amp;lt;tr&amp;gt;, &amp;lt;td&amp;gt;, &amp;lt;th&amp;gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41272&quot;&gt;#41272&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tee()&lt;/strong&gt; on &lt;strong&gt;readable byte streams&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/35991&quot;&gt;#35991&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;_note&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; due to &lt;a href=&quot;https://github.com/servo/servo/issues/42069&quot;&gt;a known issue&lt;/a&gt;, servoshell on macOS may not be able to directly open new windows, depending on your system settings.&lt;/p&gt;
&lt;/aside&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2026-01-diffie.png&quot; alt=&quot;Servo 0.0.4 showing new support for multiple windows&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;For better compatibility with older web content, we now support &lt;strong&gt;vendor-prefixed&lt;/strong&gt; CSS properties like ‘-moz-transform’ (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41350&quot;&gt;#41350&lt;/a&gt;), as well as window.&lt;strong&gt;clientInformation&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41111&quot;&gt;#41111&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve continued shipping the &lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webcrypto/&quot;&gt;SubtleCrypto&lt;/a&gt; &lt;a href=&quot;https://wicg.github.io/webcrypto-modern-algos/&quot;&gt;API&lt;/a&gt;&lt;/strong&gt;, with full support for &lt;strong&gt;ChaCha20-Poly1305&lt;/strong&gt;, &lt;strong&gt;RSA-OAEP&lt;/strong&gt;, &lt;strong&gt;RSA-PSS&lt;/strong&gt;, and &lt;strong&gt;RSASSA-PKCS1-v1_5&lt;/strong&gt; (see below), plus &lt;strong&gt;importKey() for ML-KEM&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41585&quot;&gt;#41585&lt;/a&gt;) and several other improvements (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/PaulTreitel&quot;&gt;@PaulTreitel&lt;/a&gt;, &lt;a href=&quot;https://github.com/danilopedraza&quot;&gt;@danilopedraza&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41180&quot;&gt;#41180&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41395&quot;&gt;#41395&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41428&quot;&gt;#41428&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41442&quot;&gt;#41442&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41472&quot;&gt;#41472&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41544&quot;&gt;#41544&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41563&quot;&gt;#41563&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41587&quot;&gt;#41587&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41039&quot;&gt;#41039&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41292&quot;&gt;#41292&lt;/a&gt;):&lt;/p&gt;
&lt;figure style=&quot;overflow-x: scroll;&quot;&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;white-space:nowrap&quot;&gt;ChaCha20-Poly1305&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40978&quot;&gt;#40978&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41003&quot;&gt;#41003&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41030&quot;&gt;#41030&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;white-space:nowrap&quot;&gt;RSA-OAEP&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41225&quot;&gt;#41225&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41217&quot;&gt;#41217&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41240&quot;&gt;#41240&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41316&quot;&gt;#41316&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;white-space:nowrap&quot;&gt;RSA-PSS&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41157&quot;&gt;#41157&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41225&quot;&gt;#41225&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41240&quot;&gt;#41240&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41287&quot;&gt;#41287&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;white-space:nowrap&quot;&gt;RSASSA-PKCS1-v1_5&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;(&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41172&quot;&gt;#41172&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41225&quot;&gt;#41225&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41240&quot;&gt;#41240&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41267&quot;&gt;#41267&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figure&gt;
&lt;p&gt;When using &lt;strong&gt;servoshell&lt;/strong&gt; on Windows, you can now see &lt;code&gt;--help&lt;/code&gt; and log output, as long as servoshell was started in a console (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40961&quot;&gt;#40961&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo diagnostics options are now accessible in servoshell via the &lt;code&gt;SERVO_DIAGNOSTICS&lt;/code&gt; environment variable (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41013&quot;&gt;#41013&lt;/a&gt;), in addition to the usual &lt;code&gt;-Z&lt;/code&gt; / &lt;code&gt;--debug=&lt;/code&gt; arguments.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://book.servo.org/contributing/devtools.html&quot;&gt;&lt;strong&gt;Servo’s devtools&lt;/strong&gt;&lt;/a&gt; now partially support the &lt;strong&gt;Network&lt;/strong&gt; &amp;gt; &lt;strong&gt;Security&lt;/strong&gt; tab (&lt;a href=&quot;https://github.com/jiang1997&quot;&gt;@jiang1997&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40567&quot;&gt;#40567&lt;/a&gt;), allowing you to inspect some of the TLS details of your requests.
We’ve also made it &lt;strong&gt;compatible with Firefox 145&lt;/strong&gt; (&lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41087&quot;&gt;#41087&lt;/a&gt;), and use fewer IPC resources (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41161&quot;&gt;#41161&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2026-01-devtools-security.png&quot; alt=&quot;this website in Servo’s devtools, showing that the main request used TLS 1.3, TLS13_AES_256_GCM_SHA384 cipher suite, and X25519MLKEM768 key exchange, with HSTS enabled and HPKP disabled&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;We’ve fixed rendering bugs related to &lt;strong&gt;‘float’&lt;/strong&gt;, &lt;strong&gt;‘order’&lt;/strong&gt;, &lt;strong&gt;‘max-width’&lt;/strong&gt;, &lt;strong&gt;‘max-height’&lt;/strong&gt;, &lt;strong&gt;‘:link’ selectors&lt;/strong&gt;, &lt;strong&gt;&amp;lt;audio&amp;gt; layout&lt;/strong&gt;, and &lt;strong&gt;getClientRects()&lt;/strong&gt;, affecting intrinsic sizing (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41513&quot;&gt;#41513&lt;/a&gt;), anonymous blocks (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41510&quot;&gt;#41510&lt;/a&gt;), incremental layout (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40994&quot;&gt;#40994&lt;/a&gt;), flex item sizing (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41291&quot;&gt;#41291&lt;/a&gt;), selector matching (&lt;a href=&quot;https://github.com/andreubotella&quot;&gt;@andreubotella&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41478&quot;&gt;#41478&lt;/a&gt;), replaced element layout (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41262&quot;&gt;#41262&lt;/a&gt;), and empty fragments (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41477&quot;&gt;#41477&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now fires &lt;strong&gt;‘toggle’&lt;/strong&gt; events on &lt;strong&gt;&amp;lt;dialog&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40412&quot;&gt;#40412&lt;/a&gt;).
We’ve also improved the conformance of ‘wheel’ events (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41182&quot;&gt;#41182&lt;/a&gt;), ‘hashchange’ events (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41325&quot;&gt;#41325&lt;/a&gt;), ‘dblclick’ events on &amp;lt;input&amp;gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41319&quot;&gt;#41319&lt;/a&gt;), ‘resize’ events on &amp;lt;video&amp;gt; (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40940&quot;&gt;#40940&lt;/a&gt;), ‘seeked’ events on &amp;lt;video&amp;gt; and &amp;lt;audio&amp;gt; (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40981&quot;&gt;#40981&lt;/a&gt;), and the ‘transform’ property in getComputedStyle() (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41187&quot;&gt;#41187&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;embedding-api&quot; tabindex=&quot;-1&quot;&gt;Embedding API &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/01/23/december-in-servo/#embedding-api&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo now has basic support for &lt;strong&gt;HTTP proxies&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40941&quot;&gt;#40941&lt;/a&gt;).
You can set the proxy URL in the &lt;code&gt;http_proxy&lt;/code&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41209&quot;&gt;#41209&lt;/a&gt;) or &lt;code&gt;HTTP_PROXY&lt;/code&gt; (&lt;a href=&quot;https://github.com/treeshateorcs&quot;&gt;@treeshateorcs&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41268&quot;&gt;#41268&lt;/a&gt;) environment variables, or via &lt;code&gt;--pref network_http_proxy_uri&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We now use the &lt;strong&gt;system root certificates&lt;/strong&gt; by default (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40935&quot;&gt;#40935&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41179&quot;&gt;#41179&lt;/a&gt;), on most platforms.
If you don’t want to trust the system root certificates, you can instead continue to use Mozilla’s root certificates with &lt;code&gt;--pref network_use_webpki_roots&lt;/code&gt;.
As always, you can also add your own root certificates via &lt;a href=&quot;https://doc.servo.org/servo/opts/struct.Opts.html&quot;&gt;&lt;code&gt;Opts&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/opts/struct.Opts.html#structfield.certificate_path&quot;&gt;&lt;code&gt;certificate_path&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;--certificate-path=&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;We have a new &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;SiteDataManager&lt;/code&gt;&lt;/a&gt; API for managing &lt;strong&gt;localStorage&lt;/strong&gt;, &lt;strong&gt;sessionStorage&lt;/strong&gt;, and &lt;strong&gt;cookies&lt;/strong&gt; (&lt;a href=&quot;https://github.com/janvarga&quot;&gt;@janvarga&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41236&quot;&gt;#41236&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41255&quot;&gt;#41255&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41378&quot;&gt;#41378&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41523&quot;&gt;#41523&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41528&quot;&gt;#41528&lt;/a&gt;), and a new &lt;a href=&quot;https://doc.servo.org/servo/struct.NetworkManager.html&quot;&gt;&lt;code&gt;NetworkManager&lt;/code&gt;&lt;/a&gt; API for managing the &lt;strong&gt;cache&lt;/strong&gt; (&lt;a href=&quot;https://github.com/janvarga&quot;&gt;@janvarga&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41255&quot;&gt;#41255&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41474&quot;&gt;#41474&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41386&quot;&gt;#41386&lt;/a&gt;).
To clear the cache, call &lt;a href=&quot;https://doc.servo.org/servo/struct.NetworkManager.html&quot;&gt;&lt;code&gt;NetworkManager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.NetworkManager.html#method.clear_cache&quot;&gt;&lt;code&gt;clear_cache&lt;/code&gt;&lt;/a&gt;, and to list cache entries, call &lt;a href=&quot;https://doc.servo.org/servo/struct.NetworkManager.html&quot;&gt;&lt;code&gt;NetworkManager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.NetworkManager.html#method.cache_entries&quot;&gt;&lt;code&gt;cache_entries&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://html.spec.whatwg.org/multipage/#simple-dialogs&quot;&gt;&lt;strong&gt;Simple dialogs&lt;/strong&gt;&lt;/a&gt; – that is alert(), confirm(), and prompt() – are now exposed to embedders via a new &lt;a href=&quot;https://doc.servo.org/servo/enum.SimpleDialog.html&quot;&gt;&lt;code&gt;SimpleDialog&lt;/code&gt;&lt;/a&gt; type in &lt;a href=&quot;https://doc.servo.org/servo/webview_delegate/enum.EmbedderControl.html&quot;&gt;&lt;code&gt;EmbedderControl&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40982&quot;&gt;#40982&lt;/a&gt;).
This new interface is harder to misuse, and no longer requires boilerplate for embedders that wish to &lt;a href=&quot;https://html.spec.whatwg.org/multipage/#cannot-show-simple-dialogs&quot;&gt;ignore simple dialogs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web console messages&lt;/strong&gt;, including messages from the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Console_API&quot;&gt;Console API&lt;/a&gt;, are now accessible via &lt;a href=&quot;https://doc.servo.org/servo/trait.ServoDelegate.html&quot;&gt;&lt;code&gt;ServoDelegate&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/trait.ServoDelegate.html#method.show_console_message&quot;&gt;&lt;code&gt;show_console_message&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;&lt;code&gt;WebViewDelegate&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.show_console_message&quot;&gt;&lt;code&gt;show_console_message&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41351&quot;&gt;#41351&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;&lt;code&gt;Servo&lt;/code&gt;&lt;/a&gt;, the main handle for controlling Servo, is now cloneable for sharing within the same thread (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41010&quot;&gt;#41010&lt;/a&gt;).
To shut down Servo, simply &lt;a href=&quot;https://doc.rust-lang.org/std/mem/fn.drop.html&quot;&gt;drop&lt;/a&gt; the last &lt;code&gt;Servo&lt;/code&gt; handle or let it go out of scope.
&lt;code&gt;Servo&lt;/code&gt;::&lt;code&gt;start_shutting_down&lt;/code&gt; and &lt;code&gt;Servo&lt;/code&gt;::&lt;code&gt;deinit&lt;/code&gt; have been removed (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41012&quot;&gt;#41012&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Several interfaces have also been renamed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;&lt;code&gt;Servo&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;clear_cookies&lt;/code&gt; is now &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;SiteDataManager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.clear_cookies&quot;&gt;&lt;code&gt;clear_cookies&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/janvarga&quot;&gt;@janvarga&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41236&quot;&gt;#41236&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41255&quot;&gt;#41255&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DebugOpts&lt;/code&gt;::&lt;code&gt;disable_share_style_cache&lt;/code&gt; is now &lt;a href=&quot;https://doc.servo.org/servo/prefs/struct.Preferences.html&quot;&gt;&lt;code&gt;Preferences&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/prefs/struct.Preferences.html#structfield.layout_style_sharing_cache_enabled&quot;&gt;&lt;code&gt;layout_style_sharing_cache_enabled&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40959&quot;&gt;#40959&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The rest of &lt;code&gt;DebugOpts&lt;/code&gt; has been moved to &lt;a href=&quot;https://doc.servo.org/servo/opts/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;DiagnosticsLogging&lt;/code&gt;&lt;/a&gt;, and the options have been renamed (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40960&quot;&gt;#40960&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;perf-and-stability&quot; tabindex=&quot;-1&quot;&gt;Perf and stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/01/23/december-in-servo/#perf-and-stability&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We can now &lt;strong&gt;evict entries&lt;/strong&gt; from our &lt;strong&gt;HTTP cache&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40613&quot;&gt;#40613&lt;/a&gt;), rather than having it grow forever (or get cleared by an embedder).
&lt;strong&gt;about:memory&lt;/strong&gt; now tracks &lt;strong&gt;SVG-related memory usage&lt;/strong&gt; (&lt;a href=&quot;https://github.com/d-kraus&quot;&gt;@d-kraus&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41481&quot;&gt;#41481&lt;/a&gt;), and we’ve fixed memory leaks in &amp;lt;video&amp;gt; and &amp;lt;audio&amp;gt; (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41131&quot;&gt;#41131&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now does less work when &lt;strong&gt;matching selectors&lt;/strong&gt; (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41368&quot;&gt;#41368&lt;/a&gt;), when &lt;strong&gt;focus changes&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40984&quot;&gt;#40984&lt;/a&gt;), and when &lt;strong&gt;reflowing boxes&lt;/strong&gt; whose size did not change (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41160&quot;&gt;#41160&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To allow for smaller binaries, &lt;strong&gt;gamepad support&lt;/strong&gt; is now &lt;strong&gt;optional at build time&lt;/strong&gt; (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41451&quot;&gt;#41451&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed some &lt;strong&gt;undefined behaviour&lt;/strong&gt; around garbage collection (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/gmorenz&quot;&gt;@gmorenz&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41546&quot;&gt;#41546&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozjs/pull/688&quot;&gt;mozjs#688&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozjs/pull/689&quot;&gt;mozjs#689&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozjs/pull/692&quot;&gt;mozjs#692&lt;/a&gt;).
To better avoid other garbage-collection-related bugs (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozjs/issues/647&quot;&gt;mozjs#647&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozjs/pull/638&quot;&gt;mozjs#638&lt;/a&gt;), we’ve continued our work on defining (and migrating to) safer interfaces between Servo and the SpiderMonkey GC (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41519&quot;&gt;#41519&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41536&quot;&gt;#41536&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41537&quot;&gt;#41537&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41520&quot;&gt;#41520&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41564&quot;&gt;#41564&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a crash that occurs when &lt;strong&gt;&amp;lt;link rel=“shortcut icon”&amp;gt;&lt;/strong&gt; has an &lt;strong&gt;empty ‘href’ attribute&lt;/strong&gt;, which affected chiptune&lt;!----&gt;.com (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41056&quot;&gt;#41056&lt;/a&gt;), and we’ve also fixed crashes in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;‘background-repeat’ (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41158&quot;&gt;#41158&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&amp;lt;audio&amp;gt; layout (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41262&quot;&gt;#41262&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;custom elements (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40743&quot;&gt;#40743&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;AudioBuffer (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41253&quot;&gt;#41253&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;AudioNode (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40954&quot;&gt;#40954&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ReportingObserver (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41261&quot;&gt;#41261&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Uint8Array (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41228&quot;&gt;#41228&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the fonts system, on FreeType platforms (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40945&quot;&gt;#40945&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IME usage, on OpenHarmony (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/41570&quot;&gt;#41570&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/01/23/december-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;7110 USD/month&lt;/strong&gt; (+10.5% over November) in recurring donations.
This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;30 GitHub users&lt;/strong&gt; (+2 over November) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/twismar/blog/2025/11/21/sponsorship-tiers/&quot;&gt;&lt;strong&gt;sponsorship tiers&lt;/strong&gt;&lt;/a&gt; that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.
A big thanks from Servo to our newest Bronze Sponsors: &lt;strong&gt;Anthropy&lt;/strong&gt;, &lt;strong&gt;Niclas Overby&lt;/strong&gt;, and &lt;strong&gt;RxDB&lt;/strong&gt;!
If you’re interested in this kind of sponsorship, please contact us at &lt;a href=&quot;mailto:join@servo.org&quot;&gt;join@servo.org&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; right: calc(100% - 100% * 7110 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7110&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7110 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;7110&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;conference-talks-and-blogs&quot; tabindex=&quot;-1&quot;&gt;Conference talks and blogs &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2026/01/23/december-in-servo/#conference-talks-and-blogs&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We’ve recently published one talk and one blog post:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-W1mSXdlRqA&quot;&gt;&lt;strong&gt;Web engine CI on a shoestring budget&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://www.azabani.com/talks/2025-12-18-shoestring-web-engine-ci/&quot;&gt;slides&lt;/a&gt;; &lt;a href=&quot;https://blogs.igalia.com/mrego/servo-a-new-web-engine-written-in-rust/&quot;&gt;transcript&lt;/a&gt;) – Delan Azabani (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;) spoke about the CI system that keeps our builds and tryjobs moving fast, running nearly two million tests in under half an hour.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.igalia.com/mrego/servo-2025-stats/&quot;&gt;&lt;strong&gt;Servo 2025 Stats&lt;/strong&gt;&lt;/a&gt; – Manuel Rego (&lt;a href=&quot;https://github.com/mrego&quot;&gt;@mrego&lt;/a&gt;) wrote about the growth of the Servo project, and how our many new contributors have enabled that.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also have two &lt;strong&gt;upcoming&lt;/strong&gt; talks at &lt;a href=&quot;https://fosdem.org/2026/&quot;&gt;&lt;strong&gt;FOSDEM 2026&lt;/strong&gt;&lt;/a&gt; in &lt;strong&gt;Brussels&lt;/strong&gt; later this month:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/LXFKS9-servo-project-impact/&quot;&gt;&lt;strong&gt;The Servo project and its impact on the web platform ecosystem&lt;/strong&gt;&lt;/a&gt; – Manuel Rego (&lt;a href=&quot;https://github.com/mrego&quot;&gt;@mrego&lt;/a&gt;) is speaking on &lt;strong&gt;Saturday 31 January&lt;/strong&gt; at &lt;a href=&quot;https://everytimezone.com/?t=697d4600,8ac&quot;&gt;&lt;strong&gt;14:00 local time&lt;/strong&gt;&lt;/a&gt; (13:00 UTC), about Servo’s impact on spec issues, interop bugs, test cases, and the broader web platform ecosystem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/3J8GUD-servo-streams-reimplementation/&quot;&gt;&lt;strong&gt;Implementing Streams Spec in Servo web engine&lt;/strong&gt;&lt;/a&gt; – Taym Haddadi (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;) is speaking on &lt;strong&gt;Saturday 31 January&lt;/strong&gt; at &lt;a href=&quot;https://everytimezone.com/?t=697d4600,98d&quot;&gt;&lt;strong&gt;17:45 local time&lt;/strong&gt;&lt;/a&gt; (16:45 UTC), about our experiences writing a new implementation of the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Streams_API&quot;&gt;Streams API&lt;/a&gt; that is independent of the one in SpiderMonkey.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Servo developers Martin Robinson (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;) and Delan Azabani (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;) will also be attending FOSDEM 2026, so it would be a great time to come along and chat about Servo!&lt;/p&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
&lt;script&gt;
    (function makeVideoPlayersClickable() {
        addEventListener(&quot;toggle&quot;, event =&gt; {
            const details = event.target.closest(&quot;details&quot;);
            if (!details?.open) {
                return;
            }
            const video = details.querySelector(&quot;video&quot;);
            if (!video) {
                return;
            }
            if (video.fastSeek) {
                video.fastSeek(0);
            } else {
                video.currentTime = 0;
            }
            video.play();
        }, true);
    })();
&lt;/script&gt;
</content>
  </entry>
  <entry>
    <title>November in Servo: monthly releases, context menus, parallel CSS parsing, and more!</title>
    <link href="https://servo.org/twismar/blog/2025/12/15/november-in-servo/"/>
    <updated>2025-12-15T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2025/12/15/november-in-servo/</id>
    <content xml:lang="en" type="html">&lt;aside class=&quot;_correction&quot;&gt;
&lt;p&gt;&lt;strong&gt;Correction (2026-01-19)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo.org/pull/282&quot;&gt;An earlier version&lt;/a&gt; of this post said that Servo now has full support for ChaCha20-Poly1305, but this was incorrect. We had only landed the ‘importKey’ and ‘exportKey’ operations. The ‘encrypt’, ‘decrypt’, and ‘generateKey’ options landed in the following month.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;Landing in &lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.0.3&quot;&gt;&lt;strong&gt;Servo 0.0.3&lt;/strong&gt;&lt;/a&gt; and our November nightly builds, we now have &lt;strong&gt;context menus&lt;/strong&gt; for links, images, and other web content (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40434&quot;&gt;#40434&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40501&quot;&gt;#40501&lt;/a&gt;), &lt;strong&gt;vsync on Android&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40306&quot;&gt;#40306&lt;/a&gt;), &lt;strong&gt;light mode&lt;/strong&gt; for the &lt;strong&gt;new tab page&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40272&quot;&gt;#40272&lt;/a&gt;), plus several web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;video controls&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40578&quot;&gt;#40578&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;use&amp;gt;&lt;/strong&gt; in SVG (&lt;a href=&quot;https://github.com/WaterWhisperer&quot;&gt;@WaterWhisperer&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40684&quot;&gt;#40684&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;☢️ &lt;strong&gt;‘font-optical-sizing’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40829&quot;&gt;#40829&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40861&quot;&gt;#40861&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40884&quot;&gt;#40884&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘brotli’&lt;/strong&gt; in &lt;strong&gt;CompressionStream&lt;/strong&gt; and &lt;strong&gt;DecompressionStream&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40842&quot;&gt;#40842&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘display-p3-linear’&lt;/strong&gt; in CSS &lt;strong&gt;color()&lt;/strong&gt; and &lt;strong&gt;color-mix()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40525&quot;&gt;#40525&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;calc()&lt;/strong&gt; now works in &lt;strong&gt;grid layout&lt;/strong&gt; (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/34846&quot;&gt;#34846&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ResizeObserver&lt;/strong&gt; is now enabled by default (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40378&quot;&gt;#40378&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2025-12-diffie.png&quot; alt=&quot;Servo 0.0.3 showing new support for &lt;use&gt; in SVG, &lt;details name&gt;, and context menus&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Font variations&lt;/strong&gt; are now applied in &lt;strong&gt;‘font-weight’&lt;/strong&gt; and &lt;strong&gt;‘font-stretch’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40867&quot;&gt;#40867&lt;/a&gt;), fixing a rendering issue in the &lt;a href=&quot;https://webengineshackfest.org/&quot;&gt;Web Engines Hackfest website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt; has landed some huge improvements in the &lt;a href=&quot;https://w3c.github.io/webcrypto/&quot;&gt;&lt;strong&gt;SubtleCrypto API&lt;/strong&gt;&lt;/a&gt;, including some of the more &lt;a href=&quot;https://wicg.github.io/webcrypto-modern-algos/&quot;&gt;modern algorithms in this WICG draft&lt;/a&gt;, and a fix for constant-time base64 (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40334&quot;&gt;#40334&lt;/a&gt;).
We now have full support for &lt;strong&gt;SHA3-256&lt;/strong&gt;, &lt;strong&gt;SHA3-384&lt;/strong&gt;, &lt;strong&gt;SHA3-512&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40765&quot;&gt;#40765&lt;/a&gt;), &lt;strong&gt;cSHAKE128&lt;/strong&gt;, &lt;strong&gt;cSHAKE256&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40832&quot;&gt;#40832&lt;/a&gt;), &lt;strong&gt;Argon2d&lt;/strong&gt;, &lt;strong&gt;Argon2i&lt;/strong&gt;, &lt;strong&gt;Argon2id&lt;/strong&gt;, &lt;strong&gt;ChaCha20-Poly1305&lt;/strong&gt;, &lt;strong&gt;ECDH&lt;/strong&gt;, &lt;strong&gt;ECDSA&lt;/strong&gt;, and &lt;strong&gt;X25519&lt;/strong&gt;:&lt;/p&gt;
&lt;figure style=&quot;overflow-x: scroll;&quot;&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;deriveBits&lt;/th&gt;
&lt;th&gt;exportKey&lt;/th&gt;
&lt;th&gt;generateKey&lt;/th&gt;
&lt;th&gt;importKey&lt;/th&gt;
&lt;th&gt;sign&lt;/th&gt;
&lt;th&gt;verify&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Argon2d&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40936&quot;&gt;#40936&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40932&quot;&gt;#40932&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Argon2i&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40936&quot;&gt;#40936&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40932&quot;&gt;#40932&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Argon2id&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40936&quot;&gt;#40936&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40932&quot;&gt;#40932&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChaCha20-Poly1305&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40948&quot;&gt;#40948&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40948&quot;&gt;#40948&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECDH&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40333&quot;&gt;#40333&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40298&quot;&gt;#40298&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40305&quot;&gt;#40305&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40253&quot;&gt;#40253&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECDSA&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40536&quot;&gt;#40536&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40553&quot;&gt;#40553&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40523&quot;&gt;#40523&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40591&quot;&gt;#40591&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40557&quot;&gt;#40557&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;X25519&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40497&quot;&gt;#40497&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40421&quot;&gt;#40421&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40480&quot;&gt;#40480&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/servo/servo/pull/40398&quot;&gt;#40398&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;details&amp;gt;&lt;/strong&gt; now fires &lt;strong&gt;‘toggle’&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40271&quot;&gt;#40271&lt;/a&gt;), and &lt;strong&gt;&amp;lt;details name&amp;gt;&lt;/strong&gt; is now exclusive, like radio buttons (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40314&quot;&gt;#40314&lt;/a&gt;).
&lt;strong&gt;InputEvent&lt;/strong&gt;, which represents &lt;strong&gt;‘input’&lt;/strong&gt; and &lt;strong&gt;‘beforeinput’&lt;/strong&gt; events, now has &lt;strong&gt;composed&lt;/strong&gt;, &lt;strong&gt;data&lt;/strong&gt;, &lt;strong&gt;isComposing&lt;/strong&gt;, and &lt;strong&gt;inputType&lt;/strong&gt; properties (&lt;a href=&quot;https://github.com/excitablesnowball&quot;&gt;@excitablesnowball&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39989&quot;&gt;#39989&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;embedding-api&quot; tabindex=&quot;-1&quot;&gt;Embedding API &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/12/15/november-in-servo/#embedding-api&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Each webview&lt;/strong&gt; can now now have its &lt;strong&gt;own rendering context&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40794&quot;&gt;#40794&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40738&quot;&gt;#40738&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40721&quot;&gt;#40721&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40594&quot;&gt;#40594&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40923&quot;&gt;#40923&lt;/a&gt;).
This effectively enables full support for &lt;strong&gt;multiple windows&lt;/strong&gt;, and we’ve started incorporating that into servoshell (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40883&quot;&gt;#40883&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Our previously unused &lt;strong&gt;context menu API&lt;/strong&gt; has been replaced with a new, more effective API that includes actions for links, images, and other web content (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40402&quot;&gt;#40402&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40501&quot;&gt;#40501&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40607&quot;&gt;#40607&lt;/a&gt;).
For more details, see the docs for &lt;strong&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.ContextMenu.html&quot;&gt;ContextMenu&lt;/a&gt;&lt;/strong&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.EmbedderControl.html#variant.ContextMenu&quot;&gt;EmbedderControl::&lt;wbr /&gt;ContextMenu&lt;/a&gt;, and &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.show_embedder_control&quot;&gt;WebViewDelegate::&lt;wbr /&gt;show_&lt;wbr /&gt;embedder_&lt;wbr /&gt;control()&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;strong&gt;WebView&lt;/strong&gt;&lt;/a&gt; now has &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.can_go_back&quot;&gt;&lt;strong&gt;can_go_back()&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.can_go_forward&quot;&gt;&lt;strong&gt;can_go_forward()&lt;/strong&gt;&lt;/a&gt; methods, and servoshell now uses those to disable the back and forward buttons (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40598&quot;&gt;#40598&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Having introduced our new &lt;a href=&quot;https://doc.servo.org/servo/trait.RefreshDriver.html&quot;&gt;&lt;strong&gt;RefreshDriver&lt;/strong&gt;&lt;/a&gt; API in October, we’ve now &lt;strong&gt;removed &lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;Servo&lt;/a&gt;::&lt;wbr /&gt;animating()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40799&quot;&gt;#40799&lt;/a&gt;) and &lt;strong&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.ServoDelegate.html&quot;&gt;ServoDelegate&lt;/a&gt;::&lt;wbr /&gt;notify_&lt;wbr /&gt;animating_&lt;wbr /&gt;changed()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40886&quot;&gt;#40886&lt;/a&gt;), and similarly cleaned up the obsolete and inefficient “animating” state in servoshell (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40715&quot;&gt;#40715&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve moved virtually all of the useful items in the Servo API to the root of the &lt;code&gt;servo&lt;/code&gt; library crate (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40951&quot;&gt;#40951&lt;/a&gt;).
This is a &lt;strong&gt;breaking change&lt;/strong&gt;, but we expect that it will greatly simplify embedding Servo, and it means you can even write &lt;code&gt;use servo::*;&lt;/code&gt; in a pinch.&lt;/p&gt;
&lt;p&gt;When running Servo without a custom &lt;a href=&quot;https://doc.servo.org/servo/clipboard_delegate/trait.ClipboardDelegate.html&quot;&gt;&lt;strong&gt;ClipboardDelegate&lt;/strong&gt;&lt;/a&gt;, we normally use the system clipboard by default.
But if there’s no system clipboard, we now have a built-in &lt;strong&gt;fallback clipboard&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40408&quot;&gt;#40408&lt;/a&gt;), rather than having no clipboard at all.
Note that the fallback clipboard is very limited, as it can only store text and does not work across processes.&lt;/p&gt;
&lt;h2 id=&quot;performance-and-stability&quot; tabindex=&quot;-1&quot;&gt;Performance and stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/12/15/november-in-servo/#performance-and-stability&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo now &lt;strong&gt;parses CSS in parallel&lt;/strong&gt; with script and layout (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/vimpunk&quot;&gt;@vimpunk&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40639&quot;&gt;#40639&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40556&quot;&gt;#40556&lt;/a&gt;), and can now measure &lt;a href=&quot;https://web.dev/articles/lcp&quot;&gt;&lt;strong&gt;Largest Contentful Paint&lt;/strong&gt;&lt;/a&gt; in PerformanceObserver as well as in our internal profiling tools (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/boluochoufeng&quot;&gt;@boluochoufeng&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39714&quot;&gt;#39714&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39384&quot;&gt;#39384&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Just-in-time compilation&lt;/strong&gt; (JIT) is now &lt;strong&gt;optional&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37972&quot;&gt;#37972&lt;/a&gt;), which can be useful in situations where generating native code is forbidden by policy or unwanted for other reasons.&lt;/p&gt;
&lt;p&gt;We’ve improved the performance of incremental layout (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40795&quot;&gt;#40795&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40797&quot;&gt;#40797&lt;/a&gt;), touch input (&lt;a href=&quot;https://github.com/kongbai1996&quot;&gt;@kongbai1996&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40637&quot;&gt;#40637&lt;/a&gt;), animated GIF rendering (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40158&quot;&gt;#40158&lt;/a&gt;), the prefs subsystem (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40775&quot;&gt;#40775&lt;/a&gt;), and parseFromString() on DOMParser (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40742&quot;&gt;#40742&lt;/a&gt;).
We also use fewer IPC resources when internal profiling features are disabled (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40823&quot;&gt;#40823&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a bug causing &lt;strong&gt;&lt;a href=&quot;http://nytimes.com/&quot;&gt;nytimes.com&lt;/a&gt;&lt;/strong&gt; to hang (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40811&quot;&gt;#40811&lt;/a&gt;), as well as fixing crashes in &lt;strong&gt;&lt;a href=&quot;https://www.browserbench.org/Speedometer3.0/&quot;&gt;Speedometer 3.0&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&quot;https://www.browserbench.org/Speedometer3.1/&quot;&gt;3.1&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40459&quot;&gt;#40459&lt;/a&gt;), grid layout (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40821&quot;&gt;#40821&lt;/a&gt;), the fonts subsystem (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40913&quot;&gt;#40913&lt;/a&gt;), XPath (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40411&quot;&gt;#40411&lt;/a&gt;), ReadableStream (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40911&quot;&gt;#40911&lt;/a&gt;), AudioContext (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40729&quot;&gt;#40729&lt;/a&gt;), and when exiting Servo (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40933&quot;&gt;#40933&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/12/15/november-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;6433 USD/month&lt;/strong&gt; (+11.8% over October) in recurring donations.
This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;28 GitHub users&lt;/strong&gt; (same as October) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/twismar/blog/2025/11/21/sponsorship-tiers/&quot;&gt;&lt;strong&gt;sponsorship tiers&lt;/strong&gt;&lt;/a&gt; that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.
A big thanks from Servo to our newest Bronze Sponsors: &lt;strong&gt;Jenny &amp;amp; Phil Porada&lt;/strong&gt;, &lt;strong&gt;Josh Aas&lt;/strong&gt;, &lt;strong&gt;LambdaTest&lt;/strong&gt;, and &lt;strong&gt;Sandwich&lt;/strong&gt;!
If you’re interested in this kind of sponsorship, please contact us at &lt;a href=&quot;mailto:join@servo.org&quot;&gt;join@servo.org&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; right: calc(100% - 100% * 6433 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;6433&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 6433 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;6433&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
&lt;script&gt;
    (function makeVideoPlayersClickable() {
        addEventListener(&quot;toggle&quot;, event =&gt; {
            const details = event.target.closest(&quot;details&quot;);
            if (!details?.open) {
                return;
            }
            const video = details.querySelector(&quot;video&quot;);
            if (!video) {
                return;
            }
            if (video.fastSeek) {
                video.fastSeek(0);
            } else {
                video.currentTime = 0;
            }
            video.play();
        }, true);
    })();
&lt;/script&gt;
</content>
  </entry>
  <entry>
    <title>Servo Sponsorship Tiers</title>
    <link href="https://servo.org/twismar/blog/2025/11/21/sponsorship-tiers/"/>
    <updated>2025-11-21T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2025/11/21/sponsorship-tiers/</id>
    <content xml:lang="en" type="html">&lt;p&gt;The Servo project is happy to announce the following new &lt;strong&gt;sponsorship tiers&lt;/strong&gt; to encourage more donations to the project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Platinum: 10,000 USD/month&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gold: 5,000 USD/month&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Silver: 1,000 USD/month&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bronze: 100 USD/month&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Organizations and individual sponsors donating in these tiers will be &lt;strong&gt;acknowledged on the &lt;a href=&quot;https://servo.org/twismar/#sponsors&quot;&gt;servo.org homepage&lt;/a&gt; with their logo or name&lt;/strong&gt;. Please note that such donations should come with no obligations to the project i.e they should be “no strings attached” donations. All the information about these new tiers is available at the &lt;a href=&quot;https://servo.org/twismar/sponsorship/#sponsorship-tiers&quot;&gt;&lt;strong&gt;Sponsorship&lt;/strong&gt; page&lt;/a&gt; on this website.&lt;/p&gt;
&lt;p&gt;Please &lt;strong&gt;contact us at &lt;a href=&quot;mailto:join@servo.org&quot;&gt;join@servo.org&lt;/a&gt;&lt;/strong&gt; if you are interested in sponsoring the project through one of these tiers.&lt;/p&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last, but not least, we’re excited to &lt;strong&gt;welcome our first bronze sponsor &lt;a href=&quot;https://www.lambdatest.com/?utm_source=servo&amp;amp;utm_medium=sponsor&quot;&gt;LambdaTest&lt;/a&gt;&lt;/strong&gt; who has recently started donating to the Servo project. Thank you very much!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>October in Servo: better for the web, better for embedders, better for you</title>
    <link href="https://servo.org/twismar/blog/2025/11/14/october-in-servo/"/>
    <updated>2025-11-14T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2025/11/14/october-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;Servo now supports several new web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;source&amp;gt;&lt;/strong&gt; in &lt;strong&gt;&amp;lt;video&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;audio&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39717&quot;&gt;#39717&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CompressionStream&lt;/strong&gt; and &lt;strong&gt;DecompressionStream&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39658&quot;&gt;#39658&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fetchLater()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39547&quot;&gt;#39547&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document.parseHTMLUnsafe()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40246&quot;&gt;#40246&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;which&lt;/strong&gt; property on &lt;strong&gt;UIEvent&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40109&quot;&gt;#40109&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;relatedTarget&lt;/strong&gt; property on &lt;strong&gt;UIEvent&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40182&quot;&gt;#40182&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;self.name&lt;/strong&gt; and &lt;strong&gt;.onmessageerror&lt;/strong&gt; in dedicated workers (&lt;a href=&quot;https://github.com/yerke&quot;&gt;@yerke&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40156&quot;&gt;#40156&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;name&lt;/strong&gt; and &lt;strong&gt;areas&lt;/strong&gt; properties on &lt;strong&gt;HTMLMapElement&lt;/strong&gt; (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40133&quot;&gt;#40133&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2025-11-diffie.png&quot; alt=&quot;servoshell nightly showing new support for CompressionStream and synthetic bold&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;servoshell&lt;/strong&gt; for &lt;strong&gt;macOS&lt;/strong&gt; now ships as &lt;strong&gt;native Apple Silicon binaries&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39981&quot;&gt;#39981&lt;/a&gt;).
Building servoshell for macOS x86-64 still works for now, but is no longer officially supported by automated testing in CI (see &lt;em&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#for-developers&quot;&gt;§ For developers&lt;/a&gt;&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;servoshell&lt;/strong&gt; for &lt;strong&gt;Android&lt;/strong&gt;, you can now enable &lt;strong&gt;experimental mode&lt;/strong&gt; with just two taps (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40054&quot;&gt;#40054&lt;/a&gt;), use the &lt;strong&gt;software keyboard&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40009&quot;&gt;#40009&lt;/a&gt;), deliver &lt;strong&gt;touch events&lt;/strong&gt; to web content (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40240&quot;&gt;#40240&lt;/a&gt;), and dismiss the location field (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40049&quot;&gt;#40049&lt;/a&gt;).
&lt;strong&gt;Pinch zoom&lt;/strong&gt; is now fully supported in both Servo and &lt;strong&gt;servoshell&lt;/strong&gt;, taking into account the locations of pinch inputs (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40083&quot;&gt;#40083&lt;/a&gt;) and allowing keyboard scrolling when zoomed in (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40108&quot;&gt;#40108&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;div style=&quot;display:flex&quot;&gt;
        &lt;details style=&quot;position:relative;width:50%&quot;&gt;
            &lt;video src=&quot;https://servo.org/twismar/img/blog/2025-11-experimental.webm&quot; style=&quot;position:absolute;margin:0;inset:0;pointer-events:none&quot; loading=&quot;lazy&quot;&gt;servoshell on Android showing GitHub loaded with an internal error, then enabling experimental mode in the settings menu, then reloading the page successfully (click to pause)&lt;/video&gt;
            &lt;summary style=&quot;display:block&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-11-experimental.jpg&quot; style=&quot;margin:0&quot; loading=&quot;lazy&quot; /&gt;&lt;div style=&quot;position:absolute;inset:0;display:flex;justify-content:center;align-items:center;color:#1192e8;font-size:7em;cursor:pointer;-webkit-text-stroke:1rem color-mix(in oklch,#1192e8,black 20%);user-select:none&quot; alt=&quot;servoshell on Android showing GitHub loaded with an internal error, then enabling experimental mode in the settings menu, then reloading the page successfully (click to play)&quot;&gt;▶&lt;/div&gt;&lt;/summary&gt;
        &lt;/details&gt;
        &lt;details style=&quot;position:relative;width:50%&quot;&gt;
            &lt;video src=&quot;https://servo.org/twismar/img/blog/2025-11-input.webm&quot; style=&quot;position:absolute;margin:0;inset:0;pointer-events:none&quot; loading=&quot;lazy&quot;&gt;servoshell on Android showing a page that opens the software keyboard and listens for touch events (click to pause)&lt;/video&gt;
            &lt;summary style=&quot;display:block&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-11-input.jpg&quot; style=&quot;margin:0&quot; loading=&quot;lazy&quot; /&gt;&lt;div style=&quot;position:absolute;inset:0;display:flex;justify-content:center;align-items:center;color:#1192e8;font-size:7em;cursor:pointer;-webkit-text-stroke:1rem color-mix(in oklch,#1192e8,black 20%);user-select:none&quot; alt=&quot;servoshell on Android showing a page that opens the software keyboard and listens for touch events (click to play)&quot;&gt;▶&lt;/div&gt;&lt;/summary&gt;
        &lt;/details&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;servoshell on Android. &lt;strong&gt;Left:&lt;/strong&gt; you can now turn on experimental mode in the settings menu. &lt;strong&gt;Right:&lt;/strong&gt; we now support the soft keyboard and touch events.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;AbortController&lt;/strong&gt; and &lt;strong&gt;AbortSignal&lt;/strong&gt; are now &lt;strong&gt;enabled by default&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40079&quot;&gt;#40079&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39943&quot;&gt;#39943&lt;/a&gt;), after implementing &lt;strong&gt;AbortSignal.timeout()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40032&quot;&gt;#40032&lt;/a&gt;) and fixing &lt;strong&gt;throwIfAborted()&lt;/strong&gt; on &lt;strong&gt;AbortSignal&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40224&quot;&gt;#40224&lt;/a&gt;).
If this is the first time you’ve heard of them, you might be surprised how important they are for real-world web compat!
&lt;a href=&quot;https://webstatus.dev/features/aborting&quot;&gt;&lt;strong&gt;Over 40%&lt;/strong&gt;&lt;/a&gt; of Google Chrome page loads at least &lt;em&gt;check&lt;/em&gt; if they are supported, and many popular websites including GitHub and Discord are broken without them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;XPath&lt;/strong&gt; is now &lt;strong&gt;enabled by default&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40212&quot;&gt;#40212&lt;/a&gt;), after implementing &lt;strong&gt;‘@attr/parent’ queries&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39749&quot;&gt;#39749&lt;/a&gt;), &lt;strong&gt;Copy&lt;/strong&gt; &amp;gt; &lt;strong&gt;&lt;u&gt;X&lt;/u&gt;Path&lt;/strong&gt; in the &lt;strong&gt;DevTools Inspector&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39892&quot;&gt;#39892&lt;/a&gt;), completely rewriting the parser (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39977&quot;&gt;#39977&lt;/a&gt;), and landing several other fixes (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40103&quot;&gt;#40103&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40105&quot;&gt;#40105&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40161&quot;&gt;#40161&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40167&quot;&gt;#40167&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39751&quot;&gt;#39751&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39764&quot;&gt;#39764&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now supports &lt;code&gt;new KeyboardEvent({keyCode})&lt;/code&gt; and &lt;code&gt;({charCode})&lt;/code&gt; (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39590&quot;&gt;#39590&lt;/a&gt;), which is enough to get &lt;a href=&quot;https://browserbench.org/Speedometer3.0/&quot;&gt;&lt;strong&gt;Speedometer 3.0&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://browserbench.org/Speedometer3.1/&quot;&gt;&lt;strong&gt;3.1&lt;/strong&gt;&lt;/a&gt; working on macOS.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twismar/img/blog/2025-11-speedometer.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-11-speedometer-small.png&quot; alt=&quot;servoshell nightly showing Speedometer 3.1 running successfully on macOS&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;ImageData&lt;/strong&gt; can now be sent over &lt;strong&gt;postMessage()&lt;/strong&gt; and &lt;strong&gt;structuredClone()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40084&quot;&gt;#40084&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;layout-engine&quot; tabindex=&quot;-1&quot;&gt;Layout engine &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#layout-engine&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our layout engine can now render text in &lt;strong&gt;synthetic bold&lt;/strong&gt; (&lt;a href=&quot;https://github.com/minghuaw&quot;&gt;@minghuaw&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39519&quot;&gt;#39519&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39681&quot;&gt;#39681&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39633&quot;&gt;#39633&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39691&quot;&gt;#39691&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39713&quot;&gt;#39713&lt;/a&gt;), and now selects more appropriate fallback fonts for &lt;strong&gt;Kanji&lt;/strong&gt; in &lt;strong&gt;Japanese text&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arayaryoma&quot;&gt;@arayaryoma&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39608&quot;&gt;#39608&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘initial-scale’&lt;/strong&gt; now does the right thing in &lt;strong&gt;&amp;lt;meta name=viewport&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40055&quot;&gt;#40055&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the way we handle &lt;strong&gt;‘border-radius’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39571&quot;&gt;#39571&lt;/a&gt;) and &lt;strong&gt;margin collapsing&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/36322&quot;&gt;#36322&lt;/a&gt;).
While they’re fairly unassuming fixes on the surface, both of them allowed us to &lt;strong&gt;find interop issues&lt;/strong&gt; in the big incumbent engines (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/issues/39540&quot;&gt;#39540&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/issues/36321&quot;&gt;#36321&lt;/a&gt;) and &lt;strong&gt;help improve web standards&lt;/strong&gt; (&lt;a href=&quot;https://github.com/noamr&quot;&gt;@noamr&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/12961&quot;&gt;csswg-drafts#12961&lt;/a&gt;, &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/12218&quot;&gt;csswg-drafts#12218&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In other words, Servo is good for the web, even if you’re not using it yet!&lt;/p&gt;
&lt;h2 id=&quot;embedding-and-ecosystem&quot; tabindex=&quot;-1&quot;&gt;Embedding and ecosystem &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#embedding-and-ecosystem&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our HTML-compatible &lt;strong&gt;XPath&lt;/strong&gt; implementation now lives in its &lt;a href=&quot;https://github.com/servo/servo/tree/cd4c032908211fa2c26df550f6766080d1d28969/components/xpath&quot;&gt;own&lt;/a&gt; &lt;a href=&quot;https://doc.servo.org/xpath/&quot;&gt;crate&lt;/a&gt;, and it’s no longer limited to the Servo DOM (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39546&quot;&gt;#39546&lt;/a&gt;).
We don’t have any specific plans to release this as a standalone library just yet, but please let us know if you have a use case that would benefit from this!&lt;/p&gt;
&lt;p&gt;You can now &lt;strong&gt;take screenshots&lt;/strong&gt; of webviews with &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.take_screenshot&quot;&gt;take_screenshot&lt;/a&gt;&lt;/code&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39583&quot;&gt;#39583&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Historically Servo has struggled with situations causing &lt;strong&gt;100% CPU usage&lt;/strong&gt; or &lt;strong&gt;unnecessary work on every tick&lt;/strong&gt; of the event loop, whenever a page is considered “active” or “animating” (&lt;a href=&quot;https://github.com/servo/servo/issues/25305&quot;&gt;#25305&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/issues/3406&quot;&gt;#3406&lt;/a&gt;).
We had since throttled animations (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37169&quot;&gt;#37169&lt;/a&gt;) and reflows (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38431&quot;&gt;#38431&lt;/a&gt;), but only to fixed rates of 120 Hz and 60 Hz respectively.&lt;/p&gt;
&lt;p&gt;But starting this month, you can run Servo with &lt;strong&gt;vsync&lt;/strong&gt;, thanks to the &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.RefreshDriver.html&quot;&gt;RefreshDriver&lt;/a&gt;&lt;/code&gt; trait&lt;/strong&gt; (&lt;a href=&quot;https://github.com/coding-joedow&quot;&gt;@coding-joedow&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39072&quot;&gt;#39072&lt;/a&gt;), which allows embedders to tell Servo &lt;em&gt;when&lt;/em&gt; to start rendering each frame.
The &lt;a href=&quot;https://doc.servo.org/compositing/refresh_driver/struct.TimerRefreshDriver.html&quot;&gt;default driver&lt;/a&gt; continues to run at 120 Hz, but you can define and install your own with &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.ServoBuilder.html&quot;&gt;ServoBuilder&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.ServoBuilder.html#method.refresh_driver&quot;&gt;refresh_driver&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#breaking-changes&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Servo’s embedding API has had a few &lt;strong&gt;breaking changes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo_config/opts/struct.Opts.html&quot;&gt;Opts&lt;/a&gt;::&lt;wbr /&gt;wait_for_stable_image&lt;/code&gt; was &lt;strong&gt;removed&lt;/strong&gt;; to wait for a stable image, call &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.take_screenshot&quot;&gt;&lt;strong&gt;take_screenshot&lt;/strong&gt;&lt;/a&gt;&lt;/code&gt; instead (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39583&quot;&gt;#39583&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/enum.MouseButtonAction.html&quot;&gt;MouseButtonAction&lt;/a&gt;::&lt;wbr /&gt;Click&lt;/code&gt; was &lt;strong&gt;removed&lt;/strong&gt;; use &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/enum.MouseButtonAction.html#variant.Down&quot;&gt;&lt;strong&gt;Down&lt;/strong&gt;&lt;/a&gt;&lt;/code&gt; followed by &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/enum.MouseButtonAction.html#variant.Up&quot;&gt;&lt;strong&gt;Up&lt;/strong&gt;&lt;/a&gt;&lt;/code&gt;. &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event&quot;&gt;Click events&lt;/a&gt; need to be &lt;em&gt;derived&lt;/em&gt; from mouse button downs and ups to ensure that they are fired correctly (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39705&quot;&gt;#39705&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scrolling is now &lt;em&gt;derived&lt;/em&gt;&lt;/strong&gt; from mouse wheel events. When you have mouse wheel input to forward to Servo, you should now call &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.notify_input_event&quot;&gt;notify_input_event&lt;/a&gt;&lt;/code&gt; &lt;em&gt;only&lt;/em&gt;, not &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.notify_scroll_event&quot;&gt;notify_scroll_event&lt;/a&gt;&lt;/code&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40269&quot;&gt;#40269&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;set_pinch_zoom&lt;/code&gt; was renamed to &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.pinch_zoom&quot;&gt;pinch_zoom&lt;/a&gt;&lt;/code&gt;, to better reflect that &lt;strong&gt;pinch zoom&lt;/strong&gt; is always &lt;strong&gt;relative&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39868&quot;&gt;#39868&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve improved &lt;strong&gt;page zoom&lt;/strong&gt; in our webview API (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39738&quot;&gt;#39738&lt;/a&gt;), which includes some &lt;strong&gt;breaking changes&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;set_zoom&lt;/code&gt; was renamed to &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.set_page_zoom&quot;&gt;set_page_zoom&lt;/a&gt;&lt;/code&gt;, and it now takes an &lt;strong&gt;absolute&lt;/strong&gt; zoom value. This makes it idempotent, but it means if you want relative zoom, you’ll have to multiply the zoom values yourself.&lt;/li&gt;
&lt;li&gt;Use the new &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.page_zoom&quot;&gt;page_zoom&lt;/a&gt;&lt;/code&gt; method to get the current zoom value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;reset_zoom&lt;/code&gt; was removed; use &lt;code&gt;set_page_zoom(1.0)&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some &lt;strong&gt;breaking changes&lt;/strong&gt; were also needed to give embedders a more powerful way to &lt;strong&gt;share input events with webviews&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39720&quot;&gt;#39720&lt;/a&gt;).
Often both your app and the pages in your webviews may be interested in knowing when users press a key.
Servo handles these situations by asking the embedder for all potentially useful input events, then echoing some of them back:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Embedder calls &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.notify_input_event&quot;&gt;notify_input_event&lt;/a&gt;&lt;/code&gt; to tell Servo about an input event, then web content (and Servo) can handle the event.&lt;/li&gt;
&lt;li&gt;Servo calls &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;WebViewDelegate&lt;/a&gt;::&lt;wbr /&gt;notify_keyboard_event&lt;/code&gt; to tell the embedder about keyboard events that were neither &lt;a href=&quot;https://dom.spec.whatwg.org/#dom-event-preventdefault&quot;&gt;canceled by scripts&lt;/a&gt; nor handled by Servo itself. The event details is included in the arguments.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Embedders had &lt;strong&gt;no way of knowing &lt;em&gt;when&lt;/em&gt;&lt;/strong&gt; non-keyboard input events, or keyboard events that were canceled or handled by Servo, have &lt;strong&gt;completed all of their effects in Servo&lt;/strong&gt;.
This was good enough for servoshell’s overridable key bindings, but not for WebDriver, where commands like &lt;a href=&quot;https://w3c.github.io/webdriver/#perform-actions&quot;&gt;Perform Actions&lt;/a&gt; need to reliably wait for input events to be handled.
To solve these problems, we’ve replaced &lt;code&gt;notify_keyboard_event&lt;/code&gt; with &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.notify_input_event_handled&quot;&gt;notify_input_event_handled&lt;/a&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Embedder calls &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;WebView&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.notify_input_event&quot;&gt;notify_input_event&lt;/a&gt;&lt;/code&gt; to tell Servo about an input event, then web content (and Servo) can handle the event. &lt;strong&gt;This now returns an &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.InputEventId.html&quot;&gt;InputEventId&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt;, allowing embedders to remember input events that they still care about for step 2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servo calls &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;WebViewDelegate&lt;/a&gt;::&lt;wbr /&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.notify_input_event_handled&quot;&gt;notify_input_event_handled&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; to tell the embedder about &lt;strong&gt;every input event, when Servo has finished handling it&lt;/strong&gt;. The event details are &lt;strong&gt;not included&lt;/strong&gt; in the arguments, but you can use the &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.InputEventId.html&quot;&gt;InputEventId&lt;/a&gt;&lt;/code&gt; to look up the details in the embedder.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;perf-and-stability&quot; tabindex=&quot;-1&quot;&gt;Perf and stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#perf-and-stability&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo now does &lt;strong&gt;zero unnecessary layout work&lt;/strong&gt; when &lt;strong&gt;updating canvases&lt;/strong&gt; and &lt;strong&gt;animated images&lt;/strong&gt;, thanks to a new “UpdatedImageData” layout mode (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38991&quot;&gt;#38991&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed crashes when clicking on web content on Android (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39771&quot;&gt;#39771&lt;/a&gt;), and when running Servo on platforms where JIT is forbidden (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40071&quot;&gt;#40071&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/40130&quot;&gt;#40130&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;for-developers&quot; tabindex=&quot;-1&quot;&gt;For developers &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#for-developers&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CI builds for &lt;strong&gt;pull requests&lt;/strong&gt; should now take &lt;strong&gt;70% less time&lt;/strong&gt;, since they now run on self-hosted CI runners (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39900&quot;&gt;#39900&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39915&quot;&gt;#39915&lt;/a&gt;).
&lt;strong&gt;Bencher builds&lt;/strong&gt; for runtime benchmarking now run on our new &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;dedicated&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;, so our &lt;a href=&quot;https://bencher.dev/perf/servo?branches=52e1e9bb-959c-4171-a53d-e06bd694a6c1&amp;amp;testbeds=d742c702-3842-4108-9d0c-2db74e57599a%2Cd5e49dbe-b866-453a-b6ac-1cc2c452b846&amp;amp;benchmarks=0df0380f-9809-45bc-b525-b6ad9d5fbe91%2Cf7c6adb5-e702-42bc-902c-d2154b1e2428&amp;amp;measures=e71c685b-9ce9-4abc-a55d-a1de2ffe04fb&amp;amp;start_time=1733011200000&amp;amp;end_time=1764460800000&quot;&gt;Speedometer&lt;/a&gt; and Dromaeo data should now be more accurate and less noisy (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39272&quot;&gt;#39272&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve now switched all of our macOS builds to run on arm64 (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38460&quot;&gt;#38460&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39968&quot;&gt;#39968&lt;/a&gt;).
This helps back our macOS releases with thorough automated testing on the same architecture as our releases, but we can’t run them on self-hosted CI runners yet, so they may be slower for the time being.&lt;/p&gt;
&lt;p&gt;Work is underway to set up faster macOS arm64 runners on our own servers (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/ci-runners/pull/64&quot;&gt;ci-runners#64&lt;/a&gt;), funded by your donations. Speaking of which!&lt;/p&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/11/14/october-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;5753 USD/month&lt;/strong&gt; (+1.7% over September) in recurring donations.&lt;/p&gt;
&lt;p&gt;This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.
Keep an eye out for &lt;a href=&quot;https://github.com/servo/servo/issues/38141&quot;&gt;further CI improvements&lt;/a&gt; in the coming months, including &lt;a href=&quot;https://github.com/servo/ci-runners/pull/64&quot;&gt;faster macOS arm64 builds&lt;/a&gt; and &lt;a href=&quot;https://github.com/servo/ci-runners/issues/21&quot;&gt;ten-minute WPT builds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;28 GitHub users&lt;/strong&gt; (same as September) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; right: calc(100% - 100% * 5753 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;5753&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 5753 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;5753&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
&lt;script&gt;
    (function makeVideoPlayersClickable() {
        addEventListener(&quot;toggle&quot;, event =&gt; {
            const details = event.target.closest(&quot;details&quot;);
            if (!details?.open) {
                return;
            }
            const video = details.querySelector(&quot;video&quot;);
            if (!video) {
                return;
            }
            if (video.fastSeek) {
                video.fastSeek(0);
            } else {
                video.currentTime = 0;
            }
            video.play();
        }, true);
    })();
&lt;/script&gt;
</content>
  </entry>
  <entry>
    <title>This month in Servo: experimental mode, Trusted Types, strokeText(), and more!</title>
    <link href="https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/"/>
    <updated>2025-10-24T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;September was another busy month for Servo, with a bunch of new features landing in our nightly builds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;Trusted Types&lt;/strong&gt; API is now stable (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39281&quot;&gt;#39281&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39263&quot;&gt;#39263&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;strokeText()&lt;/strong&gt; on CanvasRenderingContext2D (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39183&quot;&gt;#39183&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;invertSelf()&lt;/strong&gt; on DOMMatrix (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39148&quot;&gt;#39148&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getType()&lt;/strong&gt; and &lt;strong&gt;supports()&lt;/strong&gt; on ClipboardItem (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39296&quot;&gt;#39296&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getAll()&lt;/strong&gt; and &lt;strong&gt;getAllKeys()&lt;/strong&gt; on IDBObjectStore (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38885&quot;&gt;#38885&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;scrollParent&lt;/strong&gt; property on HTMLElement (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39110&quot;&gt;#39110&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sizes&lt;/strong&gt; property on HTMLImageElement (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39466&quot;&gt;#39466&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2025-10-diffie.jpg&quot; alt=&quot;servoshell nightly showing new support for the strokeText() method on CanvasRenderingContext2D&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;servoshell now has a new &lt;strong&gt;experimental mode button&lt;/strong&gt; (☢).
Turning on experimental mode has the same effect as running Servo with &lt;code&gt;--enable-experimental-web-platform-features&lt;/code&gt;: it enables all engine features, even those that may not be stable or complete.
This works much like Chromium’s option with the same name, and it can be useful when a page is not functioning correctly, since it may allow the page to make further progress.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2025-10-experimental.png&quot; alt=&quot;servoshell nightly showing the new experimental mode button (☢), which enables experimental web platform features&quot; /&gt;
    &lt;figcaption&gt;Top to bottom: experimental mode off, experimental mode on.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Viewport meta&lt;/strong&gt; tags are now enabled on mobile devices only, fixing a bug where they were enabled on desktop (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39133&quot;&gt;#39133&lt;/a&gt;).
You can still enable them if needed with &lt;code&gt;--pref viewport_meta_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39207&quot;&gt;#39207&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now supports &lt;strong&gt;‘&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Encoding&quot;&gt;Content-Encoding&lt;/a&gt;: &lt;a href=&quot;https://en.wikipedia.org/wiki/Zstd&quot;&gt;zstd&lt;/a&gt;’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/36530&quot;&gt;#36530&lt;/a&gt;), and we’ve fixed a bug causing spurious credentials prompts when a HTTP 401 has no ‘WWW-Authenticate’ header (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39215&quot;&gt;#39215&lt;/a&gt;).
We’ve also made a bunch of progress on &lt;strong&gt;AbortController&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39290&quot;&gt;#39290&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39295&quot;&gt;#39295&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39374&quot;&gt;#39374&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39406&quot;&gt;#39406&lt;/a&gt;) and &lt;strong&gt;&amp;lt;link rel=preload&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39033&quot;&gt;#39033&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39034&quot;&gt;#39034&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39052&quot;&gt;#39052&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39146&quot;&gt;#39146&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39167&quot;&gt;#39167&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘Content-Security-Policy: sandbox’&lt;/strong&gt; now &lt;strong&gt;disables scripting&lt;/strong&gt; unless &lt;strong&gt;‘allow-scripts’&lt;/strong&gt; is given (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39163&quot;&gt;#39163&lt;/a&gt;), and &lt;strong&gt;crypto.subtle.exportKey()&lt;/strong&gt; can now export HMAC keys in &lt;code&gt;raw&lt;/code&gt; format (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39059&quot;&gt;#39059&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;scrollIntoView()&lt;/strong&gt; method on Element now works with shadow DOM (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39144&quot;&gt;#39144&lt;/a&gt;), and recurses to parent iframes if they are same origin (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39475&quot;&gt;#39475&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39397&quot;&gt;#39397&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39153&quot;&gt;#39153&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Several types of &lt;strong&gt;DOM exceptions can now have error messages&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/rodio&quot;&gt;@rodio&lt;/a&gt;, &lt;a href=&quot;https://github.com/excitablesnowball&quot;&gt;@excitablesnowball&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39056&quot;&gt;#39056&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39394&quot;&gt;#39394&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39535&quot;&gt;#39535&lt;/a&gt;), and we’ve also fixed a bug where links often need to be clicked twice (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39326&quot;&gt;#39326&lt;/a&gt;), and fixed bugs affecting &amp;lt;img&amp;gt; attribute changes (&lt;a href=&quot;https://github.com/tharkum&quot;&gt;@tharkum&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39483&quot;&gt;#39483&lt;/a&gt;), the ‘:defined’ selector (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39325&quot;&gt;#39325&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39390&quot;&gt;#39390&lt;/a&gt;), invertSelf() on DOMMatrix (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39113&quot;&gt;#39113&lt;/a&gt;), and the ‘href’ setter on Location (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39051&quot;&gt;#39051&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;One complex part of Servo isn’t even written in Rust, it’s written in Python!
&lt;a href=&quot;https://github.com/servo/servo/blob/25d3c5a157e781db8813071a5ba647463546d0cd/components/script_bindings/codegen/codegen.py&quot;&gt;&lt;strong&gt;codegen.py&lt;/strong&gt;&lt;/a&gt;, which describes how to generate Rust code with bindings for every known DOM interface from the WebIDL, is now &lt;strong&gt;fully type annotated&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jerensl&quot;&gt;@jerensl&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39070&quot;&gt;#39070&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38998&quot;&gt;#38998&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;embedding-and-automation&quot; tabindex=&quot;-1&quot;&gt;Embedding and automation &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/#embedding-and-automation&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo now requires &lt;strong&gt;Rust 1.86&lt;/strong&gt; to build (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39185&quot;&gt;#39185&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keyboard scrolling&lt;/strong&gt; is now automatically implemented by Servo (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39371&quot;&gt;#39371&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39469&quot;&gt;#39469&lt;/a&gt;), so embedders &lt;a href=&quot;https://github.com/servo/servo/pull/39371/files#diff-24ced12025398fd76b233d19f4507362ae8b3848157577d8041effc4c4a229ae&quot;&gt;no longer&lt;/a&gt; need to translate &lt;strong&gt;arrow keys&lt;/strong&gt;, &lt;strong&gt;Home&lt;/strong&gt;, &lt;strong&gt;End&lt;/strong&gt;, &lt;strong&gt;Page Up&lt;/strong&gt;, and &lt;strong&gt;Page Down&lt;/strong&gt; to WebView API calls.
This change also improves the behaviour of those keys, scrolling the element or &amp;lt;iframe&amp;gt; that was focused or most recently clicked (or a nearby ancestor).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo_config/opts/struct.DebugOptions.html&quot;&gt;DebugOptions&lt;/a&gt;::convert_mouse_to_touch&lt;/code&gt; (&lt;code&gt;-Z convert-mouse-to-touch&lt;/code&gt;) has been removed (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39352&quot;&gt;#39352&lt;/a&gt;), with no replacement.
Touch event simulation continues to be available in servoshell as &lt;code&gt;--simulate-touch-events&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo_config/opts/struct.DebugOptions.html&quot;&gt;DebugOptions&lt;/a&gt;::webrender_stats&lt;/code&gt; (&lt;code&gt;-Z wr-stats&lt;/code&gt; in servoshell) has been removed (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39331&quot;&gt;#39331&lt;/a&gt;); instead call &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.toggle_webrender_debugging&quot;&gt;toggle_webrender_debugging&lt;/a&gt;(&lt;a href=&quot;https://doc.servo.org/servo/enum.WebRenderDebugOption.html#variant.Profiler&quot;&gt;Profiler&lt;/a&gt;)&lt;/code&gt; on a WebView (or press &lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;F12&lt;/strong&gt; in servoshell).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo_config/opts/struct.DebugOptions.html&quot;&gt;DebugOptions&lt;/a&gt;::trace_layout&lt;/code&gt; (&lt;code&gt;-Z trace-layout&lt;/code&gt;) has been removed (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39332&quot;&gt;#39332&lt;/a&gt;), since it had no effect.&lt;/p&gt;
&lt;p&gt;We’ve improved the docs for &lt;code&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;WebViewDelegate&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.notify_history_changed&quot;&gt;notify_history_changed&lt;/a&gt;&lt;/code&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39134&quot;&gt;#39134&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When automating servoshell with &lt;strong&gt;WebDriver&lt;/strong&gt;, commands &lt;strong&gt;targeting elements&lt;/strong&gt; now correctly &lt;strong&gt;scroll into view&lt;/strong&gt; if needed (&lt;a href=&quot;https://github.com/PotatoCP&quot;&gt;@PotatoCP&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38508&quot;&gt;#38508&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39265&quot;&gt;#39265&lt;/a&gt;), allowing &lt;strong&gt;Element Click&lt;/strong&gt;, &lt;strong&gt;Element Send Keys&lt;/strong&gt;, &lt;strong&gt;Element Clear&lt;/strong&gt;, and &lt;strong&gt;Take Element Screenshot&lt;/strong&gt; to work properly when the element is outside the viewport.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebDriver mouse inputs&lt;/strong&gt; now work correctly with &lt;strong&gt;HiDPI scaling&lt;/strong&gt; on more platforms (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39472&quot;&gt;#39472&lt;/a&gt;), and we’ve improved the reliability of &lt;strong&gt;Take Screenshot&lt;/strong&gt;, &lt;strong&gt;Take Element Screenshot&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39499&quot;&gt;#39499&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39539&quot;&gt;#39539&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39543&quot;&gt;#39543&lt;/a&gt;), &lt;strong&gt;Switch To Frame&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39086&quot;&gt;#39086&lt;/a&gt;), &lt;strong&gt;Switch To Window&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39241&quot;&gt;#39241&lt;/a&gt;), and &lt;strong&gt;New Session&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39040&quot;&gt;#39040&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;These improvements have enabled us to run the &lt;strong&gt;WebDriver conformance tests&lt;/strong&gt; in CI by default (&lt;a href=&quot;https://github.com/PotatoCP&quot;&gt;@PotatoCP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39087&quot;&gt;#39087&lt;/a&gt;), and also mean we’re closer than ever to running &lt;a href=&quot;https://web-platform-tests.org/writing-tests/testdriver.html&quot;&gt;WebDriver-based Web Platform Tests&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;servoshell&quot; tabindex=&quot;-1&quot;&gt;servoshell &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/#servoshell&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Favicons&lt;/strong&gt; now update correctly when you &lt;strong&gt;navigate back and forward&lt;/strong&gt; (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39575&quot;&gt;#39575&lt;/a&gt;), not just when you load a new page.&lt;/p&gt;
&lt;p&gt;servoshell’s &lt;strong&gt;command line argument parsing&lt;/strong&gt; has been reworked (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37194&quot;&gt;#37194&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39316&quot;&gt;#39316&lt;/a&gt;), which should fix the confusing behaviour of some options.&lt;/p&gt;
&lt;p&gt;On mobile devices, servoshell now resizes the webview correctly when the available space changes (&lt;a href=&quot;https://github.com/blueguy1&quot;&gt;@blueguy1&lt;/a&gt;, &lt;a href=&quot;https://github.com/yjx&quot;&gt;@yjx&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39507&quot;&gt;#39507&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;On macOS, telling servoshell to &lt;a href=&quot;https://w3c.github.io/webdriver/#screen-capture&quot;&gt;&lt;strong&gt;take a screenshot&lt;/strong&gt;&lt;/a&gt; no longer hides the window (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39500&quot;&gt;#39500&lt;/a&gt;).
This does not affect taking a screenshot in headless mode (&lt;code&gt;--headless&lt;/code&gt;), where there continues to be no window at all.&lt;/p&gt;
&lt;h2 id=&quot;performance&quot; tabindex=&quot;-1&quot;&gt;Performance &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/#performance&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo currently runs in &lt;strong&gt;single-process mode&lt;/strong&gt; unless you opt in to &lt;code&gt;--multiprocess&lt;/code&gt; mode, and we’ve landed a few perf improvements in that default mode.
For one, in single-process mode, script can now &lt;strong&gt;communicate with the embedder directly&lt;/strong&gt; for reduced latency (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39039&quot;&gt;#39039&lt;/a&gt;).
We also create one thread pool for the image cache now, rather than one pool per origin (&lt;a href=&quot;https://github.com/rodio&quot;&gt;@rodio&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38783&quot;&gt;#38783&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Many components of Servo that &lt;em&gt;would&lt;/em&gt; be &lt;a href=&quot;https://book.servo.org/architecture/overview.html#architecture&quot;&gt;separated by a process boundary&lt;/a&gt; in multiprocess mode, now use &lt;a href=&quot;https://docs.rs/crossbeam-channel/0.5.15/crossbeam_channel/&quot;&gt;crossbeam channels&lt;/a&gt; in single-process mode, rather than using &lt;a href=&quot;https://docs.rs/ipc-channel/0.20.2/ipc_channel/&quot;&gt;IPC channels&lt;/a&gt; in both modes (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39073&quot;&gt;#39073&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39076&quot;&gt;#39076&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39345&quot;&gt;#39345&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39347&quot;&gt;#39347&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39348&quot;&gt;#39348&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39074&quot;&gt;#39074&lt;/a&gt;).
&lt;a href=&quot;https://docs.rs/ipc-channel/0.20.2/ipc_channel/&quot;&gt;IPC channels&lt;/a&gt; are required when communicating with another process, but they’re more expensive, because they require serialising and deserialising each message, plus resources from the operating system.&lt;/p&gt;
&lt;p&gt;We’ve started working on an optimisation for string handling in Servo’s DOM layer (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39480&quot;&gt;#39480&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39481&quot;&gt;#39481&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39504&quot;&gt;#39504&lt;/a&gt;).
Strings in our DOM have historically been represented as &lt;a href=&quot;https://doc.rust-lang.org/std/string/struct.String.html&quot;&gt;ordinary Rust strings&lt;/a&gt;, but they often come from SpiderMonkey, where they use &lt;a href=&quot;https://searchfox.org/firefox-main/rev/8e5d58cfed616cb90586c614e53d8ab1ffc8af27/js/src/vm/StringType.h#83&quot;&gt;a variety of representations&lt;/a&gt;, none of which are entirely compatible.
SpiderMonkey strings would continue to need conversion to Servo strings, but the idea we’re working towards is to &lt;strong&gt;make the conversion lazy&lt;/strong&gt;, in the hope that many strings will never end up being converted at all.&lt;/p&gt;
&lt;p&gt;We now use a faster hash algorithm for internal hashmaps that are not security-critical (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39106&quot;&gt;#39106&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39166&quot;&gt;#39166&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39202&quot;&gt;#39202&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39233&quot;&gt;#39233&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39244&quot;&gt;#39244&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39168&quot;&gt;#39168&lt;/a&gt;).
These changes also switch that faster algorithm from &lt;a href=&quot;https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function&quot;&gt;FNV&lt;/a&gt; to an &lt;a href=&quot;https://docs.rs/rustc-hash/2.1.1/rustc_hash/&quot;&gt;even simpler polynomial hash&lt;/a&gt;, following in the footsteps of &lt;a href=&quot;https://github.com/rust-lang/rust/pull/37229&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1477628&quot;&gt;Stylo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve also landed a few more self-contained perf improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;speeding up accesses to the event loop (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39274&quot;&gt;#39274&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39275&quot;&gt;#39275&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;avoviding new display lists while loading CSS images (&lt;a href=&quot;https://github.com/coding-joedow&quot;&gt;@coding-joedow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39201&quot;&gt;#39201&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;reducing memory usage (&lt;a href=&quot;https://github.com/ritoban23&quot;&gt;@ritoban23&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39351&quot;&gt;#39351&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;reducing binary size (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39437&quot;&gt;#39437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39567&quot;&gt;#39567&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;5654 USD/month&lt;/strong&gt; (+1.8% over August) in recurring donations.&lt;/p&gt;
&lt;p&gt;This helps us cover the cost of our &lt;strong&gt;&lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;https://ci3.servo.org/&quot;&gt;benchmarking&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;servers&lt;/a&gt;&lt;/strong&gt;, one of our latest &lt;strong&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;maintainer work&lt;/a&gt;&lt;/strong&gt; that helps more people contribute to Servo.
Keep an eye out for &lt;a href=&quot;https://github.com/servo/servo/issues/38141&quot;&gt;further CI improvements&lt;/a&gt; in the coming months, including &lt;a href=&quot;https://github.com/servo/servo/pull/39900&quot;&gt;faster pull request checks&lt;/a&gt; and &lt;a href=&quot;https://github.com/servo/ci-runners/issues/21&quot;&gt;ten-minute WPT builds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;28 GitHub users&lt;/strong&gt; (±13 from August) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 5654 / 10000); padding-left: 0.5em;&quot;&gt;&lt;strong&gt;5654&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 5654 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;5654&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Use of donations is decided transparently via the Technical Steering Committee’s public &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/project/blob/main/FUNDING_REQUEST.md&quot;&gt;funding request process&lt;/a&gt;&lt;/strong&gt;, and active proposals are tracked in &lt;a href=&quot;https://github.com/servo/project/issues/187&quot;&gt;servo/project#187&lt;/a&gt;.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;conference-talks&quot; tabindex=&quot;-1&quot;&gt;Conference talks &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/10/24/this-month-in-servo/#conference-talks&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://ke.segmentfault.com/course/1650000043885605/section/1500000047216580&quot;&gt;MiniApps Design and Servo&lt;/a&gt;&lt;/strong&gt; (starting at ~2:37:00; &lt;a href=&quot;https://www.w3.org/2024/01/webevolve-series-events/annual-2025/slides/gregory-terzian.pdf&quot;&gt;slides&lt;/a&gt;) — Gregory Terzian (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;) spoke about how Servo can be used as a web engine for mini-app platforms at &lt;a href=&quot;https://www.w3.org/2024/01/webevolve-series-events/annual-2025/high-perf.en.html&quot;&gt;WebEvolve 2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://ke.segmentfault.com/course/1650000043885605/section/1500000047216580&quot;&gt;独⽴的，轻量级，模块化与并⾏处理架构的Web引擎开发&lt;/a&gt;&lt;/strong&gt; [zh] / &lt;strong&gt;Developing an independent, light-weight, modular and parallel web-engine&lt;/strong&gt; [en] (starting at ~5:49:00; &lt;a href=&quot;https://www.w3.org/2024/01/webevolve-series-events/annual-2025/slides/jonathan-schwender.pdf&quot;&gt;slides&lt;/a&gt;) — Jonathan Schwender (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;) spoke about Servo’s goals and status at &lt;a href=&quot;https://www.w3.org/2024/01/webevolve-series-events/annual-2025/high-perf.en.html&quot;&gt;WebEvolve 2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Servo: A new web engine written in Rust&lt;/strong&gt;* (&lt;a href=&quot;https://docs.google.com/presentation/d/1t15UKit4UPkZ-4ankkvsTJdpQWdBCmeTXLALeLk9n34&quot;&gt;slides&lt;/a&gt;; &lt;a href=&quot;https://blogs.igalia.com/mrego/servo-a-new-web-engine-written-in-rust/&quot;&gt;transcript&lt;/a&gt;) — Manuel Rego (&lt;a href=&quot;https://github.com/rego&quot;&gt;@rego&lt;/a&gt;) spoke about the Servo project at &lt;a href=&quot;https://hangzhou2025.gosim.org/&quot;&gt;GOSIM Hangzhou 2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Driving Innovation with Servo and OpenHarmony: Unified Rendering and WebDriver&lt;/strong&gt;* (&lt;a href=&quot;https://servo.org/twismar/files/2025-09-13-driving-innovation-with-servo-and-openharmony-unified-rendering-and-webdriver.pdf&quot;&gt;slides&lt;/a&gt;) — Jingshi Shangguan &amp;amp; Zhizhen Ye (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;) spoke about a new OpenHarmony rendering backend and WebDriver support in Servo at &lt;a href=&quot;https://hangzhou2025.gosim.org/&quot;&gt;GOSIM Hangzhou 2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Joy and Value of Embedded Servo Systems&lt;/strong&gt;* (&lt;a href=&quot;https://servo.org/twismar/files/2025-09-13-the-joy-and-value-of-embedded-servo-systems.pdf&quot;&gt;slides&lt;/a&gt;) — Gregory Terzian (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;) spoke about embedding Servo at &lt;a href=&quot;https://hangzhou2025.gosim.org/&quot;&gt;GOSIM Hangzhou 2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Dive Into the Servo Layout System&lt;/strong&gt;* (&lt;a href=&quot;https://servo.org/twismar/files/2025-09-13-a-dive-into-the-servo-layout-system.pdf&quot;&gt;slides&lt;/a&gt;) — Martin Robinson (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;) &amp;amp; Oriol Brufau (&lt;a href=&quot;https://github.com/obrufau&quot;&gt;@obrufau&lt;/a&gt;) spoke about the architecture of Servo’s parallel and incremental layout system at &lt;a href=&quot;https://hangzhou2025.gosim.org/&quot;&gt;GOSIM Hangzhou 2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;* video coming soon; go to our &lt;a href=&quot;https://servo.org/twismar/about/&quot;&gt;About page&lt;/a&gt; for updates&lt;/small&gt;&lt;/p&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
</content>
  </entry>
  <entry>
    <title>Servo 0.0.1 Release</title>
    <link href="https://servo.org/twismar/blog/2025/10/20/servo-0.0.1-release/"/>
    <updated>2025-10-20T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2025/10/20/servo-0.0.1-release/</id>
    <content xml:lang="en" type="html">&lt;p&gt;Today, the Servo team has released new versions of the &lt;code&gt;servoshell&lt;/code&gt; binaries for all our supported platforms, tagged &lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.0.1&quot;&gt;v0.0.1&lt;/a&gt;. These binaries are essentially the same nightly builds that were already available from the &lt;a href=&quot;https://servo.org/download&quot;&gt;download page&lt;/a&gt; with additional manual testing, now tagging them explicitly as releases for future reference.&lt;/p&gt;
&lt;p&gt;We plan to publish such a tagged release every month. For now, we are adopting a simple release process where we will use a recent nightly build and perform additional manual testing to identify issues and regressions before tagging and publishing the binaries.&lt;/p&gt;
&lt;p&gt;There are currently no plans to publish these releases on &lt;a href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt; or platform-specific app stores. The goal is just to publish &lt;a href=&quot;https://github.com/servo/servo/releases&quot;&gt;tagged releases on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>This month in Servo: variable fonts, network tools, SVG, and more!</title>
    <link href="https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/"/>
    <updated>2025-09-25T00:00:00Z</updated>
    <id>https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;Another month, another record number of pull requests merged!
August flew by, and with it came &lt;strong&gt;447 pull requests&lt;/strong&gt; from Servo contributors.
It was also the final month of our &lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; cohort; you can read &lt;a href=&quot;https://www.jerensl.com/blog/en-final-project-progress-outreachy/&quot;&gt;Jerens’&lt;/a&gt; and &lt;a href=&quot;https://uthmaniv.github.io/&quot;&gt;Uthman’s&lt;/a&gt; blogs to learn about how it went!&lt;/p&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#highlights&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our big new feature this month is rendering &lt;strong&gt;inline SVG elements&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38188&quot;&gt;#38188&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38603&quot;&gt;#38603&lt;/a&gt;).
This improves the appearance of many popular websites.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://servo.org/twismar/img/blog/2025-09-svg.png&quot;&gt;&lt;img alt=&quot;Screenshot of servoshell with the Google homepage loaded&quot; src=&quot;https://servo.org/twismar/img/blog/2025-09-svg.png&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;Did you know that the Google logo is an SVG element?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;We have implemented &lt;strong&gt;named grid line lines and areas&lt;/strong&gt; (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/loirooriol&quot;&gt;@loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38306&quot;&gt;#38306&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38574&quot;&gt;#38574&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38493&quot;&gt;#38493&lt;/a&gt;), still gated behind the &lt;code&gt;layout_grid_enabled&lt;/code&gt; preference (&lt;a href=&quot;https://github.com/servo/servo/pull/38306&quot;&gt;#38306&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38574&quot;&gt;#38574&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://servo.org/twismar/img/blog/2025-09-grid.jpg&quot;&gt;&lt;img alt=&quot;Screenshot of servoshell loading a page demoing a complex grid layout&quot; src=&quot;https://servo.org/twismar/img/blog/2025-09-grid.jpg&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;CSS grids are all around us.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Servo now supports CSS &lt;strong&gt;‘font-variation-settings’&lt;/strong&gt; on all main desktop platforms (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38642&quot;&gt;#38642&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38760&quot;&gt;#38760&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38831&quot;&gt;#38831&lt;/a&gt;).
This feature is currently gated behind the &lt;code&gt;layout_variable_fonts_enabled&lt;/code&gt; preference.
We also respect &lt;code&gt;format(*-variations)&lt;/code&gt; inside &lt;code&gt;@font-face&lt;/code&gt; rules (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38832&quot;&gt;#38832&lt;/a&gt;).
Additionally, Servo now reads data from &lt;strong&gt;OpenType Collection (.ttc)&lt;/strong&gt; system font files on macOS (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38753&quot;&gt;#38753&lt;/a&gt;), and uses &lt;code&gt;Helvetica&lt;/code&gt; for the &lt;strong&gt;‘system-ui’&lt;/strong&gt; font (&lt;a href=&quot;https://github.com/dpogue&quot;&gt;@dpogue&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39001&quot;&gt;#39001&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
  &lt;details style=&quot;position:relative&quot;&gt;
    &lt;img src=&quot;https://servo.org/twismar/img/blog/2025-09-variations.webp&quot; style=&quot;position:absolute;margin:0;inset:0;pointer-events:none&quot; loading=&quot;lazy&quot; alt=&quot;servoshell nightly showcasing variable fonts, with variable weight (`wght`) values smoothly increasing and decreasing (click to pause)&quot; /&gt;
    &lt;summary style=&quot;display:block&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-09-variations-preview.png&quot; style=&quot;margin:0&quot; loading=&quot;lazy&quot; /&gt;&lt;div style=&quot;position:absolute;inset:0;display:flex;justify-content:center;align-items:center;color:#1192e8;font-size:7em;cursor:pointer;-webkit-text-stroke:1rem color-mix(in oklch,#1192e8,black 20%);user-select:none&quot; alt=&quot;servoshell nightly showcasing variable fonts, with variable weight (`wght`) values smoothly increasing and decreasing (click to play)&quot;&gt;▶&lt;/div&gt;&lt;/summary&gt;
  &lt;/details&gt;
  &lt;figcaption&gt;This font can be customized!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Our &lt;a href=&quot;https://book.servo.org/hacking/using-devtools.html&quot;&gt;developer tools&lt;/a&gt; continue to make progress!
We now have a functional &lt;strong&gt;network monitor&lt;/strong&gt; panel (&lt;a href=&quot;https://github.com/uthmaniv&quot;&gt;@uthmaniv&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38216&quot;&gt;#38216&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38601&quot;&gt;#38601&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38625&quot;&gt;#38625&lt;/a&gt;),
and our JS debugger can show potential breakpoints (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38331&quot;&gt;#38331&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38363&quot;&gt;#38363&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38333&quot;&gt;#38333&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38551&quot;&gt;#38551&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38550&quot;&gt;#38550&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38334&quot;&gt;#38334&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38624&quot;&gt;#38624&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38826&quot;&gt;#38826&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38797&quot;&gt;#38797&lt;/a&gt;).
Additionally, the layout inspector now &lt;strong&gt;dims nodes that are not displayed&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38575&quot;&gt;#38575&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://servo.org/twismar/img/blog/2025-09-mastodon.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-09-mastodon.png&quot; alt=&quot;servoshell showing the Servo Mastodon account homepage&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://servo.org/twismar/img/blog/2025-09-netmonitor.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-09-netmonitor.png&quot; alt=&quot;The Firefox network monitor, showing a list of network connections for the Servo Mastodon account homepage&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;That&#39;s a lot of network requests.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;We’ve fixed a significant source of crashes in the engine: hit testing using outdated display lists (&lt;a href=&quot;https://github.com/servo/servo/issues/37932&quot;&gt;issue #37932&lt;/a&gt;).
&lt;strong&gt;Hit testing&lt;/strong&gt; in a web rendering engine is the process that determines which element(s) the user’s mouse is hovering over.&lt;/p&gt;
&lt;p&gt;Previously, this process ran inside of &lt;a href=&quot;https://github.com/servo/webrender&quot;&gt;WebRender&lt;/a&gt;, which receives a display list representing what should be rendered for a particular page.
WebRender runs on a separate thread or process from the actual page content, so display lists are updated asynchronously.
By the time we do a hit test, the elements reported may not exist anymore, so we could trigger crashes by (for example) moving the mouse quickly over parts of the page that were rapidly changing.&lt;/p&gt;
&lt;p&gt;This was fixed by making the hit test operation synchronous and moving it into the same thread as the actual content being tested against, eliminating the possibility of outdated results (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/kongbai1996&quot;&gt;@kongbai1996&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38480&quot;&gt;#38480,&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/pull/38464&quot;&gt;#38464,&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/pull/38463&quot;&gt;#38463,&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/pull/38884&quot;&gt;#38884,&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/pull/38518&quot;&gt;#38518)&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;web-platform-support&quot; tabindex=&quot;-1&quot;&gt;Web platform support &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#web-platform-support&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;dom-%26-js&quot; tabindex=&quot;-1&quot;&gt;DOM &amp;amp; JS &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#dom-%26-js&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We’ve upgraded to &lt;strong&gt;SpiderMonkey v140&lt;/strong&gt; (&lt;a href=&quot;https://gitlab.gnome.org/GNOME/gjs/-/blob/master/NEWS#L39-137&quot;&gt;changelog&lt;/a&gt;) (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37077&quot;&gt;#37077&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38563&quot;&gt;#38563&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Numerous pieces of the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API&quot;&gt;&lt;strong&gt;Trusted Types API&lt;/strong&gt;&lt;/a&gt; are now present in Servo
(&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38595&quot;&gt;#38595&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37834&quot;&gt;#37834&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38700&quot;&gt;#38700&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38736&quot;&gt;#38736&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38718&quot;&gt;#38718&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38784&quot;&gt;#38784&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38871&quot;&gt;#38871&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/8623&quot;&gt;#8623&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38874&quot;&gt;#38874&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38872&quot;&gt;#38872&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38886&quot;&gt;#38886&lt;/a&gt;), all gated behind the &lt;code&gt;dom_trusted_types_enabled&lt;/code&gt; preference.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API&quot;&gt;&lt;strong&gt;IndexedDB&lt;/strong&gt;&lt;/a&gt; implementation (gated behind &lt;code&gt;dom_indexeddb_enabled&lt;/code&gt;) is progressing quickly (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/rodion&quot;&gt;@rodion&lt;/a&gt;, &lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/28744&quot;&gt;#28744&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38737&quot;&gt;#38737&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38836&quot;&gt;#38836&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38813&quot;&gt;#38813&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38819&quot;&gt;#38819&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38115&quot;&gt;#38115&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38944&quot;&gt;#38944&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38740&quot;&gt;#38740&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38891&quot;&gt;#38891&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38723&quot;&gt;#38723&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38850&quot;&gt;#38850&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38735&quot;&gt;#38735&lt;/a&gt;), now reporting errors via &lt;code&gt;IDBRequest&lt;/code&gt; interface and supporting autoincrement keys.&lt;/p&gt;
&lt;p&gt;A prototype implementation of the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CookieStore&quot;&gt;&lt;strong&gt;CookieStore&lt;/strong&gt; API&lt;/a&gt; is now implemented and gated by the &lt;code&gt;dom_cookiestore_enabled&lt;/code&gt; preference (&lt;a href=&quot;https://github.com/sebsebmc&quot;&gt;@sebsebmc&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37968&quot;&gt;#37968&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38876&quot;&gt;#38876&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now passes over &lt;strong&gt;99.6% of the &lt;a href=&quot;https://drafts.fxtf.org/geometry/&quot;&gt;CSS geometry&lt;/a&gt; test suite&lt;/strong&gt;, thanks to an implementation of &lt;strong&gt;matrixTransform() on DOMPointReadOnly&lt;/strong&gt;, making all geometry interfaces serializable, and adding the &lt;strong&gt;SVGMatrix and SVGPoint aliases&lt;/strong&gt; (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38801&quot;&gt;#38801&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38828&quot;&gt;#38828&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38810&quot;&gt;#38810&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You can now use the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/TextEncoderStream&quot;&gt;&lt;strong&gt;TextEncoderStream&lt;/strong&gt; API&lt;/a&gt; (&lt;a href=&quot;https://github.com/minghuaw&quot;&gt;@minghuaw&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38466&quot;&gt;#38466&lt;/a&gt;).
Streams that are piped now correctly pass through &lt;code&gt;undefined&lt;/code&gt; values, too (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38470&quot;&gt;#38470&lt;/a&gt;).
We also fixed a crash in the result of &lt;strong&gt;pipeTo() on ReadableStream&lt;/strong&gt; (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38385&quot;&gt;#38385&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve implemented &lt;strong&gt;getModifierState() on MouseEvent&lt;/strong&gt; (&lt;a href=&quot;https://github.com/PotatoCP&quot;&gt;@PotatoCP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38535&quot;&gt;#38535&lt;/a&gt;), and made a number of changes involving DOM events: &lt;strong&gt;‘mouseleave’ events&lt;/strong&gt; are fired when the pointer leaves an &amp;lt;iframe&amp;gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38539&quot;&gt;#38539&lt;/a&gt;), pasting from the clipboard into a text input triggers an &lt;strong&gt;‘input’ event&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37100&quot;&gt;#37100&lt;/a&gt;), &lt;strong&gt;focus now occurs after ‘mousedown’&lt;/strong&gt; instead of ‘click’ (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38589&quot;&gt;#38589&lt;/a&gt;), we ignore ‘mousedown’ and ‘mouseup’ events for elements that are disabled (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38671&quot;&gt;#38671&lt;/a&gt;), and removing an event handler attribute like ‘onclick’ clears all relevant event listeners (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/kotx&quot;&gt;@kotx&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38734&quot;&gt;#38734&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39011&quot;&gt;#39011&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now supports &lt;strong&gt;scrollIntoView()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/abdelrahman1234567&quot;&gt;@abdelrahman1234567&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38230&quot;&gt;#38230&lt;/a&gt;), and fires a &lt;strong&gt;‘scroll’ event&lt;/strong&gt; whenever a page is scrolled (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38321&quot;&gt;#38321&lt;/a&gt;).
You can now focus an element without scrolling, by passing the &lt;code&gt;{preventScroll: true}&lt;/code&gt; option to focus() (&lt;a href=&quot;https://github.com/abdelrahman1234567&quot;&gt;@abdelrahman1234567&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38495&quot;&gt;#38495&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;navigator.sendBeacon()&lt;/strong&gt; is now implemented, gated behind the &lt;code&gt;dom_navigator_sendbeacon_enabled&lt;/code&gt; preference (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38301&quot;&gt;#38301&lt;/a&gt;).
Similarly, the &lt;strong&gt;AbortSignal.abort()&lt;/strong&gt; static method is hidden behind &lt;code&gt;dom_abort_controller_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38746&quot;&gt;#38746&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;HTMLDocument&lt;/strong&gt; interface now exists as a property on the &lt;code&gt;Window&lt;/code&gt; object (&lt;a href=&quot;https://github.com/leo030303&quot;&gt;@leo030303&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38433&quot;&gt;#38433&lt;/a&gt;).
Meanwhile, the &lt;strong&gt;CSS&lt;/strong&gt; window property is now a &lt;a href=&quot;https://webidl.spec.whatwg.org/#idl-namespaces&quot;&gt;WebIDL namespace&lt;/a&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38579&quot;&gt;#38579&lt;/a&gt;).
We also implemented the new &lt;strong&gt;QuotaExceededError&lt;/strong&gt; interface (&lt;a href=&quot;https://github.com/rmeno12&quot;&gt;@rmeno12&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38507&quot;&gt;#38507&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38720&quot;&gt;#38720&lt;/a&gt;), which replaces previous usages of DOMException with the &lt;code&gt;QUOTA_EXCEEDED_ERR&lt;/code&gt; name.&lt;/p&gt;
&lt;p&gt;Our 2D canvas implementation now supports &lt;strong&gt;addPath() on Path2D&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arthmis&quot;&gt;@arthmis&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37838&quot;&gt;#37838&lt;/a&gt;) and the &lt;strong&gt;restore()&lt;/strong&gt; methods on &lt;strong&gt;CanvasRenderingContext2D&lt;/strong&gt; and &lt;strong&gt;OffscreenCanvas&lt;/strong&gt; now pop all applied clipping paths (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38496&quot;&gt;#38496&lt;/a&gt;).
Additionally, we now support &lt;strong&gt;using web fonts in the 2D canvas&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38979&quot;&gt;#38979&lt;/a&gt;).
Meanwhile, the performance continues to improve in the new &lt;a href=&quot;https://github.com/linebender/vello?tab=readme-ov-file#vello&quot;&gt;Vello&lt;/a&gt;-based backends (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38406&quot;&gt;#38406&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38356&quot;&gt;#38356&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38440&quot;&gt;#38440&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38437&quot;&gt;#38437&lt;/a&gt;), with asynchronous uploading also showing improvements (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37776&quot;&gt;#37776&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Muting media elements with the &lt;strong&gt;‘mute’&lt;/strong&gt; HTML attribute now works during the initial resource load (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38462&quot;&gt;#38462&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Modifying stylesheets now integrates better with incremental layout, in both light trees and shadow trees (&lt;a href=&quot;https://github.com/coding-joedow&quot;&gt;@coding-joedow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38530&quot;&gt;#38530&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38529&quot;&gt;#38529&lt;/a&gt;).
Note that calling setProperty() on a readonly CSSStyleDeclaration correctly throws an exception (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38677&quot;&gt;#38677&lt;/a&gt;).&lt;/p&gt;
&lt;h3 id=&quot;css&quot; tabindex=&quot;-1&quot;&gt;CSS &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#css&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We’ve upgraded to the upstream &lt;strong&gt;Stylo&lt;/strong&gt; revision as of August 1, 2025.&lt;/p&gt;
&lt;p&gt;We now support custom CSS properties with the &lt;strong&gt;CSS.registerProperty()&lt;/strong&gt; method (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38682&quot;&gt;#38682&lt;/a&gt;), as well as custom element states with the &lt;strong&gt;‘states’ property on ElementInternals&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38564&quot;&gt;#38564&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Flexbox cross sizes can no longer end up negative through stretching (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38521&quot;&gt;#38521&lt;/a&gt;), while ‘stretch’ on flex items now stretches to the line if possible (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38526&quot;&gt;#38526&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Overflow calculations are more accurate&lt;/strong&gt;, now that we ignore ‘position: fixed’ children of the root element (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38618&quot;&gt;#38618&lt;/a&gt;), compute overflow for &amp;lt;body&amp;gt; separate from the viewport (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38825&quot;&gt;#38825&lt;/a&gt;), check for ‘overflow: visible’ in parents and children (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38443&quot;&gt;#38443&lt;/a&gt;), and propagate ‘overflow’ to the viewport correctly (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38598&quot;&gt;#38598&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;‘color’ and ‘text-decoration’ properties no longer inherit into the contents of &amp;lt;select&amp;gt; elements (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38570&quot;&gt;#38570&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Negative outline offsets work correctly (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38418&quot;&gt;#38418&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Video elements no longer fall back to a preferred aspect ratio of 2 (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38705&quot;&gt;#38705&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;‘position: sticky’ elements are handled correctly inside CSS transforms (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38391&quot;&gt;#38391&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;performance-%26-stability&quot; tabindex=&quot;-1&quot;&gt;Performance &amp;amp; Stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#performance-%26-stability&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We fixed several panics this month, involving IntersectionObserver and missing stacking contexts (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38473&quot;&gt;#38473&lt;/a&gt;), unpaintable canvases and text (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38664&quot;&gt;#38664&lt;/a&gt;), serializing ‘location’ properties on Window objects (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38709&quot;&gt;#38709&lt;/a&gt;), and navigations canceled before HTTP headers are received (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38739&quot;&gt;#38739&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We also fixed a number of performance pitfalls.
The document rendering loop is now &lt;strong&gt;throttled to 60 FPS&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38431&quot;&gt;#38431&lt;/a&gt;), while &lt;strong&gt;animated images do less work&lt;/strong&gt; when advancing the current frame (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38857&quot;&gt;#38857&lt;/a&gt;).
In addition, elements with &lt;strong&gt;CSS images will not trigger page reflow&lt;/strong&gt; until their image data is fully available (&lt;a href=&quot;https://github.com/coding-joedow&quot;&gt;@coding-joedow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38916&quot;&gt;#38916&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, we made improvements to memory usage and binary size.
Inline stylesheets are now deduplicated, which can have a significant impact on pages with &lt;strong&gt;lots of form inputs&lt;/strong&gt; or &lt;strong&gt;custom elements&lt;/strong&gt; with common styles (&lt;a href=&quot;https://github.com/coding-joedow&quot;&gt;@coding-joedow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38540&quot;&gt;#38540&lt;/a&gt;).
We also removed many unused pieces of the ICU library, &lt;strong&gt;saving 16MB&lt;/strong&gt; from the final binary.&lt;/p&gt;
&lt;h2 id=&quot;embedding&quot; tabindex=&quot;-1&quot;&gt;Embedding &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#embedding&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Servo has declared a &lt;strong&gt;Minimum Supported Rust Version&lt;/strong&gt; (1.85.0), and this is verified with every new pull request (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/37152&quot;&gt;#37152&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Evaluating JS from the embedding layer now &lt;strong&gt;reports an error&lt;/strong&gt; if the evaluation failed for any reason (&lt;a href=&quot;https://github.com/rodio&quot;&gt;@rodio&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38602&quot;&gt;#38602&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Our &lt;strong&gt;WebDriver&lt;/strong&gt; implementation now passes 80% of the implementation conformance tests.
This is the result of lots of work on handling user prompts (&lt;a href=&quot;https://github.com/PotatoCP&quot;&gt;@PotatoCP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38591&quot;&gt;#38591&lt;/a&gt;), computing obscured/disabled elements while clicking (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38497&quot;&gt;#38497&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38841&quot;&gt;#38841&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38436&quot;&gt;#38436&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38490&quot;&gt;#38490&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38383&quot;&gt;#38383&lt;/a&gt;), and improving window focus behaviours (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38889&quot;&gt;#38889&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38909&quot;&gt;#38909&lt;/a&gt;).
We also implemented the &lt;strong&gt;Get Window Handles&lt;/strong&gt; command (&lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38622&quot;&gt;#38622&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38745&quot;&gt;#38745&lt;/a&gt;), added support for getting element boolean attributes (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38401&quot;&gt;#38401&lt;/a&gt;), and added more accurate errors for a number of commands (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38620&quot;&gt;#38620&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38357&quot;&gt;#38357&lt;/a&gt;).
The &lt;strong&gt;Element Clear&lt;/strong&gt; command now clears &lt;code&gt;&amp;lt;input type=&amp;quot;file&amp;quot;&amp;gt;&lt;/code&gt; elements correctly (&lt;a href=&quot;https://github.com/PotatoCP&quot;&gt;@PotatoCP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38536&quot;&gt;#38536&lt;/a&gt;), and &lt;strong&gt;Element Send Keys&lt;/strong&gt; now appends to file inputs with the ‘multiple’ attribute.&lt;/p&gt;
&lt;h2 id=&quot;servoshell&quot; tabindex=&quot;-1&quot;&gt;servoshell &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#servoshell&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We now &lt;strong&gt;display favicons&lt;/strong&gt; of each top-level page in the tab bar (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/36680&quot;&gt;#36680&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://servo.org/twismar/img/blog/2025-09-favicon.png&quot;&gt;&lt;img src=&quot;https://servo.org/twismar/img/blog/2025-09-favicon.png&quot; alt=&quot;servoshell showing a diffie favicon in the tab bar&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;Resizing the browser window to a very small dimension no longer crashes the browser (&lt;a href=&quot;https://github.com/leo030303&quot;&gt;@leo030303&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38461&quot;&gt;#38461&lt;/a&gt;).
Element hit testing in full screen mode now works as expected (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38328&quot;&gt;#38328&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Various popup dialogs, such as the &amp;lt;select&amp;gt; option chooser dialog, can now be closed without choosing a value (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38373&quot;&gt;#38373&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/38949&quot;&gt;#38949&lt;/a&gt;).
Additionally, the browser now responds to a popup closing without any other inputs (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39038&quot;&gt;#39038&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twismar/blog/2025/09/25/this-month-in-servo/#donations&quot;&gt;
        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
      &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;5552 USD/month&lt;/strong&gt; (+18.3% over July) in recurring donations.&lt;/p&gt;
&lt;p&gt;Historically this has helped cover the cost of our &lt;a href=&quot;https://ci0.servo.org/&quot;&gt;speedy&lt;/a&gt; &lt;a href=&quot;https://ci1.servo.org/&quot;&gt;CI&lt;/a&gt; &lt;a href=&quot;https://ci2.servo.org/&quot;&gt;servers&lt;/a&gt; and &lt;a href=&quot;https://www.outreachy.org/alums/2025-06/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;.
Thanks to your support, we’re now setting up &lt;strong&gt;&lt;a href=&quot;https://ci3.servo.org/&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://ci4.servo.org/&quot;&gt;new&lt;/a&gt; CI servers for benchmarking&lt;/strong&gt;, and &lt;strong&gt;&lt;a href=&quot;https://servo.org/twismar/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;funding the work of our long-time maintainer&lt;/a&gt; Josh Matthews&lt;/strong&gt; (@jdm), with a particular focus on helping more people contribute to Servo.&lt;/p&gt;
&lt;p&gt;Keep an eye out for &lt;a href=&quot;https://github.com/servo/servo/issues/38141&quot;&gt;further CI improvements&lt;/a&gt; in the coming months, including &lt;a href=&quot;https://github.com/servo/ci-runners/issues/21&quot;&gt;&lt;strong&gt;ten-minute WPT builds&lt;/strong&gt;&lt;/a&gt;, &lt;strong&gt;macOS arm64 builds&lt;/strong&gt;, and &lt;strong&gt;faster pull request checks&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Servo is also on &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt;, and already &lt;strong&gt;15 GitHub users&lt;/strong&gt; (−7 from July) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot; style=&quot;height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;&quot;&gt;
    &lt;div style=&quot;position: relative; text-align: right;&quot;&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 5552 / 10000); padding-left: 0.5em;&quot;&gt;&lt;strong&gt;5552&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 5552 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;&quot;&gt;&lt;/div&gt;
        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;!-- USD/month --&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;progress value=&quot;5552&quot; max=&quot;10000&quot; style=&quot;transform: scale(3); transform-origin: top left; width: calc(100% / 3);&quot;&gt;&lt;/progress&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;As always, use of these funds will be decided transparently in the Technical Steering Committee.
For more details, head to our &lt;a href=&quot;https://servo.org/twismar/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    ._correction {
        max-width: 33em;
        margin: 1em auto;
        border-bottom: 1px solid;
        padding-bottom: 1em;
    }
    ._note {
        margin: 1em 1em;
        border-left: 1px solid;
        padding-left: 1em;
        opacity: 0.75;
    }
&lt;/style&gt;
</content>
  </entry>
</feed>