<?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-07-31T00:00:00Z</updated>
  <id>https://servo.org</id>
  <author>
    <name>Servo Team</name>
    <email>info@servo.org</email>
  </author>
  <entry>
    <title>June in Servo: and more!</title>
    <link href="https://servo.org/twisjun/blog/2026/07/31/june-in-servo/"/>
    <updated>2026-07-31T00:00:00Z</updated>
    <id>https://servo.org/twisjun/blog/2026/07/31/june-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.4.0&quot;&gt;&lt;strong&gt;Servo 0.4.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in May, which came out to yet another record &lt;strong&gt;558 commits&lt;/strong&gt; (April: 534, May: 391).
For security fixes, see &lt;a href=&quot;https://servo.org/twisjun/blog/2026/07/31/june-in-servo/#security&quot;&gt;&lt;strong&gt;§ Security&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;new-contributors&quot; tabindex=&quot;-1&quot;&gt;New contributors &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/07/31/june-in-servo/#new-contributors&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;A special thanks to the following people for landing their first patch in Servo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deepam Goyal (@Deepam02, #44836)&lt;/li&gt;
&lt;li&gt;Mark (@Mark-Boger, #45486)&lt;/li&gt;
&lt;li&gt;Mr SheerLuck (@MrSheerluck, #45557)&lt;/li&gt;
&lt;li&gt;Psychpsyo (Cameron) (@Psychpsyo, #45494)&lt;/li&gt;
&lt;li&gt;TusharSariya (@TusharSariya, #43663)&lt;/li&gt;
&lt;li&gt;Adam Sharif (@adamsharifc, #45551)&lt;/li&gt;
&lt;li&gt;Akash Ravikumar (@ak4shravikumar, #45736)&lt;/li&gt;
&lt;li&gt;Sean Cunneen (@alexcat3, #45419)&lt;/li&gt;
&lt;li&gt;Abdul Wahab Melethil Shibu (@cychronex-labs, #45880)&lt;/li&gt;
&lt;li&gt;darkdragon-001 (@darkdragon-001, #45267)&lt;/li&gt;
&lt;li&gt;Frédéric Wang Nélar (@fred-wang, #45834)&lt;/li&gt;
&lt;li&gt;fxzjshm (@fxzjshm, #45285)&lt;/li&gt;
&lt;li&gt;Piyush Gupta (@guptapiyush16, #45845)&lt;/li&gt;
&lt;li&gt;Ivo Murrell (@ivomurrell, #45645)&lt;/li&gt;
&lt;li&gt;rhit-kapilaar (@rhit-kapilaar, #45556)&lt;/li&gt;
&lt;li&gt;sahvx655-wq (@sahvx655-wq, #45510)&lt;/li&gt;
&lt;li&gt;Kagami Sascha Rosylight (@saschanaz, #45731)&lt;/li&gt;
&lt;li&gt;shangguanmachine-dot (@shangguanmachine-dot, #45310)&lt;/li&gt;
&lt;li&gt;Glenn Skrzypczak (@skyz1, #45471)&lt;/li&gt;
&lt;li&gt;Oskar Steiger (@steigeo, #45416)&lt;/li&gt;
&lt;li&gt;Veyndan Stuart (@veyndan, #45326)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in helping build a web browser?
Take a look at our &lt;a href=&quot;https://starters.servo.org/&quot;&gt;curated list&lt;/a&gt; of issues that are good for new contributors!&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/twisjun/blog/2026/07/31/june-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;!--
7681.89/month total donations
- 3470.90/month opencollective
- 4065.00/month github
- 35 donors 145.99/month thanks.dev
--&gt;
&lt;p&gt;Thanks again for your generous support!
We are now receiving &lt;strong&gt;7681 USD/month&lt;/strong&gt; (+0.2% from May) 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/2026-05/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twisjun/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;35 GitHub users&lt;/strong&gt; (same as May) 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/twisjun/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% * 7681 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7681&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7681 / 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;7681&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/twisjun/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    kbd {
        background: #00000020;
        margin: 0 0.125rem;
        padding: 0.125rem;
        border-radius: 0.25rem;
    }
    ._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>May in Servo: user scripts, mp4 compat, blackboxing in DevTools, and more!</title>
    <link href="https://servo.org/twisjun/blog/2026/06/30/may-in-servo/"/>
    <updated>2026-06-30T00:00:00Z</updated>
    <id>https://servo.org/twisjun/blog/2026/06/30/may-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.3.0&quot;&gt;&lt;strong&gt;Servo 0.3.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in May, which came out to &lt;strong&gt;391 commits&lt;/strong&gt; (April: 534).
For security fixes, see &lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#security&quot;&gt;&lt;strong&gt;§ Security&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twisjun/img/blog/2026-06-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-06-diffie.png&quot; alt=&quot;servoshell 0.3.0 showing several new features: the `document.execCommand()` commands ‘back­Color’, ‘create­Link’, ‘unlink’, ‘superscript’, ‘subscript’, and ‘remove­Format’, plus ‘font-kerning’ and ‘font-variant-ligatures’&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;We’ve shipped several new web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;‘font-kerning: none’&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/44634&quot;&gt;#44634&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-variant-east-asian’&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/44989&quot;&gt;#44989&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-variant-ligatures’&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/44903&quot;&gt;#44903&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-variant-numeric’&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/44950&quot;&gt;#44950&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-variant-position’&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/45142&quot;&gt;#45142&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mp4&lt;/strong&gt; files &lt;strong&gt;without fast start&lt;/strong&gt; in &lt;strong&gt;&amp;lt;video&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/calvaris&quot;&gt;@calvaris&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45084&quot;&gt;#45084&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;/code&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/45028&quot;&gt;#45028&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;form enctype=&amp;quot;text/plain&amp;quot;&amp;gt;&lt;/code&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/45111&quot;&gt;#45111&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;![CDATA[]]&amp;gt;&lt;/strong&gt; 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/44791&quot;&gt;#44791&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;&lt;strong&gt;onslotchange&lt;/strong&gt; property on &lt;strong&gt;Shadow­Root&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/44688&quot;&gt;#44688&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;screen­Left&lt;/strong&gt; and &lt;strong&gt;screen­Top&lt;/strong&gt; on &lt;strong&gt;Window&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45128&quot;&gt;#45128&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new Blob()&lt;/strong&gt; with &lt;code&gt;{endings: &amp;quot;native&amp;quot;}&lt;/code&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/44803&quot;&gt;#44803&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new Performance­Mark()&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/44702&quot;&gt;#44702&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;parse­HTML()&lt;/strong&gt; on &lt;strong&gt;Document&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/44952&quot;&gt;#44952&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;read­As­Binary­String()&lt;/strong&gt; on &lt;strong&gt;File­Reader&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/44858&quot;&gt;#44858&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44921&quot;&gt;#44921&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;performance.measure()&lt;/strong&gt; with mark values &lt;strong&gt;‘redirect­Start’&lt;/strong&gt;, &lt;strong&gt;‘redirect­End’&lt;/strong&gt;, &lt;strong&gt;‘secure­Connection­Start’&lt;/strong&gt;, and &lt;strong&gt;‘response­End’&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/44673&quot;&gt;#44673&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44624&quot;&gt;#44624&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44850&quot;&gt;#44850&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44739&quot;&gt;#44739&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve also fixed some build issues on Windows (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45079&quot;&gt;#45079&lt;/a&gt;), FreeBSD (&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/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44600&quot;&gt;#44600&lt;/a&gt;), and for anyone building Servo on NixOS or with Nix (&lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45051&quot;&gt;#45051&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45135&quot;&gt;#45135&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This is another big 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/twisjun/blog/2026/06/30/may-in-servo/#security&quot;&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– memory safety fixes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#work-in-progress&quot;&gt;&lt;strong&gt;Work in progress&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– execCommand(), Sanitizer, IndexedDB, accessibility, workers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#embedding-api&quot;&gt;&lt;strong&gt;Embedding API&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– MSRV, cookies, preferences, diagnostics&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#for-users-and-developers&quot;&gt;&lt;strong&gt;For users and developers&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– &lt;code&gt;--host-file&lt;/code&gt;, &lt;code&gt;--userscripts&lt;/code&gt;, DevTools Debugger&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-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;– focus, forms, navigation, SubtleCrypto, WebGPU&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#performance&quot;&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– about:memory, threads, layout, DOM, build times&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#stability&quot;&gt;&lt;strong&gt;Stability&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;– crashes, hangs, static analysis&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;security&quot; tabindex=&quot;-1&quot;&gt;Security &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#security&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’s JS runtime, &lt;strong&gt;SpiderMonkey 140.10.0&lt;/strong&gt;, had several &lt;strong&gt;memory safety bugs&lt;/strong&gt; that have been fixed in Servo 0.3.0 with the update to SpiderMonkey 140.10.1 (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44755&quot;&gt;#44755&lt;/a&gt;).
For more details, see &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-7322&quot;&gt;CVE-2026-7322&lt;/a&gt;, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-7323&quot;&gt;CVE-2026-7323&lt;/a&gt;, and &lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2026-36/&quot;&gt;MFSA 2026-36&lt;/a&gt;.&lt;/p&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/twisjun/blog/2026/06/30/may-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’re continuing to implement &lt;strong&gt;document.exec­Command()&lt;/strong&gt; for &lt;strong&gt;rich text editing&lt;/strong&gt;, under &lt;code&gt;--pref dom­_exec­_command­_enabled&lt;/code&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/44735&quot;&gt;#44735&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44973&quot;&gt;#44973&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44887&quot;&gt;#44887&lt;/a&gt;).
This release adds support for the &lt;strong&gt;‘back­Color’&lt;/strong&gt;, &lt;strong&gt;‘fore­Color’&lt;/strong&gt;, &lt;strong&gt;‘create­Link’&lt;/strong&gt;, &lt;strong&gt;‘unlink’&lt;/strong&gt;, &lt;strong&gt;‘superscript’&lt;/strong&gt;, &lt;strong&gt;‘subscript’&lt;/strong&gt;, and &lt;strong&gt;‘remove­Format’&lt;/strong&gt; 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/44644&quot;&gt;#44644&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44682&quot;&gt;#44682&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44657&quot;&gt;#44657&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44710&quot;&gt;#44710&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44677&quot;&gt;#44677&lt;/a&gt;), plus partial support for the &lt;strong&gt;‘insert­Paragraph’&lt;/strong&gt; command (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44909&quot;&gt;#44909&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re also working on the &lt;strong&gt;Sanitizer&lt;/strong&gt; API, under &lt;code&gt;--pref dom­_sanitizer­_enabled&lt;/code&gt;.
With the feature now enabled in servoshell’s experimental mode (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44701&quot;&gt;#44701&lt;/a&gt;), this release adds support for &lt;strong&gt;set­Comments()&lt;/strong&gt;, &lt;strong&gt;set­Data­Attributes()&lt;/strong&gt;, &lt;strong&gt;allow­Processing­Instruction()&lt;/strong&gt;, &lt;strong&gt;remove­Processing­Instruction()&lt;/strong&gt;, and &lt;strong&gt;remove­Unsafe()&lt;/strong&gt; on &lt;strong&gt;Sanitizer&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/44734&quot;&gt;#44734&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44983&quot;&gt;#44983&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IndexedDB&lt;/strong&gt; continues to improve, under &lt;code&gt;--pref dom­_indexeddb­_enabled&lt;/code&gt;.
This release brings a more conformant &lt;strong&gt;abort()&lt;/strong&gt; on &lt;strong&gt;IDB­Transaction&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/43950&quot;&gt;#43950&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All of the features above are enabled in servoshell’s experimental mode.&lt;/p&gt;
&lt;p&gt;We’ve made more progress towards &lt;strong&gt;accessibility&lt;/strong&gt; support, including the &lt;a href=&quot;https://w3c.github.io/aria/#namefromcontent&quot;&gt;&lt;strong&gt;name from contents&lt;/strong&gt;&lt;/a&gt; algorithm (&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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44439&quot;&gt;#44439&lt;/a&gt;) and several changes towards &lt;strong&gt;building the accessibility tree incrementally&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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44766&quot;&gt;#44766&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45035&quot;&gt;#45035&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45207&quot;&gt;#45207&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44768&quot;&gt;#44768&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44785&quot;&gt;#44785&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44801&quot;&gt;#44801&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44767&quot;&gt;#44767&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45029&quot;&gt;#45029&lt;/a&gt;).
The latter is critical for performance in real-world web content.&lt;/p&gt;
&lt;p&gt;We’re now working on &lt;strong&gt;SharedWorker&lt;/strong&gt; and &lt;strong&gt;ServiceWorker&lt;/strong&gt;, under &lt;code&gt;--pref dom­_sharedworker­_enabled&lt;/code&gt; and &lt;code&gt;--pref dom­_serviceworker­_enabled&lt;/code&gt; respectively.
This release adds support for &lt;strong&gt;new Shared­Worker()&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/44761&quot;&gt;#44761&lt;/a&gt;), and parts of the ServiceWorker API (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&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/45082&quot;&gt;#45082&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44787&quot;&gt;#44787&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/twisjun/blog/2026/06/30/may-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 requires &lt;strong&gt;Rust 1.88.0&lt;/strong&gt; or newer, up from the old MSRV of 1.86.0 (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44815&quot;&gt;#44815&lt;/a&gt;).
We run compile tests with the MSRV, but most of our testing is now done with Rust 1.95.0 (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44632&quot;&gt;#44632&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking changes&lt;/strong&gt; to the &lt;strong&gt;cookies&lt;/strong&gt; methods in our &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;strong&gt;SiteDataManager&lt;/strong&gt;&lt;/a&gt; API (&lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44708&quot;&gt;#44708&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&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; now takes an additional &lt;code&gt;callback&lt;/code&gt; argument, allowing it to be called async – to continue calling it sync, pass &lt;code&gt;None&lt;/code&gt; as the &lt;code&gt;callback&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.clear_session_cookies&quot;&gt;&lt;code&gt;clear­_session­_cookies&lt;/code&gt;&lt;/a&gt; now takes an additional &lt;code&gt;callback&lt;/code&gt; argument, allowing it to be called async – to continue calling it sync, pass &lt;code&gt;None&lt;/code&gt; as the &lt;code&gt;callback&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.set_cookie_for_url&quot;&gt;&lt;code&gt;set­_cookie­_for­_url&lt;/code&gt;&lt;/a&gt; now takes an additional &lt;code&gt;callback&lt;/code&gt; argument, allowing it to be called async – to continue calling it sync, pass &lt;code&gt;None&lt;/code&gt; as the &lt;code&gt;callback&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;set­_cookie­_for­_url­_async&lt;/code&gt; has been removed in favour of &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.set_cookie_for_url&quot;&gt;&lt;code&gt;set­_cookie­_for­_url&lt;/code&gt;&lt;/a&gt; – to migrate, replace &lt;code&gt;set­_cookie­_for­_url­_async(​callback)&lt;/code&gt; with &lt;code&gt;set­_cookie­_for­_url(​Some(​Box::new(​callback)))&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Breaking changes&lt;/strong&gt; to our &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html&quot;&gt;&lt;strong&gt;Preferences&lt;/strong&gt;&lt;/a&gt; API (&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/44307&quot;&gt;#44307&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;threadpools­_image­_cache­_workers­_max&lt;/code&gt;, &lt;code&gt;threadpools­_indexeddb­_workers­_max&lt;/code&gt;, and &lt;code&gt;threadpools­_webstorage­_workers­_max&lt;/code&gt; have been &lt;strong&gt;removed&lt;/strong&gt; in favour of a combined &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html#structfield.thread_pool_workers_max&quot;&gt;&lt;code&gt;thread­_pool­_workers­_max&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;threadpools­_fallback­_worker­_num&lt;/code&gt; has been &lt;strong&gt;renamed&lt;/strong&gt; to &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html#structfield.thread_pool_fallback_workers&quot;&gt;&lt;code&gt;thread­_pool­_fallback­_workers&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;threadpools­_async­_runtime­_workers­_max&lt;/code&gt; has been &lt;strong&gt;renamed&lt;/strong&gt; to &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html#structfield.thread_pool_async_runtime_workers_max&quot;&gt;&lt;code&gt;thread­_pool­_async­_runtime­_workers­_max&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;threadpools­_webrender­_workers­_max&lt;/code&gt; has been &lt;strong&gt;renamed&lt;/strong&gt; to &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html#structfield.thread_pool_webrender_workers_max&quot;&gt;&lt;code&gt;thread­_pool­_webrender­_workers­_max&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve also reworked our &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;strong&gt;DiagnosticsLogging&lt;/strong&gt;&lt;/a&gt; API (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44703&quot;&gt;#44703&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can now set options with &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;DiagnosticsLogging&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html#method.toggle_option&quot;&gt;&lt;code&gt;toggle­_option&lt;/code&gt;&lt;/a&gt;, and check if they are enabled with &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;DiagnosticsLogging&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html#method.is_enabled&quot;&gt;&lt;code&gt;is­_enabled&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each option is a variant of &lt;a href=&quot;https://doc.servo.org/servo/enum.DiagnosticsLoggingOption.html&quot;&gt;&lt;code&gt;DiagnosticsLoggingOption&lt;/code&gt;&lt;/a&gt;, a new type that also has useful methods for exposing these options in embedder UI&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(Breaking change)&lt;/strong&gt; &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;DiagnosticsLogging&lt;/code&gt;&lt;/a&gt; no longer has &lt;code&gt;pub&lt;/code&gt; fields representing each option – to migrate, replace field writes and field reads with &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html#method.toggle_option&quot;&gt;&lt;code&gt;toggle­_option&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html#method.is_enabled&quot;&gt;&lt;code&gt;is­_enabled&lt;/code&gt;&lt;/a&gt; respectively&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(Breaking change)&lt;/strong&gt; &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;DiagnosticsLogging&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html#method.extend_from_string&quot;&gt;&lt;code&gt;extend­_from­_string&lt;/code&gt;&lt;/a&gt; no longer accepts a &lt;code&gt;help&lt;/code&gt; option – this option only existed to support servoshell’s &lt;code&gt;-Z help&lt;/code&gt; / &lt;code&gt;--debug=help&lt;/code&gt; option, so the code implementing it has been moved to servoshell&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;for-users-and-developers&quot; tabindex=&quot;-1&quot;&gt;For users and developers &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#for-users-and-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;&lt;strong&gt;servoshell&lt;/strong&gt; has two new options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can now configure the path to a &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Hosts_(file)&amp;amp;oldid=1360805760&quot;&gt;&lt;strong&gt;hosts file&lt;/strong&gt;&lt;/a&gt; with &lt;strong&gt;--host-file=&lt;/strong&gt; (singular), as an alternative to the &lt;strong&gt;HOST_FILE&lt;/strong&gt; (singular) environment variable (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44880&quot;&gt;#44880&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can now provide a directory of &lt;strong&gt;user scripts&lt;/strong&gt; to run in every document with &lt;strong&gt;--userscripts=&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/44754&quot;&gt;#44754&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When using the &lt;strong&gt;Debugger&lt;/strong&gt; tab in the Firefox &lt;strong&gt;DevTools&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can now &lt;a href=&quot;https://antongunnarsson.com/devtools-blackbox/&quot;&gt;“blackbox”&lt;/a&gt; a script by clicking &lt;strong&gt;Ignore source&lt;/strong&gt; (&lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44359&quot;&gt;#44359&lt;/a&gt;).
This prevents breakpoints from being hit inside that script, and it should also allow you to step through execution in the debugger without pausing inside that script.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;Scopes&lt;/strong&gt; panel is more accurate now (&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/44765&quot;&gt;#44765&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For developers of Servo itself, please note that &lt;a href=&quot;https://book.servo.org/contributing/getting-started.html#ai-contributions&quot;&gt;per project policy&lt;/a&gt;, you &lt;strong&gt;must not&lt;/strong&gt; use the output of &lt;strong&gt;large language models&lt;/strong&gt; or other &lt;strong&gt;generative AI tools&lt;/strong&gt; in your contributions.
To help us enforce that, we now have CI checks that reject AI agents as coauthors (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&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/44723&quot;&gt;#44723&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also fixed build issues with &lt;code&gt;--features vello&lt;/code&gt; (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&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/44875&quot;&gt;#44875&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45036&quot;&gt;#45036&lt;/a&gt;).&lt;/p&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/twisjun/blog/2026/06/30/may-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;We’ve improved the default appearance of &lt;strong&gt;&amp;lt;dl&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;ol&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;ul&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;table&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;thead&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;tbody&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;tfoot&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;tr&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;td&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;th&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;dir&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;menu&amp;gt;&lt;/strong&gt;, and &lt;strong&gt;&amp;lt;form&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/avis137&quot;&gt;@avis137&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44837&quot;&gt;#44837&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44920&quot;&gt;#44920&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CryptoKey&lt;/strong&gt; is now &lt;strong&gt;serializable&lt;/strong&gt;, allowing it to be used in structuredClone() and postMessage() (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45163&quot;&gt;#45163&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved &lt;strong&gt;JS error messages&lt;/strong&gt; in several parts of the DOM (&lt;a href=&quot;https://github.com/n0blenote&quot;&gt;@n0blenote&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/PuercoPop&quot;&gt;@PuercoPop&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44704&quot;&gt;#44704&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45186&quot;&gt;#45186&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44656&quot;&gt;#44656&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the conformance of &lt;strong&gt;form submission&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/44943&quot;&gt;#44943&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44953&quot;&gt;#44953&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44954&quot;&gt;#44954&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44957&quot;&gt;#44957&lt;/a&gt;), &lt;strong&gt;tab navigation&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/44684&quot;&gt;#44684&lt;/a&gt;), &lt;strong&gt;javascript: url navigation&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/43490&quot;&gt;#43490&lt;/a&gt;), &lt;strong&gt;‘Refresh’ headers&lt;/strong&gt; and &lt;strong&gt;&amp;lt;meta http-equiv=Refresh&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/45113&quot;&gt;#45113&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45116&quot;&gt;#45116&lt;/a&gt;), &lt;strong&gt;‘line-break: anywhere’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44609&quot;&gt;#44609&lt;/a&gt;), &lt;strong&gt;assign()&lt;/strong&gt; on &lt;strong&gt;Location&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&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/44298&quot;&gt;#44298&lt;/a&gt;), &lt;strong&gt;crypto.subtle.derive­Bits()&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/44706&quot;&gt;#44706&lt;/a&gt;), &lt;strong&gt;get­Computed­Style()&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/44856&quot;&gt;#44856&lt;/a&gt;), &lt;strong&gt;performance.measure()&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/44675&quot;&gt;#44675&lt;/a&gt;), &lt;strong&gt;read­As­Data­URL()&lt;/strong&gt; on &lt;strong&gt;File­Reader&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/44897&quot;&gt;#44897&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44924&quot;&gt;#44924&lt;/a&gt;), &lt;strong&gt;stream()&lt;/strong&gt; on &lt;strong&gt;Blob&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/45133&quot;&gt;#45133&lt;/a&gt;), and &lt;strong&gt;ML-KEM&lt;/strong&gt; in &lt;strong&gt;Subtle­Crypto&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/45153&quot;&gt;#45153&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also landed improvements to &lt;strong&gt;GPU­Supported­Limits&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/45114&quot;&gt;#45114&lt;/a&gt;), &lt;strong&gt;GPU­Texture&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/45154&quot;&gt;#45154&lt;/a&gt;), &lt;strong&gt;create­Bind­Group()&lt;/strong&gt; on &lt;strong&gt;GPU­Device&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/45140&quot;&gt;#45140&lt;/a&gt;), and other &lt;strong&gt;WebGPU&lt;/strong&gt; features (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45097&quot;&gt;#45097&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed bugs related to &lt;strong&gt;&amp;lt;svg&amp;gt;&lt;/strong&gt; with &lt;strong&gt;‘Content-Security-Policy’&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/44974&quot;&gt;#44974&lt;/a&gt;), &lt;strong&gt;‘:active’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&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/43953&quot;&gt;#43953&lt;/a&gt;), &lt;strong&gt;‘:hover’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&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/43979&quot;&gt;#43979&lt;/a&gt;), &lt;strong&gt;‘align-items’&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/44396&quot;&gt;#44396&lt;/a&gt;), &lt;strong&gt;‘border-image-outset’&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/45039&quot;&gt;#45039&lt;/a&gt;), &lt;strong&gt;‘padding’&lt;/strong&gt; with &lt;strong&gt;‘overflow: scroll’&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/44263&quot;&gt;#44263&lt;/a&gt;), &lt;strong&gt;‘pointerup’ events&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/44666&quot;&gt;#44666&lt;/a&gt;), &lt;strong&gt;‘slotchange’ events&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/44688&quot;&gt;#44688&lt;/a&gt;), &lt;strong&gt;dynamic import()&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/44741&quot;&gt;#44741&lt;/a&gt;), and &lt;strong&gt;clip()&lt;/strong&gt; on &lt;strong&gt;CanvasRenderingContext2D&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/44831&quot;&gt;#44831&lt;/a&gt;).&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/twisjun/blog/2026/06/30/may-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;We’ve built a tool that will help us improve &lt;strong&gt;‘about:memory’&lt;/strong&gt; by finding untracked allocations (&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/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44674&quot;&gt;#44674&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44980&quot;&gt;#44980&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now requires fewer OS threads per CPU, after we combined the &lt;strong&gt;thread pools&lt;/strong&gt; for the image cache, web storage, and IndexedDB (&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/44307&quot;&gt;#44307&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve landed a bunch of &lt;strong&gt;layout&lt;/strong&gt; optimisations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The fragment tree is now &lt;strong&gt;immutable&lt;/strong&gt; for the most part, with small pockets of interior mutability where mutability is needed.
This means that most fragment tree accesses no longer have to incur the runtime cost of borrowing an &lt;a href=&quot;https://docs.rs/atomic_refcell/0.1.14/atomic_refcell/&quot;&gt;AtomicRefCell&lt;/a&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/44849&quot;&gt;#44849&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Two steps in the layout process, calculating &lt;strong&gt;containing blocks&lt;/strong&gt; and building the &lt;strong&gt;stacking context tree&lt;/strong&gt;, require traversing the fragment tree.
This can be expensive, but we’ve now combined them into a &lt;strong&gt;single fragment tree traversal&lt;/strong&gt; in most cases (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&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/44911&quot;&gt;#44911&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45210&quot;&gt;#45210&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Another step in the layout process, calculating &lt;strong&gt;scrollable overflow&lt;/strong&gt;, used to require traversing the entire fragment tree.
We’ve effectively eliminated that traversal, by making the calculation both &lt;strong&gt;lazy&lt;/strong&gt; and &lt;strong&gt;incremental&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/44854&quot;&gt;#44854&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We’ve improved the caching of fragments, shaping results, and other layout results between 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/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45038&quot;&gt;#45038&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44769&quot;&gt;#44769&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We’ve made incremental fragment layout more precise (&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/44925&quot;&gt;#44925&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We’ve reduced the memory usage of text shaping (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44609&quot;&gt;#44609&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;DOM attributes&lt;/strong&gt; are much more efficient in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When scripts write attribute values, we avoid serialising them until the attribute is read back by a script (if ever), speeding up frequent writes to inline styles by up to 25% (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44931&quot;&gt;#44931&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When we parse attributes in HTML or read attribute values internally, we avoid constructing &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Attr&quot;&gt;Attr&lt;/a&gt; nodes until a script &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNode&quot;&gt;actually&lt;/a&gt; &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/attributes&quot;&gt;needs&lt;/a&gt; them, reducing memory usage and making garbage collection less likely (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &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/44209&quot;&gt;#44209&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45023&quot;&gt;#45023&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45031&quot;&gt;#45031&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45060&quot;&gt;#45060&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve eliminated a traversal of the whole DOM tree whenever an &lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt; is attached to the tree, which is especially noticeable when parsing documents with many &amp;lt;iframe&amp;gt; tags (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45236&quot;&gt;#45236&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Stylesheet locks now use &lt;a href=&quot;https://docs.rs/atomic_refcell/0.1.14/atomic_refcell/&quot;&gt;AtomicRefCell&lt;/a&gt;, which is even more efficient than a &lt;a href=&quot;https://docs.rs/parking_lot/0.12.5/parking_lot/&quot;&gt;parking_lot&lt;/a&gt;::&lt;a href=&quot;https://docs.rs/parking_lot/0.12.5/parking_lot/type.RwLock.html&quot;&gt;RwLock&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/44883&quot;&gt;#44883&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;On OpenHarmony, we now have a real refresh driver for reduced idle CPU usage (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/44927&quot;&gt;#44927&lt;/a&gt;), and we now cache the font list on disk for faster startup (&lt;a href=&quot;https://github.com/RichardTjokroutomo&quot;&gt;@RichardTjokroutomo&lt;/a&gt;, &lt;a href=&quot;https://github.com/d-desyatkin&quot;&gt;@d-desyatkin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44158&quot;&gt;#44158&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also reduced allocations, GC rooting steps, and other operations in many parts of Servo (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/SteveSharonSam&quot;&gt;@SteveSharonSam&lt;/a&gt;, &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/nodelpit&quot;&gt;@nodelpit&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/44961&quot;&gt;#44961&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44944&quot;&gt;#44944&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44972&quot;&gt;#44972&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45231&quot;&gt;#45231&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45078&quot;&gt;#45078&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44662&quot;&gt;#44662&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44679&quot;&gt;#44679&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44967&quot;&gt;#44967&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44963&quot;&gt;#44963&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44933&quot;&gt;#44933&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44935&quot;&gt;#44935&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44905&quot;&gt;#44905&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To improve Servo’s &lt;strong&gt;build times&lt;/strong&gt;, we’re moving more code out of our massive &lt;strong&gt;script crate&lt;/strong&gt; (&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/44598&quot;&gt;#44598&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44636&quot;&gt;#44636&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44823&quot;&gt;#44823&lt;/a&gt;), and reduced the size of our dependency tree (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44818&quot;&gt;#44818&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;stability&quot; tabindex=&quot;-1&quot;&gt;Stability &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#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;Several crashes and hangs have been fixed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;in &lt;strong&gt;‘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/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45227&quot;&gt;#45227&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44762&quot;&gt;#44762&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;strong&gt;Media­Stream&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/44781&quot;&gt;#44781&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;strong&gt;item()&lt;/strong&gt; on &lt;strong&gt;attributes&lt;/strong&gt; on &lt;strong&gt;Element&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/44721&quot;&gt;#44721&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;strong&gt;append­Rule()&lt;/strong&gt; on &lt;strong&gt;CSS­Keyframes­Rule&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/45173&quot;&gt;#45173&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;strong&gt;init­Event()&lt;/strong&gt; on &lt;strong&gt;Focus­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/44870&quot;&gt;#44870&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;strong&gt;stop()&lt;/strong&gt; on &lt;strong&gt;Window&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/44804&quot;&gt;#44804&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;code&gt;document.exec­Command(​&amp;quot;delete&amp;quot;)&lt;/code&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/44748&quot;&gt;#44748&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;code&gt;--debug-mozjs&lt;/code&gt; builds (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44745&quot;&gt;#44745&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45001&quot;&gt;#45001&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when evaluating scripts in DevTools while paused (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45050&quot;&gt;#45050&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when previewing some JS values in DevTools (&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/45054&quot;&gt;#45054&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when shaping zero-width spaces in 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/45176&quot;&gt;#45176&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when toggling servoshell’s experimental mode at runtime (&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/45226&quot;&gt;#45226&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&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/MavenRain&quot;&gt;@MavenRain&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/SteveSharonSam&quot;&gt;@SteveSharonSam&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&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/44712&quot;&gt;#44712&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44759&quot;&gt;#44759&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44879&quot;&gt;#44879&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45014&quot;&gt;#45014&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45058&quot;&gt;#45058&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45061&quot;&gt;#45061&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45076&quot;&gt;#45076&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45098&quot;&gt;#45098&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45110&quot;&gt;#45110&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45149&quot;&gt;#45149&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45117&quot;&gt;#45117&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45184&quot;&gt;#45184&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45201&quot;&gt;#45201&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44806&quot;&gt;#44806&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44930&quot;&gt;#44930&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44942&quot;&gt;#44942&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44946&quot;&gt;#44946&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45233&quot;&gt;#45233&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45181&quot;&gt;#45181&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44659&quot;&gt;#44659&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44660&quot;&gt;#44660&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44664&quot;&gt;#44664&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44668&quot;&gt;#44668&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44992&quot;&gt;#44992&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45000&quot;&gt;#45000&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45081&quot;&gt;#45081&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45009&quot;&gt;#45009&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45225&quot;&gt;#45225&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45087&quot;&gt;#45087&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45244&quot;&gt;#45244&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45245&quot;&gt;#45245&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45247&quot;&gt;#45247&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44663&quot;&gt;#44663&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44665&quot;&gt;#44665&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44993&quot;&gt;#44993&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45040&quot;&gt;#45040&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45053&quot;&gt;#45053&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44647&quot;&gt;#44647&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44671&quot;&gt;#44671&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44681&quot;&gt;#44681&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44717&quot;&gt;#44717&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44733&quot;&gt;#44733&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44686&quot;&gt;#44686&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44653&quot;&gt;#44653&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;new-contributors&quot; tabindex=&quot;-1&quot;&gt;New contributors &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/06/30/may-in-servo/#new-contributors&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;A special thanks to the following people for landing their first patch in Servo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AbdAlRahman Gad (&lt;a href=&quot;https://github.com/AbdAlRahmanGad&quot;&gt;@AbdAlRahmanGad&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45213&quot;&gt;#45213&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Onyeka Obi (&lt;a href=&quot;https://github.com/MavenRain&quot;&gt;@MavenRain&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44806&quot;&gt;#44806&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Steve Sharon Sam (&lt;a href=&quot;https://github.com/SteveSharonSam&quot;&gt;@SteveSharonSam&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45030&quot;&gt;#45030&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;avis137 (&lt;a href=&quot;https://github.com/avis137&quot;&gt;@avis137&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44837&quot;&gt;#44837&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Xabier Rodríguez (&lt;a href=&quot;https://github.com/calvaris&quot;&gt;@calvaris&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45084&quot;&gt;#45084&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;June (&lt;a href=&quot;https://github.com/kimjune01&quot;&gt;@kimjune01&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44816&quot;&gt;#44816&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Matt Van Horn (&lt;a href=&quot;https://github.com/mvanhorn&quot;&gt;@mvanhorn&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44740&quot;&gt;#44740&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;nicole (&lt;a href=&quot;https://github.com/n0blenote&quot;&gt;@n0blenote&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44704&quot;&gt;#44704&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;panxt8 (&lt;a href=&quot;https://github.com/panxt8&quot;&gt;@panxt8&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44991&quot;&gt;#44991&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in helping build a web browser?
Take a look at our &lt;a href=&quot;https://starters.servo.org/&quot;&gt;curated list&lt;/a&gt; of issues that are good for new contributors!&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/twisjun/blog/2026/06/30/may-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;7659 USD/month&lt;/strong&gt; (+4.2% from April) 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/2026-05/#:~:text=Servo&quot;&gt;Outreachy interns&lt;/a&gt;&lt;/strong&gt;, and funding &lt;strong&gt;&lt;a href=&quot;https://servo.org/twisjun/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;35 GitHub users&lt;/strong&gt; (+2 from April) 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/twisjun/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% * 7659 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7659&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7659 / 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;7659&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/twisjun/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    kbd {
        background: #00000020;
        margin: 0 0.125rem;
        padding: 0.125rem;
        border-radius: 0.25rem;
    }
    ._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>April in Servo: new Android UI, focus, forms, security fixes, and more!</title>
    <link href="https://servo.org/twisjun/blog/2026/05/31/april-in-servo/"/>
    <updated>2026-05-31T00:00:00Z</updated>
    <id>https://servo.org/twisjun/blog/2026/05/31/april-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.2.0&quot;&gt;&lt;strong&gt;Servo 0.2.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in April, which came out to yet another record &lt;strong&gt;534 commits&lt;/strong&gt; (March: 530).
For security fixes, see &lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#security&quot;&gt;&lt;strong&gt;§ Security&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;aside class=&quot;_note&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; the GitHub release is available now, but &lt;a href=&quot;https://crates.io/crates/servo&quot;&gt;the crates.io release&lt;/a&gt; is not yet complete.
We expect to publish it some time &lt;strong&gt;next week&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twisjun/img/blog/2026-05-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-05-diffie.png&quot; alt=&quot;servoshell 0.2.0 showing several new features: better wrapping for CJK scripts, ‘tab-size’, better file pickers and `&lt;textarea&gt;`, `&lt;select multiple&gt;`, ‘::details-content::before’ and ‘::details-content::after’, and ‘color-mix()’ with any number of colors&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;We’ve shipped several new web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;select multiple&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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43189&quot;&gt;#43189&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;template shadowrootslotassignment&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/44246&quot;&gt;#44246&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;video&amp;gt;&lt;/strong&gt; playback on OpenHarmony (&lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43208&quot;&gt;#43208&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘minimum-scale’&lt;/strong&gt; and &lt;strong&gt;‘maximum-scale’&lt;/strong&gt; values in &lt;strong&gt;&amp;lt;meta name=viewport&amp;gt;&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/40098&quot;&gt;#40098&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43715&quot;&gt;#43715&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘color-mix()’&lt;/strong&gt; with &lt;strong&gt;any number of &amp;lt;color&amp;gt; values&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/43890&quot;&gt;#43890&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘&amp;amp;::before’&lt;/strong&gt; and &lt;strong&gt;‘&amp;amp;::after’&lt;/strong&gt; in &lt;strong&gt;‘::details-content’&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/43878&quot;&gt;#43878&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘revert-rule’&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/43878&quot;&gt;#43878&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘tab-size’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44480&quot;&gt;#44480&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘text-align: match-parent’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44073&quot;&gt;#44073&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new Worker()&lt;/strong&gt; with &lt;strong&gt;blob URLs&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/44004&quot;&gt;#44004&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;get­Context(&lt;code&gt;&amp;quot;webgl&amp;quot;&lt;/code&gt;)&lt;/strong&gt; on &lt;strong&gt;Offscreen­Canvas&lt;/strong&gt; (&lt;a href=&quot;https://github.com/niyabits&quot;&gt;@niyabits&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44159&quot;&gt;#44159&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;detail&lt;/strong&gt; property on &lt;strong&gt;Performance­Mark&lt;/strong&gt; and &lt;strong&gt;Performance­Measure&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/44289&quot;&gt;#44289&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44272&quot;&gt;#44272&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;&lt;strong&gt;‘selectionchange’&lt;/strong&gt; events on &amp;lt;input&amp;gt; and &amp;lt;textarea&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/44461&quot;&gt;#44461&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage­Manager&lt;/strong&gt;, in experimental mode (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43976&quot;&gt;#43976&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;active­Element&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; and &lt;strong&gt;Shadow­Root&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/43861&quot;&gt;#43861&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crypto.subtle.supports()&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/43703&quot;&gt;#43703&lt;/a&gt;) – Servo is the first major browser engine to support this!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cell­Padding&lt;/strong&gt;, &lt;strong&gt;cell­Spacing&lt;/strong&gt;, and &lt;strong&gt;align&lt;/strong&gt; properties on &lt;strong&gt;HTML­Table­Element&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/43903&quot;&gt;#43903&lt;/a&gt;) – previously supported in HTML only&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;related­Target&lt;/strong&gt; on &lt;strong&gt;‘focus’&lt;/strong&gt; and &lt;strong&gt;‘blur’&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/43926&quot;&gt;#43926&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;transfer­From­Image­Bitmap()&lt;/strong&gt; on &lt;strong&gt;Image­Bitmap­Rendering­Context&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Messi002&quot;&gt;@Messi002&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43984&quot;&gt;#43984&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Servo’s support for text in &lt;strong&gt;Chinese&lt;/strong&gt;, &lt;strong&gt;Japanese&lt;/strong&gt;, and &lt;strong&gt;Korean&lt;/strong&gt; languages has improved, with correct wrapping in the layout engine (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43744&quot;&gt;#43744&lt;/a&gt;), and CJK fonts now enabled in servoshell’s browser UI on Windows, Linux, and FreeBSD (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/CynthiaOketch&quot;&gt;@CynthiaOketch&lt;/a&gt;, &lt;a href=&quot;https://github.com/nortti0&quot;&gt;@nortti0&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44055&quot;&gt;#44055&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44138&quot;&gt;#44138&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44514&quot;&gt;#44514&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Navigating to a &lt;strong&gt;JSON file&lt;/strong&gt; as the top-level document now renders the JSON with an &lt;strong&gt;interactive pretty-printer&lt;/strong&gt; (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&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/43702&quot;&gt;#43702&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;April was a big milestone for Servo, with some automated tests failing because they had hard-coded cookie expiry dates set to April 2016 plus ten years.
Surprise!
We’re still here.
Here’s to the next 100 years of Servo (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44341&quot;&gt;#44341&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This is another big 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/twisjun/blog/2026/05/31/april-in-servo/#security&quot;&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#work-in-progress&quot;&gt;&lt;strong&gt;Work in progress&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#servoshell&quot;&gt;&lt;strong&gt;servoshell&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#for-developers&quot;&gt;&lt;strong&gt;For developers&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#embedding-api&quot;&gt;&lt;strong&gt;Embedding API&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#more-on-the-web-platform&quot;&gt;&lt;strong&gt;More on the web platform&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#performance-and-stability&quot;&gt;&lt;strong&gt;Performance and stability&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;security&quot; tabindex=&quot;-1&quot;&gt;Security &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/05/31/april-in-servo/#security&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;Crypto­Key&lt;/strong&gt; now zeroes buffers containing key material after use (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44597&quot;&gt;#44597&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;With only a few exceptions, you can only access DOM APIs in another document if that document is in the &lt;strong&gt;same origin&lt;/strong&gt;.
But if that document is in the same &lt;em&gt;site&lt;/em&gt; with a different port number, Servo currently allows these accesses even though it shouldn’t.
We’ve fixed some (but not all) of these incorrect accesses, specifically those that involve binding a Window or Location method in this document with a &lt;code&gt;this&lt;/code&gt; from the other document (&lt;a href=&quot;https://github.com/yvt&quot;&gt;@yvt&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/28583&quot;&gt;#28583&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a bug where &lt;strong&gt;local­Storage&lt;/strong&gt; and &lt;strong&gt;session­Storage&lt;/strong&gt; were usable in &lt;strong&gt;sandboxed &amp;lt;iframe&amp;gt;&lt;/strong&gt; and shared with every other sandboxed &amp;lt;iframe&amp;gt;, rather than throwing Security­Error (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44002&quot;&gt;#44002&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a bug where &lt;strong&gt;local­Storage&lt;/strong&gt; and &lt;strong&gt;session­Storage&lt;/strong&gt; were shared between all &lt;strong&gt;&amp;lt;iframe srcdoc&amp;gt; documents&lt;/strong&gt;, rather than isolated using the origin of the containing document (&lt;a href=&quot;https://github.com/niyabits&quot;&gt;@niyabits&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43988&quot;&gt;#43988&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44038&quot;&gt;#44038&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a bug where &lt;strong&gt;IndexedDB&lt;/strong&gt; was usable in &lt;strong&gt;sandboxed &amp;lt;iframe&amp;gt;&lt;/strong&gt; and &lt;strong&gt;data: URL web workers&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/44088&quot;&gt;#44088&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a bug where pages in some &lt;strong&gt;IP address origins&lt;/strong&gt; can evict cookies from other IP address origins (&lt;a href=&quot;https://github.com/officialasishkumar&quot;&gt;@officialasishkumar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44152&quot;&gt;#44152&lt;/a&gt;).
Only evicting cookies was possible, not reading or writing them.&lt;/p&gt;
&lt;p&gt;We’ve fixed an &lt;strong&gt;out-of-bounds memory read&lt;/strong&gt; in &lt;strong&gt;tex­Image3D()&lt;/strong&gt; on &lt;strong&gt;Web­GL2­Rendering­Context&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simartin&quot;&gt;@simartin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44270&quot;&gt;#44270&lt;/a&gt;), and fixed some undefined behaviour in servoshell’s signal handler (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43891&quot;&gt;#43891&lt;/a&gt;).&lt;/p&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/twisjun/blog/2026/05/31/april-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;&lt;strong&gt;IndexedDB&lt;/strong&gt; is now enabled in servoshell’s experimental mode (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44245&quot;&gt;#44245&lt;/a&gt;).
As always, embedders can enable it with &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;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html#structfield.dom_indexeddb_enabled&quot;&gt;&lt;code&gt;dom­_indexeddb­_enabled&lt;/code&gt;&lt;/a&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/44245&quot;&gt;#44245&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44283&quot;&gt;#44283&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;IndexedDB now uses Servo’s new &lt;strong&gt;“client storage”&lt;/strong&gt; system, which is based on the &lt;a href=&quot;https://storage.spec.whatwg.org/&quot;&gt;Storage Standard&lt;/a&gt; and will allow us to have a unified on-disk format and quota management for all web platform features that persistently store data (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44374&quot;&gt;#44374&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43900&quot;&gt;#43900&lt;/a&gt;).
We’ve also made key range queries more efficient (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/39009&quot;&gt;#39009&lt;/a&gt;), landed improvements to IDB­Database, IDB­Object­Store, IDB­Cursor, IDB­Key­Range, IDB­Request, and to the handling of transactions, keys, values, and exceptions (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44128&quot;&gt;#44128&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43901&quot;&gt;#43901&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44009&quot;&gt;#44009&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43914&quot;&gt;#43914&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44161&quot;&gt;#44161&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44183&quot;&gt;#44183&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44059&quot;&gt;#44059&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44215&quot;&gt;#44215&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42998&quot;&gt;#42998&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43805&quot;&gt;#43805&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve made more progress on the &lt;strong&gt;Intersection­Observer API&lt;/strong&gt;, under &lt;code&gt;--pref dom­_intersection­_observer­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&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/42204&quot;&gt;#42204&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re continuing to implement &lt;strong&gt;document.exec­Command()&lt;/strong&gt; for &lt;strong&gt;rich text editing&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/44529&quot;&gt;#44529&lt;/a&gt;), under &lt;code&gt;--pref dom­_exec­_command­_enabled&lt;/code&gt;.
This release adds support for the &lt;strong&gt;‘bold’&lt;/strong&gt;, &lt;strong&gt;‘font­Name’&lt;/strong&gt;, &lt;strong&gt;‘font­Size’&lt;/strong&gt;, &lt;strong&gt;‘italic’&lt;/strong&gt;, &lt;strong&gt;‘strikethrough’&lt;/strong&gt;, and &lt;strong&gt;‘underline’&lt;/strong&gt; commands (&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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44511&quot;&gt;#44511&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43287&quot;&gt;#43287&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44432&quot;&gt;#44432&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44410&quot;&gt;#44410&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44194&quot;&gt;#44194&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44030&quot;&gt;#44030&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44039&quot;&gt;#44039&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44041&quot;&gt;#44041&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44075&quot;&gt;#44075&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44234&quot;&gt;#44234&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44250&quot;&gt;#44250&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44331&quot;&gt;#44331&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44390&quot;&gt;#44390&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44137&quot;&gt;#44137&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44293&quot;&gt;#44293&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44312&quot;&gt;#44312&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44347&quot;&gt;#44347&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All of the features above are enabled in servoshell’s experimental mode.&lt;/p&gt;
&lt;p&gt;Servo can now build a very basic &lt;strong&gt;accessibility tree&lt;/strong&gt; for web contents, under &lt;code&gt;--pref accessibility­_enabled&lt;/code&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/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42338&quot;&gt;#42338&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43558&quot;&gt;#43558&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44437&quot;&gt;#44437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44438&quot;&gt;#44438&lt;/a&gt;).
This includes text runs, plus nine other non-interactive accessibility roles (&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/44255&quot;&gt;#44255&lt;/a&gt;).
We’ve also fixed a crash when reloading pages with accessibility enabled (&lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44473&quot;&gt;#44473&lt;/a&gt;), and made accessibility tree updates more efficient (&lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44208&quot;&gt;#44208&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve started implementing the &lt;strong&gt;Sanitizer API&lt;/strong&gt;, under &lt;code&gt;--pref dom­_sanitizer­_enabled&lt;/code&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/44198&quot;&gt;#44198&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44290&quot;&gt;#44290&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44335&quot;&gt;#44335&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44421&quot;&gt;#44421&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44452&quot;&gt;#44452&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44481&quot;&gt;#44481&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44585&quot;&gt;#44585&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44594&quot;&gt;#44594&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also started implementing &lt;strong&gt;Shared­Worker&lt;/strong&gt;, under &lt;code&gt;--pref dom­_sharedworker­_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/44375&quot;&gt;#44375&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44440&quot;&gt;#44440&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re working on the &lt;strong&gt;Wake­Lock API&lt;/strong&gt; too, under &lt;code&gt;--pref dom­_wakelock­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43617&quot;&gt;#43617&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44343&quot;&gt;#44343&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/twisjun/blog/2026/05/31/april-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;servoshell for Android now has a &lt;strong&gt;revamped browser UI&lt;/strong&gt;, including a new &lt;strong&gt;history view&lt;/strong&gt; (&lt;a href=&quot;https://github.com/espy&quot;&gt;@espy&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43795&quot;&gt;#43795&lt;/a&gt;), the &lt;strong&gt;apk is 30% smaller&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/44278&quot;&gt;#44278&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44182&quot;&gt;#44182&lt;/a&gt;), and we’ve fixed the black screen bug when closing settings or switching back from another app (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44327&quot;&gt;#44327&lt;/a&gt;).
You can now close tabs on OpenHarmony too (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42713&quot;&gt;#42713&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twisjun/img/blog/2026-05-android.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-05-android.png&quot; alt=&quot;servoshell 0.2.0 showing the revamped browser UI on Android. from left to right: viewing a web page, the settings view, the history view&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;As for servoshell on desktop platforms, we’ve fixed some focus- and IME-related bugs (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43872&quot;&gt;#43872&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43932&quot;&gt;#43932&lt;/a&gt;), and on Windows, we now install a normal shortcut without the strange behaviour of an “advertised” shortcut (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44223&quot;&gt;#44223&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/twisjun/blog/2026/05/31/april-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;When using the &lt;strong&gt;Inspector&lt;/strong&gt; tab in the Firefox &lt;strong&gt;DevTools&lt;/strong&gt;, the &lt;strong&gt;Rules&lt;/strong&gt; panel now includes declarations in &lt;strong&gt;‘@layer’ rules&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arabson99&quot;&gt;@arabson99&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43912&quot;&gt;#43912&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When &lt;strong&gt;logging expressions&lt;/strong&gt; in the &lt;strong&gt;Console&lt;/strong&gt; tab, and when &lt;strong&gt;hovering over symbols&lt;/strong&gt; in the &lt;strong&gt;Debugger&lt;/strong&gt; tab, you can now get more information about the contents of functions, arrays, objects, and other values (&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/44172&quot;&gt;#44172&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44173&quot;&gt;#44173&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44022&quot;&gt;#44022&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44233&quot;&gt;#44233&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44196&quot;&gt;#44196&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44181&quot;&gt;#44181&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44064&quot;&gt;#44064&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44023&quot;&gt;#44023&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44164&quot;&gt;#44164&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44369&quot;&gt;#44369&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44262&quot;&gt;#44262&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When using the &lt;strong&gt;Debugger&lt;/strong&gt; tab, you can now use the &lt;strong&gt;Scopes&lt;/strong&gt; panel to inspect local and global variables (&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/43792&quot;&gt;#43792&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43791&quot;&gt;#43791&lt;/a&gt;), you can now debug &lt;strong&gt;web worker&lt;/strong&gt; scripts (&lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43981&quot;&gt;#43981&lt;/a&gt;), and we’ve started implementing &lt;strong&gt;blackboxing&lt;/strong&gt;, aka the &lt;strong&gt;Ignore source&lt;/strong&gt; button (&lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44142&quot;&gt;#44142&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also landed some initial support for the &lt;strong&gt;Style Editor&lt;/strong&gt; tab (&lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44517&quot;&gt;#44517&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44462&quot;&gt;#44462&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re working towards re-enabling our automated DevTools tests in CI, which should make the feature more reliable (&lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44577&quot;&gt;#44577&lt;/a&gt;), and we’ve landed a small build reproducibility fix too (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44459&quot;&gt;#44459&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For developers of Servo itself, please note that the &lt;strong&gt;Cargo ‘release’ profile&lt;/strong&gt; is no longer &lt;code&gt;#[cfg(debug­_assertions)]&lt;/code&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/44177&quot;&gt;#44177&lt;/a&gt;).
If you’ve been using ‘release’ as a “faster ‘debug’ with assertions” build locally, consider switching to ‘checked-release’ or ‘medium’.&lt;/p&gt;
&lt;p&gt;The pull request template has been updated (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44135&quot;&gt;#44135&lt;/a&gt;).
&lt;strong&gt;‘Testing’&lt;/strong&gt; and &lt;strong&gt;‘Fixes’&lt;/strong&gt; should go at the &lt;em&gt;bottom&lt;/em&gt; of the PR description, and &lt;strong&gt;‘Testing’&lt;/strong&gt; is about automated tests, not how you tested the PR locally.&lt;/p&gt;
&lt;p&gt;We’ve made more progress on the new &lt;a href=&quot;https://containers.dev/&quot;&gt;&lt;strong&gt;dev container&lt;/strong&gt;&lt;/a&gt;, which will provide an alternative to &lt;a href=&quot;https://book.servo.org/building/building.html&quot;&gt;our usual procedures&lt;/a&gt; for setting up a Servo build environment (&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/44126&quot;&gt;#44126&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44111&quot;&gt;#44111&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44162&quot;&gt;#44162&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44641&quot;&gt;#44641&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44109&quot;&gt;#44109&lt;/a&gt;).
Keep an eye out for that &lt;a href=&quot;https://book.servo.org/building/building.html&quot;&gt;in the book&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;In the meantime, did you know that you can use &lt;a href=&quot;https://lix.systems/&quot;&gt;&lt;strong&gt;Lix&lt;/strong&gt;&lt;/a&gt; or &lt;a href=&quot;https://nixos.org/manual/nix/stable&quot;&gt;&lt;strong&gt;Nix&lt;/strong&gt;&lt;/a&gt; to build Servo on Linux with a lot less hassle, &lt;em&gt;even if&lt;/em&gt; you’re not using NixOS?
For now at least, head to the &lt;a href=&quot;https://book.servo.org/building/nixos.html&quot;&gt;NixOS page&lt;/a&gt; in the book to learn more.
We’ve also fixed a regression that made &lt;code&gt;--debug-mozjs&lt;/code&gt; and &lt;code&gt;MOZJS­_FROM­_SOURCE&lt;/code&gt; builds take much longer to complete on Linux when not using Nix (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44346&quot;&gt;#44346&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed building Servo with the &lt;strong&gt;‘jitspew’ feature&lt;/strong&gt; in mozjs, allowing you to set &lt;strong&gt;IONFLAGS&lt;/strong&gt; to enable JIT logging (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44010&quot;&gt;#44010&lt;/a&gt;).
We’ve also fixed build issues on Windows and FreeBSD (&lt;a href=&quot;https://github.com/zhangxichang&quot;&gt;@zhangxichang&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/44264&quot;&gt;#44264&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44591&quot;&gt;#44591&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/twisjun/blog/2026/05/31/april-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;With this second monthly release of the Servo library, we have some quick notes about &lt;strong&gt;API stability&lt;/strong&gt; and &lt;strong&gt;semver compatibility&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The &lt;a href=&quot;https://crates.io/crates/servo&quot;&gt;‘servo’&lt;/a&gt; package&lt;/strong&gt; follows &lt;a href=&quot;https://doc.rust-lang.org/1.88.0/cargo/reference/specifying-dependencies.html#default-requirements&quot;&gt;Cargo’s rules for semver compatibility&lt;/a&gt;.
0.1.1 is compatible with version 0.1.0, but 0.2.0 is a breaking update.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Until we integrate semver analysis into our release process, each monthly release will have a breaking version number, while non-breaking version numbers may be used for LTS updates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In general, &lt;strong&gt;dependencies of ‘servo’&lt;/strong&gt;, like &lt;a href=&quot;https://crates.io/crates/servo-base&quot;&gt;‘servo-base’&lt;/a&gt; and &lt;a href=&quot;https://crates.io/crates/servo-script&quot;&gt;‘servo-script’&lt;/a&gt;, &lt;strong&gt;do not use semver&lt;/strong&gt;.
Any release may include breaking changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve fixed a &lt;strong&gt;build failure&lt;/strong&gt; affecting embedders with a &lt;strong&gt;new or updated Cargo.lock&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/44093&quot;&gt;#44093&lt;/a&gt;), and landed several other changes to help us with the Servo library release process (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/43972&quot;&gt;#43972&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44642&quot;&gt;#44642&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43182&quot;&gt;#43182&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43866&quot;&gt;#43866&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44086&quot;&gt;#44086&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43797&quot;&gt;#43797&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Breaking changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;Web­View&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.animating&quot;&gt;&lt;code&gt;animating&lt;/code&gt;&lt;/a&gt; now takes &lt;code&gt;&amp;amp;self&lt;/code&gt; instead of &lt;code&gt;self&lt;/code&gt;, so you can call it without cloning the handle (&lt;a href=&quot;https://github.com/JavaDerg&quot;&gt;@JavaDerg&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44253&quot;&gt;#44253&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&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;a href=&quot;https://doc.servo.org/servo/struct.Servo.html#method.site_data_manager&quot;&gt;&lt;code&gt;site­_data­_manager&lt;/code&gt;&lt;/a&gt; now returns &lt;code&gt;&amp;amp;SiteDataManager&lt;/code&gt; instead of &lt;code&gt;Ref&amp;lt;&#39;_, SiteDataManager&amp;gt;&lt;/code&gt; (&lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44116&quot;&gt;#44116&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;&lt;code&gt;Web­View­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; have 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/43895&quot;&gt;#43895&lt;/a&gt;), but they have not worked since February 2026 – use &lt;a href=&quot;https://doc.servo.org/servo/trait.GamepadDelegate.html&quot;&gt;&lt;code&gt;Gamepad­Delegate&lt;/code&gt;&lt;/a&gt; instead&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can now load a URL with &lt;strong&gt;custom request headers&lt;/strong&gt; by calling &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;Web­View&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.load_request&quot;&gt;&lt;code&gt;load­_request&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&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/43338&quot;&gt;#43338&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You can now &lt;strong&gt;retrieve cookies asynchronously&lt;/strong&gt; by calling &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.cookies_for_url_async&quot;&gt;&lt;code&gt;cookies­_for­_url­_async&lt;/code&gt;&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/43794&quot;&gt;#43794&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The synchronous version of that method, &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.cookies_for_url&quot;&gt;&lt;code&gt;cookies­_for­_url&lt;/code&gt;&lt;/a&gt;, was previously not callable because &lt;a href=&quot;https://doc.servo.org/servo/enum.CookieSource.html&quot;&gt;&lt;code&gt;Cookie­Source&lt;/code&gt;&lt;/a&gt; was not exposed to the public API, but we’ve fixed that now (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44124&quot;&gt;#44124&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You can now &lt;strong&gt;clear session cookies&lt;/strong&gt; without clearing &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Cookies#removal_defining_the_lifetime_of_a_cookie&quot;&gt;permanent cookies&lt;/a&gt; by calling &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html&quot;&gt;&lt;code&gt;Site­Data­Manager&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.clear_session_cookies&quot;&gt;&lt;code&gt;clear­_session­_cookies&lt;/code&gt;&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/44166&quot;&gt;#44166&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When &lt;strong&gt;intercepting requests&lt;/strong&gt; with &lt;a href=&quot;https://doc.servo.org/servo/trait.ServoDelegate.html&quot;&gt;&lt;code&gt;Servo­Delegate&lt;/code&gt;&lt;/a&gt;:: and &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;&lt;code&gt;Web­View­Delegate&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html#method.load_web_resource&quot;&gt;&lt;code&gt;load­_web­_resource&lt;/code&gt;&lt;/a&gt;, we now include a &lt;a href=&quot;https://doc.servo.org/servo/struct.WebResourceRequest.html#structfield.destination&quot;&gt;&lt;code&gt;destination&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.WebResourceRequest.html#structfield.referrer_url&quot;&gt;&lt;code&gt;referrer­_url&lt;/code&gt;&lt;/a&gt; in the &lt;a href=&quot;https://doc.servo.org/servo/struct.WebResourceRequest.html&quot;&gt;&lt;code&gt;Web­Resource­Request&lt;/code&gt;&lt;/a&gt;, which can be helpful if you’re implementing &lt;strong&gt;ad blocking&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/44493&quot;&gt;#44493&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You can configure Servo to &lt;strong&gt;write all of its storage to a unique directory&lt;/strong&gt; for that session by enabling &lt;a href=&quot;https://doc.servo.org/servo/struct.Opts.html&quot;&gt;&lt;code&gt;Opts&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.Opts.html#structfield.temporary_storage&quot;&gt;&lt;code&gt;temporary­_storage&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/44433&quot;&gt;#44433&lt;/a&gt;).
Note that these unique directories currently persist after Servo exits, so it’s an isolation feature, not a privacy feature.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WindowRenderingContext.html&quot;&gt;&lt;code&gt;Window­Rendering­Context&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.WindowRenderingContext.html#method.new&quot;&gt;&lt;code&gt;new&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.SoftwareRenderingContext.html&quot;&gt;&lt;code&gt;Software­Rendering­Context&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.SoftwareRenderingContext.html#method.new&quot;&gt;&lt;code&gt;new&lt;/code&gt;&lt;/a&gt; now return an error if the given &lt;code&gt;size&lt;/code&gt; is less than 1x1 (&lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&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/44011&quot;&gt;#44011&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved our API docs for &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;Web­View&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html&quot;&gt;&lt;code&gt;Web­View­Builder&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;&lt;code&gt;Web­View­Delegate&lt;/code&gt;&lt;/a&gt;, &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/struct.PromptDialog.html&quot;&gt;&lt;code&gt;Prompt­Dialog&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/struct.WebResourceLoad.html&quot;&gt;&lt;code&gt;Web­Resource­Load&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/webxr/trait.WebXrRegistry.html&quot;&gt;&lt;code&gt;Web­Xr­Registry&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/struct.Preferences.html&quot;&gt;&lt;code&gt;Preferences&lt;/code&gt;&lt;/a&gt;, and servoshell’s &lt;a href=&quot;https://doc.servo.org/servoshell/prefs/static.EXPERIMENTAL_PREFS.html&quot;&gt;&lt;code&gt;EXPERIMENTAL­_PREFS&lt;/code&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/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43892&quot;&gt;#43892&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43787&quot;&gt;#43787&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44171&quot;&gt;#44171&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43947&quot;&gt;#43947&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also improved our API docs for &lt;a href=&quot;https://doc.servo.org/servo/struct.Opts.html&quot;&gt;&lt;code&gt;Opts&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.OutputOptions.html&quot;&gt;&lt;code&gt;Output­Options&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;Diagnostics­Logging&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.PrefValue.html&quot;&gt;&lt;code&gt;Pref­Value&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/index.html&quot;&gt;&lt;code&gt;servo&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/opts/index.html&quot;&gt;&lt;code&gt;opts&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://doc.servo.org/servo_config/index.html&quot;&gt;&lt;code&gt;servo­_config&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/43802&quot;&gt;#43802&lt;/a&gt;).&lt;/p&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/twisjun/blog/2026/05/31/april-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;&lt;strong&gt;&lt;kbd&gt;Tab&lt;/kbd&gt; navigation&lt;/strong&gt; now works across &lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt; boundaries (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44397&quot;&gt;#44397&lt;/a&gt;), and &lt;strong&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Backspace&lt;/kbd&gt;&lt;/strong&gt; (or &lt;strong&gt;&lt;kbd&gt;⌥&lt;/kbd&gt;&lt;kbd&gt;⌫&lt;/kbd&gt;&lt;/strong&gt;) now &lt;strong&gt;deletes a whole word&lt;/strong&gt; in input fields (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43940&quot;&gt;#43940&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tab characters&lt;/strong&gt; are now rendered correctly in &lt;strong&gt;&amp;lt;pre&amp;gt;&lt;/strong&gt; (and other elements with &lt;strong&gt;‘white-space: pre’&lt;/strong&gt;), with proper tab stops (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44480&quot;&gt;#44480&lt;/a&gt;).
&lt;strong&gt;Spaces&lt;/strong&gt; are now rendered correctly in &lt;strong&gt;2D &amp;lt;canvas&amp;gt;&lt;/strong&gt;, instead of twice as wide as they should be (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43899&quot;&gt;#43899&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;a href&amp;gt;&lt;/strong&gt; now correctly resolves the URL with the page encoding (&lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43822&quot;&gt;#43822&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the default appearance of &lt;strong&gt;&amp;lt;input type=file&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44496&quot;&gt;#44496&lt;/a&gt;) and &lt;strong&gt;&amp;lt;textarea placeholder&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/43770&quot;&gt;#43770&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All &lt;strong&gt;keyboard events&lt;/strong&gt;, &lt;strong&gt;mouse events&lt;/strong&gt;, &lt;strong&gt;wheel events&lt;/strong&gt;, and &lt;strong&gt;pointer events&lt;/strong&gt;, other than &lt;strong&gt;‘pointerenter’&lt;/strong&gt; and &lt;strong&gt;‘pointerleave’&lt;/strong&gt;, now &lt;strong&gt;bubble out of shadow roots&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&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/43799&quot;&gt;#43799&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44094&quot;&gt;#44094&lt;/a&gt;).
&lt;strong&gt;‘error’ events&lt;/strong&gt; on &lt;strong&gt;Window&lt;/strong&gt; now report the correct &lt;strong&gt;filename&lt;/strong&gt; (&lt;strong&gt;source&lt;/strong&gt; in &lt;strong&gt;onerror&lt;/strong&gt;) and &lt;strong&gt;lineno&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/43632&quot;&gt;#43632&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;console.log()&lt;/strong&gt; and friends now support &lt;strong&gt;printf-style formatting directives&lt;/strong&gt;, although for now &lt;code&gt;%c&lt;/code&gt; is ignored (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43897&quot;&gt;#43897&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;file: URLs&lt;/strong&gt; are now considered &lt;strong&gt;secure contexts&lt;/strong&gt;, so they can now use features like &lt;strong&gt;crypto.subtle&lt;/strong&gt; and &lt;strong&gt;crypto.random­UUID&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/43989&quot;&gt;#43989&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exception messages&lt;/strong&gt; have improved in Location, Static­Range, and the HTML­Element family of types (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/MuhammadMouostafa&quot;&gt;@MuhammadMouostafa&lt;/a&gt;, &lt;a href=&quot;https://github.com/treetmitterglad&quot;&gt;@treetmitterglad&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44282&quot;&gt;#44282&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43260&quot;&gt;#43260&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43882&quot;&gt;#43882&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the conformance of &lt;strong&gt;fetch algorithms&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/43970&quot;&gt;#43970&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43798&quot;&gt;#43798&lt;/a&gt;), &lt;strong&gt;focus&lt;/strong&gt; and &lt;strong&gt;tab navigation&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/43842&quot;&gt;#43842&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44029&quot;&gt;#44029&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44360&quot;&gt;#44360&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43859&quot;&gt;#43859&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44535&quot;&gt;#44535&lt;/a&gt;), &lt;strong&gt;form submission&lt;/strong&gt; (&lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43700&quot;&gt;#43700&lt;/a&gt;), &lt;strong&gt;JS modules&lt;/strong&gt; (&lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&lt;/a&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/43741&quot;&gt;#43741&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44179&quot;&gt;#44179&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44042&quot;&gt;#44042&lt;/a&gt;), &lt;strong&gt;page navigation&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/43857&quot;&gt;#43857&lt;/a&gt;), &lt;strong&gt;&amp;lt;svg view­Box&amp;gt;&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/44420&quot;&gt;#44420&lt;/a&gt;), &lt;strong&gt;‘attr()’&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/43878&quot;&gt;#43878&lt;/a&gt;), &lt;strong&gt;‘:focus’&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/43873&quot;&gt;#43873&lt;/a&gt;), &lt;strong&gt;‘font’&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/44061&quot;&gt;#44061&lt;/a&gt;), &lt;strong&gt;‘@keyframes’&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/43461&quot;&gt;#43461&lt;/a&gt;), &lt;strong&gt;‘@property’&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/43878&quot;&gt;#43878&lt;/a&gt;), &lt;strong&gt;‘load’&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/arabson99&quot;&gt;@arabson99&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43807&quot;&gt;#43807&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44046&quot;&gt;#44046&lt;/a&gt;), &lt;strong&gt;fetch­Later()&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/43627&quot;&gt;#43627&lt;/a&gt;), &lt;strong&gt;axes&lt;/strong&gt; and &lt;strong&gt;buttons&lt;/strong&gt; on &lt;strong&gt;Gamepad&lt;/strong&gt; (&lt;a href=&quot;https://github.com/log101&quot;&gt;@log101&lt;/a&gt;, &lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44411&quot;&gt;#44411&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44357&quot;&gt;#44357&lt;/a&gt;), &lt;strong&gt;copy­Tex­Image­2D()&lt;/strong&gt; on &lt;strong&gt;Web­GL­Rendering­Context&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simartin&quot;&gt;@simartin&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/43608&quot;&gt;#43608&lt;/a&gt;), &lt;strong&gt;tex­Image3D()&lt;/strong&gt; on &lt;strong&gt;Web­GL2­Rendering­Context&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simartin&quot;&gt;@simartin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44367&quot;&gt;#44367&lt;/a&gt;), &lt;strong&gt;environment­Blend­Mode&lt;/strong&gt; on &lt;strong&gt;XR­Session&lt;/strong&gt; (&lt;a href=&quot;https://github.com/msub2&quot;&gt;@msub2&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44155&quot;&gt;#44155&lt;/a&gt;), &lt;strong&gt;mark()&lt;/strong&gt; and &lt;strong&gt;measure()&lt;/strong&gt; on &lt;strong&gt;Performance&lt;/strong&gt; (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&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/44471&quot;&gt;#44471&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44199&quot;&gt;#44199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43990&quot;&gt;#43990&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43753&quot;&gt;#43753&lt;/a&gt;), and &lt;strong&gt;Performance­Resource­Timing&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/44228&quot;&gt;#44228&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed bugs related to &lt;strong&gt;console logging&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44243&quot;&gt;#44243&lt;/a&gt;), &lt;strong&gt;‘animation’&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/44299&quot;&gt;#44299&lt;/a&gt;), &lt;strong&gt;‘box-shadow’&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/44474&quot;&gt;#44474&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44457&quot;&gt;#44457&lt;/a&gt;), &lt;strong&gt;‘display: contents’&lt;/strong&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/44551&quot;&gt;#44551&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44299&quot;&gt;#44299&lt;/a&gt;), &lt;strong&gt;‘display: inline-flex’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44281&quot;&gt;#44281&lt;/a&gt;), &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/44550&quot;&gt;#44550&lt;/a&gt;), &lt;strong&gt;‘display: table-row-group’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Veercodeprog&quot;&gt;@Veercodeprog&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43674&quot;&gt;#43674&lt;/a&gt;), &lt;strong&gt;‘overflow-x: clip’&lt;/strong&gt; and &lt;strong&gt;‘overflow-y: clip’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Messi002&quot;&gt;@Messi002&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43620&quot;&gt;#43620&lt;/a&gt;), &lt;strong&gt;‘position: absolute’&lt;/strong&gt; on grid items (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44324&quot;&gt;#44324&lt;/a&gt;), &lt;strong&gt;‘word-spacing: &amp;lt;percentage&amp;gt;’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44031&quot;&gt;#44031&lt;/a&gt;), &lt;strong&gt;remove­Child()&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44133&quot;&gt;#44133&lt;/a&gt;), and &lt;strong&gt;URL.revoke­Object­URL()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&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/43746&quot;&gt;#43746&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43977&quot;&gt;#43977&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44035&quot;&gt;#44035&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/twisjun/blog/2026/05/31/april-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;We’ve fixed some big inefficiencies in Servo.
&lt;strong&gt;append­Child()&lt;/strong&gt; with nested shadow roots is no longer &lt;math&gt;&lt;mrow&gt;&lt;mi&gt;O&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msup&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/math&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&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/44016&quot;&gt;#44016&lt;/a&gt;), and we’ve halved the time it takes to load &lt;a href=&quot;https://262.ecma-international.org/16.0/index.html&quot;&gt;the ECMAScript spec&lt;/a&gt; by fixing the &lt;math&gt;&lt;mrow&gt;&lt;mi&gt;O&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mtext&gt;whole DOM tree&lt;/mtext&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/math&gt; processing of &lt;strong&gt;‘id’&lt;/strong&gt; and &lt;strong&gt;‘name’ attributes&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/44120&quot;&gt;#44120&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44127&quot;&gt;#44127&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44117&quot;&gt;#44117&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo makes its &lt;strong&gt;first TLS connection&lt;/strong&gt; in each session &lt;strong&gt;30–60 ms faster&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/44242&quot;&gt;#44242&lt;/a&gt;), and we’ve instrumented the Servo and servoshell startup processes to find more opportunities for optimisation (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44443&quot;&gt;#44443&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44456&quot;&gt;#44456&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Like most browser engines, Servo is a multi-threaded (and sometimes multi-process) system requiring a great deal of IPC messages to keep everything connected.
&lt;a href=&quot;https://book.servo.org/design-documentation/architecture.html&quot;&gt;Two key components&lt;/a&gt; of this system are the &lt;strong&gt;constellation&lt;/strong&gt; thread, which manages the engine as a whole, and the &lt;strong&gt;script threads&lt;/strong&gt; (or web processes), which render the web pages.
Sending these messages can be expensive though, so to &lt;strong&gt;reduce unnecessary IPC traffic&lt;/strong&gt;, we’ve landed an optimisation that allows script threads to selectively receive only the relevant messages from the constellation (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43124&quot;&gt;#43124&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve reduced the &lt;strong&gt;memory usage&lt;/strong&gt; of each &lt;strong&gt;Attr&lt;/strong&gt;, &lt;strong&gt;Text&lt;/strong&gt;, and &lt;strong&gt;Character­Data&lt;/strong&gt; node in the DOM by 16 bytes (&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/44074&quot;&gt;#44074&lt;/a&gt;), and &lt;strong&gt;fixed a memory leak&lt;/strong&gt; when deleting &lt;strong&gt;&amp;lt;video controls&amp;gt;&lt;/strong&gt; or &lt;strong&gt;&amp;lt;audio controls&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Messi002&quot;&gt;@Messi002&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43983&quot;&gt;#43983&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Our &lt;strong&gt;about:memory&lt;/strong&gt; page is more accurate now too, with new tracking of &lt;strong&gt;libc memory allocations&lt;/strong&gt; on macOS, improved tracking of libc memory allocations on Linux (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44037&quot;&gt;#44037&lt;/a&gt;), and more accurate tracking of Path­Buf and types in &lt;code&gt;tokio&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;data­_url&lt;/code&gt;, and &lt;code&gt;urlpattern&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/43858&quot;&gt;#43858&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Less memory usage isn’t always better in browser engines though, because there are many kinds of caches and other optimisations we can do to make browsing the web faster, at the expense of increased memory usage.
For example, we can greatly speed up &lt;strong&gt;prototype checks&lt;/strong&gt; for DOM objects by storing a number in each object that identifies the concrete type, at the expense of making each DOM object 64 bits larger (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44364&quot;&gt;#44364&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Layout can now &lt;strong&gt;reuse fragments&lt;/strong&gt; in later reflows, in many cases that involve block layout or ‘position: absolute’ (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&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/42904&quot;&gt;#42904&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44231&quot;&gt;#44231&lt;/a&gt;).
We’re also working on &lt;strong&gt;reusing shaping results&lt;/strong&gt; in later reflows, and making inline layout more efficient (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44370&quot;&gt;#44370&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43974&quot;&gt;#43974&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44436&quot;&gt;#44436&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve landed several changes that should reduce the &lt;strong&gt;binary size&lt;/strong&gt; of Servo (&lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&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/44227&quot;&gt;#44227&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44221&quot;&gt;#44221&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44303&quot;&gt;#44303&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44338&quot;&gt;#44338&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44428&quot;&gt;#44428&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44134&quot;&gt;#44134&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also reduced clones, allocations, borrow checks, GC rooting steps, and other operations in many parts of Servo (&lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&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/44008&quot;&gt;#44008&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44544&quot;&gt;#44544&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44271&quot;&gt;#44271&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44279&quot;&gt;#44279&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43826&quot;&gt;#43826&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44052&quot;&gt;#44052&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44139&quot;&gt;#44139&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Several crashes have been fixed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;in compressed­Tex­Sub­Image2D() on Web­GL­Rendering­Context (&lt;a href=&quot;https://github.com/thebabalola&quot;&gt;@thebabalola&lt;/a&gt;, #44050)&lt;/li&gt;
&lt;li&gt;in console.log() (&lt;a href=&quot;https://github.com/thebabalola&quot;&gt;@thebabalola&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43844&quot;&gt;#43844&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in get­Data() on Data­Transfer (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44607&quot;&gt;#44607&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in remove() on Element (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44435&quot;&gt;#44435&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in replace­With() on Element (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44503&quot;&gt;#44503&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in &lt;code&gt;--debug-mozjs&lt;/code&gt; builds (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44386&quot;&gt;#44386&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44573&quot;&gt;#44573&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44581&quot;&gt;#44581&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in flex and grid layout (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&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/44424&quot;&gt;#44424&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44203&quot;&gt;#44203&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in layout queries like &lt;code&gt;offset­Height&lt;/code&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/44560&quot;&gt;#44560&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;in the devtools Debugger tab, when stepping and when inspecting nested values (&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/44024&quot;&gt;#44024&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43995&quot;&gt;#43995&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when removing &amp;lt;colgroup&amp;gt; from the DOM (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43846&quot;&gt;#43846&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when running garbage collection (&lt;a href=&quot;https://github.com/drasticactions&quot;&gt;@drasticactions&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43933&quot;&gt;#43933&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when running servoshell with a &lt;a href=&quot;https://doc.rust-lang.org/1.88.0/std/primitive.u64.html&quot;&gt;&lt;code&gt;u64&lt;/code&gt;&lt;/a&gt; &lt;code&gt;--pref&lt;/code&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/44079&quot;&gt;#44079&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when shadow roots are deeply nested, or when calling attach­Shadow() removes elements from the flat tree (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&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/43888&quot;&gt;#43888&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43930&quot;&gt;#43930&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44259&quot;&gt;#44259&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;when &lt;a href=&quot;https://storage.spec.whatwg.org/&quot;&gt;web storage features&lt;/a&gt; fail to write to disk or encounter SQLite errors (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&lt;/a&gt;, &lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43918&quot;&gt;#43918&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43949&quot;&gt;#43949&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We fixed a crash in servoshell when pressing keys like Ctrl+2 or ⌘2 with not enough tabs open (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44070&quot;&gt;#44070&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOM data structures&lt;/strong&gt; (&lt;code&gt;#[dom­_struct]&lt;/code&gt;) can refer to one another, with the help of &lt;a href=&quot;https://research.mozilla.org/2014/08/26/javascript-servos-only-garbage-collector/&quot;&gt;garbage collection&lt;/a&gt;.
But when DOM objects are being destroyed, those references can become invalid for a brief moment, depending on the order the GC finalizers run in.
This can be unsound if those references are accessed, which is a very easy mistake to make if the type has an &lt;code&gt;impl Drop&lt;/code&gt;.
To help prevent that class of bug, we’re reworking our DOM types so that none of them have &lt;code&gt;#[dom­_struct]&lt;/code&gt; and &lt;code&gt;impl Drop&lt;/code&gt; at the same time (&lt;a href=&quot;https://github.com/willypuzzle&quot;&gt;@willypuzzle&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44119&quot;&gt;#44119&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44501&quot;&gt;#44501&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44513&quot;&gt;#44513&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved our static analysis for GC rooting (&lt;a href=&quot;https://github.com/officialasishkumar&quot;&gt;@officialasishkumar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44489&quot;&gt;#44489&lt;/a&gt;), and 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/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&lt;/a&gt;, &lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/nodelpit&quot;&gt;@nodelpit&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43174&quot;&gt;#43174&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43524&quot;&gt;#43524&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43928&quot;&gt;#43928&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43943&quot;&gt;#43943&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43942&quot;&gt;#43942&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43944&quot;&gt;#43944&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43946&quot;&gt;#43946&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43952&quot;&gt;#43952&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43975&quot;&gt;#43975&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44018&quot;&gt;#44018&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44175&quot;&gt;#44175&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44241&quot;&gt;#44241&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44368&quot;&gt;#44368&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44406&quot;&gt;#44406&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44441&quot;&gt;#44441&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44422&quot;&gt;#44422&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44475&quot;&gt;#44475&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44478&quot;&gt;#44478&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44484&quot;&gt;#44484&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44476&quot;&gt;#44476&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44490&quot;&gt;#44490&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44477&quot;&gt;#44477&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44494&quot;&gt;#44494&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44497&quot;&gt;#44497&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44498&quot;&gt;#44498&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44495&quot;&gt;#44495&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44505&quot;&gt;#44505&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44506&quot;&gt;#44506&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44507&quot;&gt;#44507&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44508&quot;&gt;#44508&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44509&quot;&gt;#44509&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44510&quot;&gt;#44510&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44512&quot;&gt;#44512&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44482&quot;&gt;#44482&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44527&quot;&gt;#44527&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44528&quot;&gt;#44528&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44531&quot;&gt;#44531&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44534&quot;&gt;#44534&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44542&quot;&gt;#44542&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44533&quot;&gt;#44533&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44543&quot;&gt;#44543&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44553&quot;&gt;#44553&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44547&quot;&gt;#44547&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44563&quot;&gt;#44563&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44562&quot;&gt;#44562&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44565&quot;&gt;#44565&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44558&quot;&gt;#44558&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44583&quot;&gt;#44583&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44606&quot;&gt;#44606&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44605&quot;&gt;#44605&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44608&quot;&gt;#44608&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44602&quot;&gt;#44602&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44584&quot;&gt;#44584&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44620&quot;&gt;#44620&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44590&quot;&gt;#44590&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44254&quot;&gt;#44254&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44628&quot;&gt;#44628&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44629&quot;&gt;#44629&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44638&quot;&gt;#44638&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44626&quot;&gt;#44626&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44081&quot;&gt;#44081&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Thanks to a wide range of people, we’ve also landed a bunch of cleanups and refactors (&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/Skgland&quot;&gt;@Skgland&lt;/a&gt;, &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/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/thebabalola&quot;&gt;@thebabalola&lt;/a&gt;, &lt;a href=&quot;https://github.com/CynthiaOketch&quot;&gt;@CynthiaOketch&lt;/a&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/rovertrack&quot;&gt;@rovertrack&lt;/a&gt;, &lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/arabson99&quot;&gt;@arabson99&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &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/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&lt;/a&gt;, &lt;a href=&quot;https://github.com/niyabits&quot;&gt;@niyabits&lt;/a&gt;, &lt;a href=&quot;https://github.com/treetmitterglad&quot;&gt;@treetmitterglad&lt;/a&gt;, &lt;a href=&quot;https://github.com/foresterre&quot;&gt;@foresterre&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&lt;/a&gt;, &lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/StaySafe020&quot;&gt;@StaySafe020&lt;/a&gt;, &lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43772&quot;&gt;#43772&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44006&quot;&gt;#44006&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43860&quot;&gt;#43860&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44121&quot;&gt;#44121&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44160&quot;&gt;#44160&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43884&quot;&gt;#43884&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44154&quot;&gt;#44154&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44569&quot;&gt;#44569&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43939&quot;&gt;#43939&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44003&quot;&gt;#44003&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44110&quot;&gt;#44110&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44122&quot;&gt;#44122&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43824&quot;&gt;#43824&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44635&quot;&gt;#44635&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44103&quot;&gt;#44103&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43978&quot;&gt;#43978&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44092&quot;&gt;#44092&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44114&quot;&gt;#44114&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44277&quot;&gt;#44277&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44454&quot;&gt;#44454&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44274&quot;&gt;#44274&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44237&quot;&gt;#44237&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44232&quot;&gt;#44232&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44167&quot;&gt;#44167&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44214&quot;&gt;#44214&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43820&quot;&gt;#43820&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43825&quot;&gt;#43825&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43810&quot;&gt;#43810&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43838&quot;&gt;#43838&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43841&quot;&gt;#43841&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43847&quot;&gt;#43847&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43875&quot;&gt;#43875&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43876&quot;&gt;#43876&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43889&quot;&gt;#43889&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43893&quot;&gt;#43893&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43896&quot;&gt;#43896&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43881&quot;&gt;#43881&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43906&quot;&gt;#43906&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43913&quot;&gt;#43913&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43908&quot;&gt;#43908&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43917&quot;&gt;#43917&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43910&quot;&gt;#43910&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43921&quot;&gt;#43921&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43924&quot;&gt;#43924&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43925&quot;&gt;#43925&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43907&quot;&gt;#43907&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43923&quot;&gt;#43923&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43916&quot;&gt;#43916&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43909&quot;&gt;#43909&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43911&quot;&gt;#43911&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43957&quot;&gt;#43957&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43969&quot;&gt;#43969&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43967&quot;&gt;#43967&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43915&quot;&gt;#43915&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43954&quot;&gt;#43954&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43963&quot;&gt;#43963&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43959&quot;&gt;#43959&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43955&quot;&gt;#43955&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44067&quot;&gt;#44067&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44068&quot;&gt;#44068&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44071&quot;&gt;#44071&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44084&quot;&gt;#44084&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44265&quot;&gt;#44265&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44115&quot;&gt;#44115&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44358&quot;&gt;#44358&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43848&quot;&gt;#43848&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/twisjun/blog/2026/05/31/april-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;7349 USD/month&lt;/strong&gt; (+2.5% from March) 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/twisjun/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; (−4 from March) 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/twisjun/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% * 7349 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7349&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7349 / 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;7349&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/twisjun/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
    kbd {
        background: #00000020;
        margin: 0 0.125rem;
        padding: 0.125rem;
        border-radius: 0.25rem;
    }
    ._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>March in Servo: keyboard navigation, better debugging, FreeBSD support, and more!</title>
    <link href="https://servo.org/twisjun/blog/2026/04/30/march-in-servo/"/>
    <updated>2026-04-30T00:00:00Z</updated>
    <id>https://servo.org/twisjun/blog/2026/04/30/march-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.1.0&quot;&gt;&lt;strong&gt;Servo 0.1.0&lt;/strong&gt;&lt;/a&gt; represents Servo’s biggest month ever, with a record &lt;strong&gt;530 commits&lt;/strong&gt; and &lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/13/servo-0.1.0-release/&quot;&gt;&lt;strong&gt;our first ever release on crates.io&lt;/strong&gt;&lt;/a&gt;!
For security fixes, see &lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#security&quot;&gt;&lt;strong&gt;§ Security&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With this release Servo becomes more accessible, thanks to &lt;strong&gt;tab navigation&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/42952&quot;&gt;#42952&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43019&quot;&gt;#43019&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43058&quot;&gt;#43058&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43246&quot;&gt;#43246&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43267&quot;&gt;#43267&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43067&quot;&gt;#43067&lt;/a&gt;), &lt;strong&gt;keyboard navigation&lt;/strong&gt; with Alt+Shift and the &lt;strong&gt;accesskey&lt;/strong&gt; attribute (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43031&quot;&gt;#43031&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43144&quot;&gt;#43144&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43434&quot;&gt;#43434&lt;/a&gt;), and &lt;strong&gt;keyboard scrolling&lt;/strong&gt; with Space and Shift+Space (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43322&quot;&gt;#43322&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve shipped several new web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;input type=range&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/BudiArb&quot;&gt;@BudiArb&lt;/a&gt;, &lt;a href=&quot;https://github.com/rayguo17&quot;&gt;@rayguo17&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/41562&quot;&gt;#41562&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;script blocking=render&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/43150&quot;&gt;#43150&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;svg width&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;svg height&amp;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/43583&quot;&gt;#43583&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘X-Frame-Options’&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/43539&quot;&gt;#43539&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43708&quot;&gt;#43708&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘Content-Security-Policy: frame-ancestors’&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/43630&quot;&gt;#43630&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘::first-letter’&lt;/strong&gt; styling (&lt;a href=&quot;https://github.com/minghuaw&quot;&gt;@minghuaw&lt;/a&gt;, &lt;a href=&quot;https://github.com/xiaochengh&quot;&gt;@xiaochengh&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/43027&quot;&gt;#43027&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘::placeholder’&lt;/strong&gt; styling (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43053&quot;&gt;#43053&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘::file-selector-button’&lt;/strong&gt; styling (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/AlexVasiluta&quot;&gt;@AlexVasiluta&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43498&quot;&gt;#43498&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘background-blend-mode’&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/43666&quot;&gt;#43666&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘content’&lt;/strong&gt; on &lt;strong&gt;‘::marker’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/niyabits&quot;&gt;@niyabits&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/43515&quot;&gt;#43515&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘list-style-type: &amp;lt;string&amp;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/43111&quot;&gt;#43111&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘attr(namespace|local)’&lt;/strong&gt; and &lt;strong&gt;‘clamp(none)’&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/43045&quot;&gt;#43045&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/system-color&quot;&gt;&lt;strong&gt;&amp;lt;system-color&amp;gt;&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/longvatrong111&quot;&gt;@longvatrong111&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/42529&quot;&gt;#42529&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43105&quot;&gt;#43105&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43107&quot;&gt;#43107&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drafts.csswg.org/css-easing/#typedef-step-position&quot;&gt;&lt;strong&gt;&amp;lt;step-position&amp;gt;&lt;/strong&gt;&lt;/a&gt; values &lt;strong&gt;‘jump-start’&lt;/strong&gt;, &lt;strong&gt;‘jump-end’&lt;/strong&gt;, &lt;strong&gt;‘jump-none’&lt;/strong&gt;, and &lt;strong&gt;‘jump-both’&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/43061&quot;&gt;#43061&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;&lt;strong&gt;CommandEvent&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/43190&quot;&gt;#43190&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;moveBefore()&lt;/strong&gt; on &lt;strong&gt;Node&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/41238&quot;&gt;#41238&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;relatedTarget&lt;/strong&gt; on &lt;strong&gt;MouseEvent&lt;/strong&gt; and &lt;strong&gt;PointerEvent&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/42989&quot;&gt;#42989&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;command&lt;/strong&gt; on &lt;strong&gt;HTMLButtonElement&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/43190&quot;&gt;#43190&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;selectedOptions&lt;/strong&gt; on &lt;strong&gt;HTMLSelectElement&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jakubadamw&quot;&gt;@jakubadamw&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43017&quot;&gt;#43017&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;url&lt;/strong&gt; on &lt;strong&gt;LargestContentfulPaint&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/42901&quot;&gt;#42901&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42949&quot;&gt;#42949&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crypto.subtle.digest()&lt;/strong&gt; for &lt;strong&gt;TurboSHAKE&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/43551&quot;&gt;#43551&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crypto.subtle.getPublicKey()&lt;/strong&gt; for &lt;strong&gt;ECDH&lt;/strong&gt;, &lt;strong&gt;ECDSA&lt;/strong&gt;, &lt;strong&gt;Ed25519&lt;/strong&gt;, &lt;strong&gt;RSASSA-PKCS1-v1_5&lt;/strong&gt;, &lt;strong&gt;RSA-PSS&lt;/strong&gt;, &lt;strong&gt;RSA-OAEP&lt;/strong&gt;, and &lt;strong&gt;X25519&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&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/43073&quot;&gt;#43073&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43093&quot;&gt;#43093&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43106&quot;&gt;#43106&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43115&quot;&gt;#43115&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twisjun/img/blog/2026-04-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-04-diffie.png&quot; alt=&quot;servoshell 0.1.0 showing several new features: `&lt;input type=range&gt;`; the character “返” rendered differently depending on whether the ‘lang’ is ‘zh’, ‘ja’, or ‘ko’; the emoji “✈️” rendered on a 2D canvas in both emoji presentation and text presentation; a screenshot of the DevTools debugger, showing live variable values; a text field with label “Diffie” that can be focused with Alt+Shift+D; and examples of styling ‘::first-letter’, ‘::placeholder’, and ‘::file-selector-button’&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;servoshell&lt;/strong&gt; is now installed as &lt;code&gt;servoshell&lt;/code&gt; or &lt;code&gt;servoshell.exe&lt;/code&gt;, rather than &lt;code&gt;servo&lt;/code&gt; or &lt;code&gt;servo.exe&lt;/code&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/42958&quot;&gt;#42958&lt;/a&gt;).
&lt;code&gt;--userscripts&lt;/code&gt; has been removed for now, but anyone who uses it is welcome to reinstate it as a wrapper around &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_script&quot;&gt;&lt;code&gt;add­_script&lt;/code&gt;&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/43573&quot;&gt;#43573&lt;/a&gt;).
We’ve fixed a bug where link hover status lines are sometimes not legible (&lt;a href=&quot;https://github.com/simartin&quot;&gt;@simartin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43320&quot;&gt;#43320&lt;/a&gt;), and we’re working on getting servoshell signed for macOS to avoid getting blocked by Gatekeeper (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42912&quot;&gt;#42912&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/issues/11625&quot;&gt;After a long effort&lt;/a&gt; by &lt;a href=&quot;https://github.com/valpackett&quot;&gt;@valpackett&lt;/a&gt;, &lt;a href=&quot;https://github.com/dlrobertson&quot;&gt;@dlrobertson&lt;/a&gt;, and more recently &lt;a href=&quot;https://github.com/nortti0&quot;&gt;@nortti0&lt;/a&gt; and &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt; (&lt;a href=&quot;https://github.com/servo/servo/pull/43116&quot;&gt;#43116&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43134&quot;&gt;#43134&lt;/a&gt;), we can now build Servo for &lt;strong&gt;FreeBSD&lt;/strong&gt;!
Note that Servo 0.1.0 still has some issues that need to be worked around, but you can get all the details in &lt;a href=&quot;https://github.com/servo/servo/issues/44601&quot;&gt;#44601&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/img/blog/2026-04-freebsd.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-04-freebsd.png&quot; alt=&quot;servoshell 0.1.0 showing the FreeBSD website and the Servo new tab page, alongside a terminal that ran fastfetch, showing that this is FreeBSD 15&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/figure&gt;
&lt;p&gt;A great deal of work went into making the &lt;strong&gt;&lt;a href=&quot;http://crates.io/&quot;&gt;crates.io&lt;/a&gt; release&lt;/strong&gt; possible, including renaming &lt;code&gt;libservo&lt;/code&gt; to just &lt;code&gt;servo&lt;/code&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/43141&quot;&gt;#43141&lt;/a&gt;), making each package self-contained (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43180&quot;&gt;#43180&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43165&quot;&gt;#43165&lt;/a&gt;), fixing build issues (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&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/43170&quot;&gt;#43170&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43458&quot;&gt;#43458&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43463&quot;&gt;#43463&lt;/a&gt;) and &lt;a href=&quot;http://crates.io/&quot;&gt;crates.io&lt;/a&gt; compliance issues (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43459&quot;&gt;#43459&lt;/a&gt;), configuring package metadata (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/StaySafe020&quot;&gt;@StaySafe020&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43078&quot;&gt;#43078&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43264&quot;&gt;#43264&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43451&quot;&gt;#43451&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43457&quot;&gt;#43457&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43654&quot;&gt;#43654&lt;/a&gt;), and organising our dependency tree (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&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/42916&quot;&gt;#42916&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43243&quot;&gt;#43243&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43263&quot;&gt;#43263&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43516&quot;&gt;#43516&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43526&quot;&gt;#43526&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43552&quot;&gt;#43552&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43615&quot;&gt;#43615&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43622&quot;&gt;#43622&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43273&quot;&gt;#43273&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43092&quot;&gt;#43092&lt;/a&gt;).
As a result, you can now take your first step towards &lt;a href=&quot;https://book.servo.org/embedding/overview.html&quot;&gt;embedding Servo&lt;/a&gt; in a Rust app with:&lt;/p&gt;
&lt;figure&gt;
&lt;pre&gt;&lt;code&gt;$ cargo add servo
&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;This is another big 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/twisjun/blog/2026/04/30/march-in-servo/#security&quot;&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#work-in-progress&quot;&gt;&lt;strong&gt;Work in progress&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#for-developers&quot;&gt;&lt;strong&gt;For developers&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#embedding-and-automation&quot;&gt;&lt;strong&gt;Embedding and automation&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#more-on-the-web-platform&quot;&gt;&lt;strong&gt;More on the web platform&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#performance-and-stability&quot;&gt;&lt;strong&gt;Performance and stability&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;security&quot; tabindex=&quot;-1&quot;&gt;Security &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#security&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;crypto.subtle.deriveBits()&lt;/strong&gt; for &lt;strong&gt;X25519&lt;/strong&gt; checking for all-zero secrets, and &lt;strong&gt;verify()&lt;/strong&gt; for &lt;strong&gt;HMAC&lt;/strong&gt; comparing signatures, are now done &lt;strong&gt;in constant time&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/43775&quot;&gt;#43775&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43773&quot;&gt;#43773&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘Content-Security-Policy’&lt;/strong&gt; now handles redirects correctly (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43438&quot;&gt;#43438&lt;/a&gt;), and sends violation reports with the correct &lt;strong&gt;blockedURI&lt;/strong&gt; and &lt;strong&gt;referrer&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/43367&quot;&gt;#43367&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43645&quot;&gt;#43645&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43483&quot;&gt;#43483&lt;/a&gt;).
The policy in &amp;lt;meta&amp;gt; now combines with the policy sent in HTTP headers, rather than overriding it (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43063&quot;&gt;#43063&lt;/a&gt;).
When checking nonces, we now reject elements with duplicate attributes (&lt;a href=&quot;https://github.com/dyegoaurelio&quot;&gt;@dyegoaurelio&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43216&quot;&gt;#43216&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The document containing an &lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt; can no longer access the contents of error pages (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43539&quot;&gt;#43539&lt;/a&gt;), and CSP violations inside an &amp;lt;iframe&amp;gt; are now correctly reported (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43652&quot;&gt;#43652&lt;/a&gt;).&lt;/p&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/twisjun/blog/2026/04/30/march-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 landed more work towards supporting &lt;strong&gt;IndexedDB&lt;/strong&gt;, under &lt;code&gt;--pref dom­_indexeddb­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/arihant2math&quot;&gt;@arihant2math&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/jerensl&quot;&gt;@jerensl&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42139&quot;&gt;#42139&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42727&quot;&gt;#42727&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43096&quot;&gt;#43096&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43041&quot;&gt;#43041&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42451&quot;&gt;#42451&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43721&quot;&gt;#43721&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43754&quot;&gt;#43754&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42786&quot;&gt;#42786&lt;/a&gt;),
and towards supporting &lt;strong&gt;IntersectionObserver&lt;/strong&gt;, under &lt;code&gt;--pref dom­_intersection­_observer­_enabled&lt;/code&gt; (&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/42251&quot;&gt;#42251&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re continuing to implement &lt;strong&gt;document.execCommand()&lt;/strong&gt; for &lt;strong&gt;rich text editing&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/43177&quot;&gt;#43177&lt;/a&gt;), under &lt;code&gt;--pref dom­_exec­_command­_enabled&lt;/code&gt;.
&lt;strong&gt;‘beforeinput’&lt;/strong&gt; and &lt;strong&gt;‘input’&lt;/strong&gt; events are now fired when executing supported and enabled 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/43087&quot;&gt;#43087&lt;/a&gt;), the &lt;strong&gt;‘defaultParagraphSeparator’&lt;/strong&gt; and &lt;strong&gt;‘styleWithCSS’&lt;/strong&gt; commands are now supported (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43028&quot;&gt;#43028&lt;/a&gt;), and the &lt;strong&gt;‘delete’&lt;/strong&gt; command is partially supported (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43016&quot;&gt;#43016&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43082&quot;&gt;#43082&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re also working on the &lt;a href=&quot;https://drafts.csswg.org/css-font-loading/&quot;&gt;&lt;strong&gt;Font Loading API&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/43286&quot;&gt;#43286&lt;/a&gt;), under &lt;code&gt;--pref dom­_fontface­_enabled&lt;/code&gt;.
&lt;strong&gt;new FontFace()&lt;/strong&gt; now accepts ArrayBuffer in its &lt;code&gt;source&lt;/code&gt; argument (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43281&quot;&gt;#43281&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All of the features above are enabled in servoshell’s experimental mode.&lt;/p&gt;
&lt;p&gt;Work on &lt;strong&gt;accessibility&lt;/strong&gt; support for web contents continues under &lt;code&gt;--pref accessibility­_enabled&lt;/code&gt;.
There was a &lt;a href=&quot;https://servo.org/twisjun/blog/2026/04/30/march-in-servo/#embedding-and-automation&quot;&gt;&lt;strong&gt;breaking change&lt;/strong&gt;&lt;/a&gt; in the embedding API (&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/43029&quot;&gt;#43029&lt;/a&gt;), and we’ve landed support for “grafting” the accessibility tree of a document into that of its containing webview (&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/43012&quot;&gt;#43012&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43013&quot;&gt;#43013&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43556&quot;&gt;#43556&lt;/a&gt;).
As a result, when you navigate, separate documents can have separate accessibility trees without complicating the embedder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;link rel=modulepreload&amp;gt;&lt;/strong&gt; is now partially supported (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42964&quot;&gt;#42964&lt;/a&gt;), though recursive fetching of descendants is gated by &lt;code&gt;--pref dom­_allow­_preloading­_module­_descendants&lt;/code&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/43353&quot;&gt;#43353&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For a long time, Servo has had some support for the &lt;a href=&quot;https://webbluetoothcg.github.io/web-bluetooth/&quot;&gt;&lt;strong&gt;Web Bluetooth API&lt;/strong&gt;&lt;/a&gt; under &lt;code&gt;--pref dom­_bluetooth­_enabled&lt;/code&gt;.
We’ve recently reworked our implementation to adopt &lt;a href=&quot;https://nonpolynomial.com/2023/10/30/how-to-beg-borrow-steal-your-way-to-a-cross-platform-bluetooth-le-library/&quot;&gt;&lt;strong&gt;btleplug&lt;/strong&gt;&lt;/a&gt;, the cross-platform Rust-native Bluetooth LE library (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43529&quot;&gt;#43529&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43581&quot;&gt;#43581&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re now implementing the &lt;a href=&quot;https://www.w3.org/TR/web-animations/&quot;&gt;&lt;strong&gt;Web Animations API&lt;/strong&gt;&lt;/a&gt;, starting with AnimationTimeline and DocumentTimeline (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43711&quot;&gt;#43711&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve landed more fixes to Servo’s &lt;a href=&quot;https://servo.org/twisjun/blog/2026/03/31/february-in-servo/#:~:text=Parsing%20web%20pages&quot;&gt;&lt;strong&gt;async parser&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/42930&quot;&gt;#42930&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42959&quot;&gt;#42959&lt;/a&gt;), under &lt;code&gt;--pref dom­_servoparser­_async­_html­_tokenizer­_enabled&lt;/code&gt;.
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;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/twisjun/blog/2026/04/30/march-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;Servo’s DevTools feature now has partial support for inspecting &lt;strong&gt;service workers&lt;/strong&gt; (&lt;a href=&quot;https://github.com/CynthiaOketch&quot;&gt;@CynthiaOketch&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43659&quot;&gt;#43659&lt;/a&gt;), as well as using the &lt;strong&gt;navigation controls&lt;/strong&gt; along the top of the UI (&lt;a href=&quot;https://github.com/brentschroeter&quot;&gt;@brentschroeter&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/43026&quot;&gt;#43026&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;Inspector&lt;/strong&gt; tab, we’ve fixed a bug where the UI stops updating when navigating to a new page (&lt;a href=&quot;https://github.com/brentschroeter&quot;&gt;@brentschroeter&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43153&quot;&gt;#43153&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;Console&lt;/strong&gt; tab, you can now evaluate JavaScript in &lt;strong&gt;web workers&lt;/strong&gt; and &lt;strong&gt;service workers&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43361&quot;&gt;#43361&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43492&quot;&gt;#43492&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;Step In&lt;/strong&gt;, &lt;strong&gt;Step Out&lt;/strong&gt;, and &lt;strong&gt;Step Over&lt;/strong&gt; (&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/42907&quot;&gt;#42907&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43040&quot;&gt;#43040&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43042&quot;&gt;#43042&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43135&quot;&gt;#43135&lt;/a&gt;).
We’ve landed partial support for the &lt;strong&gt;Scopes&lt;/strong&gt; panel (&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/43166&quot;&gt;#43166&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43167&quot;&gt;#43167&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43232&quot;&gt;#43232&lt;/a&gt;), the &lt;strong&gt;Call stack&lt;/strong&gt; panel (&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/43015&quot;&gt;#43015&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43039&quot;&gt;#43039&lt;/a&gt;), and showing you information when &lt;strong&gt;hovering over objects&lt;/strong&gt;, &lt;strong&gt;arrays&lt;/strong&gt;, &lt;strong&gt;functions&lt;/strong&gt;, and other values (&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/43319&quot;&gt;#43319&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43356&quot;&gt;#43356&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43456&quot;&gt;#43456&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42996&quot;&gt;#42996&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42936&quot;&gt;#42936&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42994&quot;&gt;#42994&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twisjun/img/blog/2026-04-debugger.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-04-debugger.png&quot; alt=&quot;screenshot of the DevTools debugger, showing live variable values&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;We’ve fixed some long-outstanding bugs where the &lt;strong&gt;DevTools UI may stop responding&lt;/strong&gt; due to protocol desyncs (&lt;a href=&quot;https://github.com/brentschroeter&quot;&gt;@brentschroeter&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/43230&quot;&gt;#43230&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43236&quot;&gt;#43236&lt;/a&gt;), or due to messages from multiple Servo threads being interleaved (&lt;a href=&quot;https://github.com/brentschroeter&quot;&gt;@brentschroeter&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/43472&quot;&gt;#43472&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For developers of Servo itself, &lt;a href=&quot;https://book.servo.org/building/building.html#mach&quot;&gt;&lt;strong&gt;mach&lt;/strong&gt;&lt;/a&gt; can be a bit opaque at times.
To make mach more transparent and composable, we’ve added &lt;code&gt;mach print-env&lt;/code&gt; and &lt;code&gt;mach exec&lt;/code&gt; commands (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42888&quot;&gt;#42888&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re also working on a new &lt;a href=&quot;https://containers.dev/&quot;&gt;&lt;strong&gt;dev container&lt;/strong&gt;&lt;/a&gt;, which will provide an alternative to &lt;a href=&quot;https://book.servo.org/building/building.html&quot;&gt;our usual procedures&lt;/a&gt; for setting up a Servo build environment (&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/43127&quot;&gt;#43127&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43131&quot;&gt;#43131&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43139&quot;&gt;#43139&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/twisjun/blog/2026/04/30/march-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;Breaking changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;set­_accessibility­_active()&lt;/code&gt; is now &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;WebView&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.set_accessibility_active&quot;&gt;&lt;code&gt;set­_accessibility­_active()&lt;/code&gt;&lt;/a&gt; (&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/43029&quot;&gt;#43029&lt;/a&gt;), to make the API harder to misuse (see the docs for more details).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What was previously named &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;WebView&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;pinch­_zoom()&lt;/code&gt; has been renamed to &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.adjust_pinch_zoom&quot;&gt;&lt;code&gt;adjust­_pinch­_zoom()&lt;/code&gt;&lt;/a&gt;, and we’ve added a &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.pinch_zoom&quot;&gt;&lt;code&gt;pinch­_zoom()&lt;/code&gt;&lt;/a&gt; method that lets you read the current pinch zoom level (&lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43228&quot;&gt;#43228&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;WebView&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;set­_delegate()&lt;/code&gt;, &lt;code&gt;set­_clipboard­_delegate()&lt;/code&gt;, and &lt;code&gt;set­_gamepad­_provider()&lt;/code&gt; are now &lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html&quot;&gt;&lt;code&gt;WebViewBuilder&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html#method.delegate&quot;&gt;&lt;code&gt;delegate()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html#method.clipboard_delegate&quot;&gt;&lt;code&gt;clipboard­_delegate()&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html#method.gamepad_delegate&quot;&gt;&lt;code&gt;gamepad­_delegate()&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/servo/servo/pull/43205&quot;&gt;#43205&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43233&quot;&gt;#43233&lt;/a&gt;). Note that set­_gamepad­_&lt;strong&gt;provider&lt;/strong&gt;() is now gamepad­_&lt;strong&gt;delegate&lt;/strong&gt;(), consistent with the &lt;code&gt;GamepadProvider&lt;/code&gt; rename below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&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_bluetooth_device_dialog&quot;&gt;&lt;code&gt;show­_bluetooth­_device­_dialog()&lt;/code&gt;&lt;/a&gt; has been reworked to use the same “request object” pattern as the &lt;code&gt;request­_*()&lt;/code&gt; methods, giving you a &lt;a href=&quot;https://doc.servo.org/servo/struct.BluetoothDeviceSelectionRequest.html&quot;&gt;&lt;code&gt;Bluetooth­Device­Selection­Request&lt;/code&gt;&lt;/a&gt; with clear methods (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43580&quot;&gt;#43580&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;GamepadProvider&lt;/code&gt; has been renamed to &lt;a href=&quot;https://doc.servo.org/servo/trait.GamepadDelegate.html&quot;&gt;&lt;code&gt;GamepadDelegate&lt;/code&gt;&lt;/a&gt;, and &lt;code&gt;gamepad­_provider()&lt;/code&gt; on &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html&quot;&gt;&lt;code&gt;WebView&lt;/code&gt;&lt;/a&gt; has been renamed to &lt;code&gt;gamepad­_delegate()&lt;/code&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/43233&quot;&gt;#43233&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The empty default implementation of &lt;a href=&quot;https://doc.servo.org/servo/trait.EventLoopWaker.html&quot;&gt;&lt;code&gt;EventLoopWaker&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/trait.EventLoopWaker.html#tymethod.wake&quot;&gt;&lt;code&gt;wake&lt;/code&gt;&lt;/a&gt; has been removed, because it almost never makes sense for a new custom impl to leave the method empty (&lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&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/43250&quot;&gt;#43250&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.Opts.html&quot;&gt;&lt;code&gt;Opts&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;print­_pwm&lt;/code&gt; is now &lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html&quot;&gt;&lt;code&gt;DiagnosticsLogging&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.DiagnosticsLogging.html#structfield.progressive_web_metrics&quot;&gt;&lt;code&gt;progressive­_web­_metrics&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/servo/servo/pull/43209&quot;&gt;#43209&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Removed from our API:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.Opts.html&quot;&gt;&lt;code&gt;Opts&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;nonincremental­_layout&lt;/code&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/43207&quot;&gt;#43207&lt;/a&gt;) – no replacement. This only really worked in legacy layout.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/struct.Opts.html&quot;&gt;&lt;code&gt;Opts&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;user­_stylesheets&lt;/code&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/43206&quot;&gt;#43206&lt;/a&gt;) – use &lt;a href=&quot;https://doc.servo.org/servo/struct.UserContentManager.html&quot;&gt;&lt;code&gt;UserContentManager&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; instead. This is how servoshell’s &lt;code&gt;--user-stylesheet&lt;/code&gt; option works.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can now read and write cookies with &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.cookies_for_url&quot;&gt;&lt;code&gt;cookies­_for­_url()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.SiteDataManager.html#method.set_cookie_for_url&quot;&gt;&lt;code&gt;set­_cookie­_for­_url()&lt;/code&gt;&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/43600&quot;&gt;#43600&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/trait.ClipboardDelegate.html&quot;&gt;&lt;code&gt;ClipboardDelegate&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.servo.org/servo/struct.StringRequest.html&quot;&gt;&lt;code&gt;StringRequest&lt;/code&gt;&lt;/a&gt; are now exposed to the public API, allowing you to implement custom clipboard delegates (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43203&quot;&gt;#43203&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43261&quot;&gt;#43261&lt;/a&gt;).
You can pass your custom delegate to &lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html&quot;&gt;&lt;code&gt;WebViewBuilder&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html#method.clipboard_delegate&quot;&gt;&lt;code&gt;clipboard­_delegate()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can now get the &lt;a href=&quot;https://doc.servo.org/servo/struct.EmbedderControlId.html&quot;&gt;&lt;code&gt;EmbedderControlId&lt;/code&gt;&lt;/a&gt; associated with an &lt;a href=&quot;https://doc.servo.org/servo/struct.InputMethodControl.html&quot;&gt;&lt;code&gt;InputMethodControl&lt;/code&gt;&lt;/a&gt; by calling &lt;a href=&quot;https://doc.servo.org/servo/struct.InputMethodControl.html&quot;&gt;&lt;code&gt;InputMethodControl&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/struct.InputMethodControl.html#method.id&quot;&gt;&lt;code&gt;id()&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43248&quot;&gt;#43248&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://doc.servo.org/servo/enum.PixelFormat.html&quot;&gt;&lt;code&gt;PixelFormat&lt;/code&gt;&lt;/a&gt; now implements &lt;a href=&quot;https://doc.rust-lang.org/1.92.0/core/fmt/trait.Debug.html&quot;&gt;&lt;code&gt;Debug&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&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/43249&quot;&gt;#43249&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the docs for &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;a href=&quot;https://doc.servo.org/servo/struct.ServoBuilder.html&quot;&gt;&lt;code&gt;ServoBuilder&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/struct.WebViewBuilder.html&quot;&gt;&lt;code&gt;WebViewBuilder&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/trait.RenderingContext.html&quot;&gt;&lt;code&gt;RenderingContext&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43229&quot;&gt;#43229&lt;/a&gt;), &lt;a href=&quot;https://doc.servo.org/servo/struct.EmbedderControlId.html&quot;&gt;&lt;code&gt;EmbedderControlId&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.EmbedderControlRequest.html&quot;&gt;&lt;code&gt;EmbedderControlRequest&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.EmbedderControlResponse.html&quot;&gt;&lt;code&gt;EmbedderControlResponse&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.SimpleDialogRequest.html&quot;&gt;&lt;code&gt;SimpleDialogRequest&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.AlertResponse.html&quot;&gt;&lt;code&gt;AlertResponse&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.ConfirmResponse.html&quot;&gt;&lt;code&gt;ConfirmResponse&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.PromptResponse.html&quot;&gt;&lt;code&gt;PromptResponse&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://doc.servo.org/servo/enum.EmbedderMsg.html&quot;&gt;&lt;code&gt;EmbedderMsg&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/43564&quot;&gt;#43564&lt;/a&gt;), &lt;a href=&quot;https://doc.servo.org/servo/resources/trait.ResourceReaderMethods.html&quot;&gt;&lt;code&gt;ResourceReaderMethods&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/43769&quot;&gt;#43769&lt;/a&gt;), &lt;a href=&quot;https://doc.servo.org/servo/&quot;&gt;&lt;code&gt;servo&lt;/code&gt;&lt;/a&gt;::&lt;a href=&quot;https://doc.servo.org/servo/input_events/index.html&quot;&gt;&lt;code&gt;input­_events&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/43681&quot;&gt;#43681&lt;/a&gt;), and &lt;a href=&quot;https://doc.servo.org/servo/struct.WheelDelta.html&quot;&gt;&lt;code&gt;WheelDelta&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&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/43210&quot;&gt;#43210&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We fixed a deadlock in &lt;strong&gt;WebDriver&lt;/strong&gt; that occurs under heavy use of &lt;strong&gt;&lt;a href=&quot;https://w3c.github.io/webdriver/#actions&quot;&gt;actions&lt;/a&gt;&lt;/strong&gt; from multiple input sources (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43202&quot;&gt;#43202&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43169&quot;&gt;#43169&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43262&quot;&gt;#43262&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43275&quot;&gt;#43275&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43301&quot;&gt;#43301&lt;/a&gt;), &lt;strong&gt;‘pointerMove’ actions&lt;/strong&gt; with a ‘duration’ are now smoothly interpolated (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42946&quot;&gt;#42946&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43076&quot;&gt;#43076&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Add Cookie&lt;/strong&gt; is now more conformant (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43690&quot;&gt;#43690&lt;/a&gt;), which led to Servo developers landing &lt;a href=&quot;https://github.com/w3c/webdriver/pull/1955&quot;&gt;a spec patch&lt;/a&gt;.
&lt;strong&gt;‘pause’ actions&lt;/strong&gt; are now slightly more efficient (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43014&quot;&gt;#43014&lt;/a&gt;), and we’ve fixed a bug where &lt;strong&gt;‘wheel’ actions&lt;/strong&gt; fail 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/43126&quot;&gt;#43126&lt;/a&gt;).&lt;/p&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/twisjun/blog/2026/04/30/march-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;&lt;strong&gt;Carets now blink&lt;/strong&gt; in text fields (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43128&quot;&gt;#43128&lt;/a&gt;).
You can &lt;a href=&quot;https://doc.servo.org/servo/prefs/struct.Preferences.html#structfield.editing_caret_blink_time&quot;&gt;configure or disable&lt;/a&gt; blinking carets with &lt;code&gt;--pref editing_caret_blink_time=0&lt;/code&gt; or a duration in milliseconds.
&lt;strong&gt;Clicking to move the caret&lt;/strong&gt; is more forgiving now (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43238&quot;&gt;#43238&lt;/a&gt;), and moving the caret by a &lt;strong&gt;word at a time&lt;/strong&gt; is more conventional on Windows and Linux, with Ctrl instead of Alt (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43436&quot;&gt;#43436&lt;/a&gt;).
We’ve also fixed a bug where pressing the arrow keys in text fields both moves the caret (good) and scrolls the page (bad), and fixed a bug where the caret fails to render on empty lines (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/freyacodes&quot;&gt;@freyacodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43247&quot;&gt;#43247&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42218&quot;&gt;#42218&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Input&lt;/strong&gt; has improved, with more responsive &lt;strong&gt;touchpad scrolling&lt;/strong&gt; on Linux (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/chrisduerr&quot;&gt;@chrisduerr&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43350&quot;&gt;#43350&lt;/a&gt;).
&lt;strong&gt;Pointer events&lt;/strong&gt; and &lt;strong&gt;mouse events&lt;/strong&gt; can now be &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/Event_bubbling#event_capture&quot;&gt;captured&lt;/a&gt; across shadow DOM boundaries&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/42987&quot;&gt;#42987&lt;/a&gt;), and we’ve now started working towards shadow-DOM-compatible focus (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43811&quot;&gt;#43811&lt;/a&gt;).
Pressing &lt;strong&gt;Space&lt;/strong&gt; or &lt;strong&gt;Enter&lt;/strong&gt; inside text fields no longer causes them to be clicked (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43343&quot;&gt;#43343&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;lang&lt;/strong&gt; attribute is now taken into account when shaping, which is important for the correct rendering of Chinese and Japanese text (&lt;a href=&quot;https://github.com/RichardTjokroutomo&quot;&gt;@RichardTjokroutomo&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/43447&quot;&gt;#43447&lt;/a&gt;).
&lt;strong&gt;‘font-weight’&lt;/strong&gt; is now matched more accurately when no available font is an exact match (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43125&quot;&gt;#43125&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Navigation&lt;/strong&gt; is one of the most complicated parts of HTML: navigating can &lt;a href=&quot;javascript:&amp;quot;diffie (reload to continue reading)&amp;quot;&quot;&gt;run some JavaScript that replaces the page&lt;/a&gt;, &lt;a href=&quot;javascript:alert(&amp;quot;diffie&amp;quot;)&quot;&gt;just run some JavaScript&lt;/a&gt;, or depending on the response, &lt;a href=&quot;http://google.com/generate_204&quot;&gt;do nothing at all&lt;/a&gt;.
&lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt; makes navigation doubly complicated: the document containing an &amp;lt;iframe&amp;gt; can observe and interact with the document inside the &amp;lt;iframe&amp;gt; in various ways, often synchronously.
This has been the source of &lt;a href=&quot;https://github.com/servo/servo/issues/14856&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/issues/23373&quot;&gt;bugs&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/issues/24901&quot;&gt;over&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/issues/31242&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;https://github.com/servo/servo/issues/31973&quot;&gt;years&lt;/a&gt;, but we’ve recently fixed one of those major issues (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43496&quot;&gt;#43496&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;&lt;div style=&quot;display: flex; gap: 1em; align-items: center;&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-04-javascript-url-special-case.png&quot; alt=&quot;screenshot of the HTML specification, showing that “the javascript: URL special case” is referenced in eight other sections&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://servo.org/twisjun/img/blog/2026-04-is-initial-about-blank.png&quot; alt=&quot;screenshot of the HTML specification, showing that “is initial about:blank” is referenced in eighteen other sections&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;&lt;figcaption&gt;
&lt;p&gt;&lt;code&gt;javascript:&lt;/code&gt; URLs are &lt;a href=&quot;https://html.spec.whatwg.org/multipage/#the-javascript:-url-special-case&quot;&gt;a massive special case&lt;/a&gt; with &lt;a href=&quot;https://github.com/whatwg/html/issues?q=label%3A%22topic%3A%20javascript%3A%20URLs%22&quot;&gt;many quirks&lt;/a&gt;, and &amp;lt;iframe&amp;gt; has &lt;a href=&quot;https://html.spec.whatwg.org/multipage/#is-initial-about:blank&quot;&gt;its own big edge cases&lt;/a&gt;.&lt;/p&gt;
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;new Worker()&lt;/strong&gt; now supports &lt;strong&gt;JS modules&lt;/strong&gt; (&lt;a href=&quot;https://github.com/pylbrecht&quot;&gt;@pylbrecht&lt;/a&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/40365&quot;&gt;#40365&lt;/a&gt;), and &lt;strong&gt;CanvasRenderingContext2D&lt;/strong&gt; now supports drawing text with &lt;strong&gt;Variation Selectors&lt;/strong&gt;, allowing you to control things like emoji presentation and CJK shaping (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43449&quot;&gt;#43449&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now fires &lt;strong&gt;‘pointerover’&lt;/strong&gt;, &lt;strong&gt;‘pointerout’&lt;/strong&gt;, &lt;strong&gt;‘pointerenter’&lt;/strong&gt;, and &lt;strong&gt;‘pointerleave’&lt;/strong&gt; events on web content (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42736&quot;&gt;#42736&lt;/a&gt;), &lt;strong&gt;‘scroll’&lt;/strong&gt; events on &lt;strong&gt;VisualViewport&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/42771&quot;&gt;#42771&lt;/a&gt;), and &lt;strong&gt;‘scrollend’&lt;/strong&gt; events on &lt;strong&gt;Document&lt;/strong&gt;, &lt;strong&gt;Element&lt;/strong&gt;, and &lt;strong&gt;VisualViewport&lt;/strong&gt; (&lt;a href=&quot;https://github.com/abdelrahman1234567&quot;&gt;@abdelrahman1234567&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/38773&quot;&gt;#38773&lt;/a&gt;).
We also fire &lt;strong&gt;‘error’&lt;/strong&gt; events when &lt;strong&gt;event handler&lt;/strong&gt; attributes contain syntax errors (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43178&quot;&gt;#43178&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the default appearance of &lt;strong&gt;&amp;lt;summary&amp;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/43111&quot;&gt;#43111&lt;/a&gt;), &lt;strong&gt;&amp;lt;select&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/43175&quot;&gt;#43175&lt;/a&gt;), &lt;strong&gt;&amp;lt;input type=file&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/AlexVasiluta&quot;&gt;@AlexVasiluta&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/43498&quot;&gt;#43498&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43186&quot;&gt;#43186&lt;/a&gt;), and &lt;strong&gt;&amp;lt;textarea&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;input type=text&amp;gt;&lt;/strong&gt; and friends (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43132&quot;&gt;#43132&lt;/a&gt;), plus &lt;strong&gt;‘::marker’&lt;/strong&gt; in mixed LTR/RTL content (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43201&quot;&gt;#43201&lt;/a&gt;).
&lt;strong&gt;&amp;lt;select&amp;gt;&lt;/strong&gt; also now requires user interaction to open the picker (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43485&quot;&gt;#43485&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;form action&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;iframe src&amp;gt;&lt;/strong&gt;, &lt;strong&gt;open(url)&lt;/strong&gt; on &lt;strong&gt;XMLHttpRequest&lt;/strong&gt;, &lt;strong&gt;new EventSource(url)&lt;/strong&gt;, and &lt;strong&gt;new Worker(url)&lt;/strong&gt; now correctly resolve the URL with the page encoding (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/jayant911&quot;&gt;@jayant911&lt;/a&gt;, &lt;a href=&quot;https://github.com/Veercodeprog&quot;&gt;@Veercodeprog&lt;/a&gt;, &lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43521&quot;&gt;#43521&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43554&quot;&gt;#43554&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43572&quot;&gt;#43572&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43537&quot;&gt;#43537&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43634&quot;&gt;#43634&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43588&quot;&gt;#43588&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘direction’&lt;/strong&gt; now works on grid containers (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42118&quot;&gt;#42118&lt;/a&gt;), &lt;strong&gt;SVG images&lt;/strong&gt; can now be used in &lt;strong&gt;‘border-image’&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/42566&quot;&gt;#42566&lt;/a&gt;), &lt;strong&gt;‘linear-gradient()’&lt;/strong&gt; now dithers to reduce banding (&lt;a href=&quot;https://github.com/Messi002&quot;&gt;@Messi002&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43603&quot;&gt;#43603&lt;/a&gt;), &lt;strong&gt;‘letter-spacing’&lt;/strong&gt; no longer applies to invisible zero-width formatting characters (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42961&quot;&gt;#42961&lt;/a&gt;), and &lt;strong&gt;‘:active’&lt;/strong&gt; now matches disabled or non-focusable elements too, as long as they are being clicked (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42935&quot;&gt;#42935&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOMContentLoaded&lt;/strong&gt; timings in &lt;strong&gt;Performance­Navigation­Timing&lt;/strong&gt; are more accurate (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43151&quot;&gt;#43151&lt;/a&gt;). &lt;strong&gt;Performance­Paint­Timing&lt;/strong&gt; and &lt;strong&gt;Largest­Contentful­Paint&lt;/strong&gt; are more accurate too, taking &amp;lt;iframe&amp;gt; into account (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42149&quot;&gt;#42149&lt;/a&gt;), and checking for and ignoring things like broken images and transparent backgrounds (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42833&quot;&gt;#42833&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42975&quot;&gt;#42975&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43475&quot;&gt;#43475&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the conformance of &lt;strong&gt;JS 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/43585&quot;&gt;#43585&lt;/a&gt;), &lt;strong&gt;&amp;lt;button command&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/42883&quot;&gt;#42883&lt;/a&gt;), &lt;strong&gt;&amp;lt;font size&amp;gt;&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/43103&quot;&gt;#43103&lt;/a&gt;), &lt;strong&gt;&amp;lt;link media&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;link type&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/43043&quot;&gt;#43043&lt;/a&gt;), &lt;strong&gt;&amp;lt;option selected&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43582&quot;&gt;#43582&lt;/a&gt;), &lt;strong&gt;&amp;lt;script integrity&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;style integrity&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/42931&quot;&gt;#42931&lt;/a&gt;), &lt;strong&gt;EventSource&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mishop-15&quot;&gt;@mishop-15&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42179&quot;&gt;#42179&lt;/a&gt;), &lt;strong&gt;SubtleCrypto&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/42984&quot;&gt;#42984&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43315&quot;&gt;#43315&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43533&quot;&gt;#43533&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43519&quot;&gt;#43519&lt;/a&gt;), &lt;strong&gt;Worker&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/43329&quot;&gt;#43329&lt;/a&gt;), &lt;strong&gt;HTMLVideoElement&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/43341&quot;&gt;#43341&lt;/a&gt;), &lt;strong&gt;dataset&lt;/strong&gt; on &lt;strong&gt;Element&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/43046&quot;&gt;#43046&lt;/a&gt;), and &lt;strong&gt;querySelector()&lt;/strong&gt; and &lt;strong&gt;querySelectorAll()&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/42991&quot;&gt;#42991&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed bugs related to &lt;strong&gt;error reporting&lt;/strong&gt; (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/xZaisk&quot;&gt;@xZaisk&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/eyupcanakman&quot;&gt;@eyupcanakman&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43191&quot;&gt;#43191&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43323&quot;&gt;#43323&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43101&quot;&gt;#43101&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43560&quot;&gt;#43560&lt;/a&gt;), &lt;strong&gt;event loops&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jayant911&quot;&gt;@jayant911&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43523&quot;&gt;#43523&lt;/a&gt;), &lt;strong&gt;focus&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jakubadamw&quot;&gt;@jakubadamw&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43431&quot;&gt;#43431&lt;/a&gt;), &lt;strong&gt;quirks mode&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/42960&quot;&gt;#42960&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43368&quot;&gt;#43368&lt;/a&gt;), &lt;strong&gt;&amp;lt;iframe&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/43539&quot;&gt;#43539&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43732&quot;&gt;#43732&lt;/a&gt;), the &lt;strong&gt;‘animationstart’&lt;/strong&gt; and &lt;strong&gt;‘animationend’&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43454&quot;&gt;#43454&lt;/a&gt;), the &lt;strong&gt;‘touchmove’&lt;/strong&gt; event (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42926&quot;&gt;#42926&lt;/a&gt;), &lt;strong&gt;CanvasRenderingContext2D&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/43218&quot;&gt;#43218&lt;/a&gt;), &lt;strong&gt;Worker&lt;/strong&gt; (&lt;a href=&quot;https://github.com/bruno-j-nicoletti&quot;&gt;@bruno-j-nicoletti&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43213&quot;&gt;#43213&lt;/a&gt;), &lt;strong&gt;‘:active’&lt;/strong&gt; on &amp;lt;input&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/43722&quot;&gt;#43722&lt;/a&gt;), &lt;strong&gt;‘overflow: scroll’&lt;/strong&gt; on ‘::before’ and ‘::after’ (&lt;a href=&quot;https://github.com/stevennovaryo&quot;&gt;@stevennovaryo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43231&quot;&gt;#43231&lt;/a&gt;), &lt;strong&gt;‘position: absolute’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yoursanonymous&quot;&gt;@yoursanonymous&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/43084&quot;&gt;#43084&lt;/a&gt;), and &lt;strong&gt;&amp;lt;img&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;svg&amp;gt;&lt;/strong&gt; without width or height attributes (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42666&quot;&gt;#42666&lt;/a&gt;).
Fixing that last bug led to Servo developers finding two &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/12612&quot;&gt;spec&lt;/a&gt; &lt;a href=&quot;https://github.com/w3c/csswg-drafts/issues/13149&quot;&gt;issues&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;We’ve landed partial support for using &lt;strong&gt;CSS &lt;a href=&quot;https://drafts.csswg.org/css-lists/#counter&quot;&gt;counters&lt;/a&gt;&lt;/strong&gt; in ‘list-style-type’ on ‘display: list-item’ and ‘content’ on ‘::marker’, but the counter values themselves are not calculated yet, so all list items still read as &lt;code&gt;0.&lt;/code&gt; or similar.
In any case, you can use a &amp;lt;counter-style-name&amp;gt; or ‘symbols()’ in ‘list-style-type’, and ‘counter()’ and ‘counters()’ in ‘content’ (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43111&quot;&gt;#43111&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also landed partial support for &lt;strong&gt;&amp;lt;marquee&amp;gt;&lt;/strong&gt; and the &lt;strong&gt;HTMLMarqueeElement&lt;/strong&gt; interface, including basic layout, but the contents are not animated yet (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&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/43520&quot;&gt;#43520&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43610&quot;&gt;#43610&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now exposes several attributes that have no direct effect, but are needed for web compatibility (&lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43500&quot;&gt;#43500&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43499&quot;&gt;#43499&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43502&quot;&gt;#43502&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43518&quot;&gt;#43518&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;noHref&lt;/strong&gt; on &lt;strong&gt;HTMLAreaElement&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hreflang&lt;/strong&gt;, &lt;strong&gt;type&lt;/strong&gt;, &lt;strong&gt;charset&lt;/strong&gt; on &lt;strong&gt;HTMLAnchorElement&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;useMap&lt;/strong&gt; on &lt;strong&gt;HTMLInputElement&lt;/strong&gt; and &lt;strong&gt;HTMLObjectElement&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;longDesc&lt;/strong&gt; on &lt;strong&gt;HTMLIFrameElement&lt;/strong&gt; and &lt;strong&gt;HTMLFrameElement&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&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/twisjun/blog/2026/04/30/march-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;We’ve fixed &lt;strong&gt;sluggish scrolling&lt;/strong&gt; on long documents like &lt;a href=&quot;https://docs.rs/iced-x86/1.21.0/iced_x86/code_asm/struct.CodeAssembler.html&quot;&gt;this page on docs.rs&lt;/a&gt; (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&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/43074&quot;&gt;#43074&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43138&quot;&gt;#43138&lt;/a&gt;), and reduced the &lt;strong&gt;memory usage of BoxFragment&lt;/strong&gt; by &lt;strong&gt;10%&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/43056&quot;&gt;#43056&lt;/a&gt;).
&lt;strong&gt;about:memory&lt;/strong&gt; now has a &lt;strong&gt;Force GC&lt;/strong&gt; button (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42798&quot;&gt;#42798&lt;/a&gt;), and no longer reports all processes as content processes in multiprocess mode (&lt;a href=&quot;https://github.com/webbeef&quot;&gt;@webbeef&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42923&quot;&gt;#42923&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web fonts&lt;/strong&gt; are no longer fetched more than once, and they no longer cause reflow when they fail to load (&lt;a href=&quot;https://github.com/minghuaw&quot;&gt;@minghuaw&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43382&quot;&gt;#43382&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43595&quot;&gt;#43595&lt;/a&gt;).
We’re also working towards better caching for shaping results (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/lukewarlow&quot;&gt;@lukewarlow&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/43653&quot;&gt;#43653&lt;/a&gt;).
&lt;strong&gt;Event handler&lt;/strong&gt; attribute lookup is more efficient now (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43337&quot;&gt;#43337&lt;/a&gt;), and we’ve made &lt;strong&gt;DOM tree walking&lt;/strong&gt; more efficient in many cases (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42781&quot;&gt;#42781&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42978&quot;&gt;#42978&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43476&quot;&gt;#43476&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;crypto.subtle.encrypt()&lt;/strong&gt;, &lt;strong&gt;decrypt()&lt;/strong&gt;, &lt;strong&gt;sign()&lt;/strong&gt;, &lt;strong&gt;verify()&lt;/strong&gt;, &lt;strong&gt;digest()&lt;/strong&gt;, &lt;strong&gt;importKey()&lt;/strong&gt;, &lt;strong&gt;unwrapKey()&lt;/strong&gt;, &lt;strong&gt;decapsulateKey()&lt;/strong&gt;, and &lt;strong&gt;decapsulateBits()&lt;/strong&gt; are more efficient now (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42927&quot;&gt;#42927&lt;/a&gt;), thanks to a recent &lt;a href=&quot;https://github.com/w3c/webcrypto/issues/422&quot;&gt;spec&lt;/a&gt; &lt;a href=&quot;https://github.com/w3c/webcrypto/pull/426&quot;&gt;update&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;More of Servo now &lt;strong&gt;uses cheaper crossbeam channels&lt;/strong&gt; instead of IPC channels, unless Servo is running in multiprocess mode, or &lt;strong&gt;avoids IPC altogether&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&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/42077&quot;&gt;#42077&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43309&quot;&gt;#43309&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42966&quot;&gt;#42966&lt;/a&gt;).
We’ve also reduced clones, allocations, conversions, comparisons, and borrow checks in many parts of Servo (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43212&quot;&gt;#43212&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43055&quot;&gt;#43055&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43066&quot;&gt;#43066&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43304&quot;&gt;#43304&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43452&quot;&gt;#43452&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43717&quot;&gt;#43717&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43780&quot;&gt;#43780&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43088&quot;&gt;#43088&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43226&quot;&gt;#43226&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOM data structures&lt;/strong&gt; (&lt;code&gt;#[dom_struct]&lt;/code&gt;) can refer to one another, with the help of &lt;a href=&quot;https://research.mozilla.org/2014/08/26/javascript-servos-only-garbage-collector/&quot;&gt;garbage collection&lt;/a&gt;.
But when DOM objects are being destroyed, those references can become invalid for a brief moment, depending on the order the GC finalizers run in.
This can be unsound if those references are accessed, which is a very easy mistake to make if the type has an &lt;code&gt;impl Drop&lt;/code&gt;.
To help prevent that class of bug, we’re reworking our DOM types so that none of them have &lt;code&gt;#[dom_struct]&lt;/code&gt; and &lt;code&gt;impl Drop&lt;/code&gt; at the same time (&lt;a href=&quot;https://github.com/willypuzzle&quot;&gt;@willypuzzle&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42937&quot;&gt;#42937&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42982&quot;&gt;#42982&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43018&quot;&gt;#43018&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43071&quot;&gt;#43071&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43222&quot;&gt;#43222&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43288&quot;&gt;#43288&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43544&quot;&gt;#43544&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43563&quot;&gt;#43563&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43631&quot;&gt;#43631&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a crash caused by an IPC resource leak when making &lt;strong&gt;many requests over time&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/43381&quot;&gt;#43381&lt;/a&gt;), and some bugs found by &lt;strong&gt;ThreadSanitizer&lt;/strong&gt; and &lt;strong&gt;--debug-mozjs&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/42976&quot;&gt;#42976&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42963&quot;&gt;#42963&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43487&quot;&gt;#43487&lt;/a&gt;).
We’ve also fixed crashes in &lt;strong&gt;CanvasRenderingContext2D&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/43449&quot;&gt;#43449&lt;/a&gt;), &lt;strong&gt;Crypto&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rogerkorantenng&quot;&gt;@rogerkorantenng&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43501&quot;&gt;#43501&lt;/a&gt;), &lt;strong&gt;devtools&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/43133&quot;&gt;#43133&lt;/a&gt;), &lt;strong&gt;event handler&lt;/strong&gt; attributes (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43178&quot;&gt;#43178&lt;/a&gt;), &lt;strong&gt;Promise&lt;/strong&gt; (&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/43470&quot;&gt;#43470&lt;/a&gt;), and &lt;strong&gt;WebDriver&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Tarmil&quot;&gt;@Tarmil&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/42739&quot;&gt;#42739&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43381&quot;&gt;#43381&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/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/Uiniel&quot;&gt;@Uiniel&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/PuercoPop&quot;&gt;@PuercoPop&lt;/a&gt;, &lt;a href=&quot;https://github.com/pylbrecht&quot;&gt;@pylbrecht&lt;/a&gt;, &lt;a href=&quot;https://github.com/arabson99&quot;&gt;@arabson99&lt;/a&gt;, &lt;a href=&quot;https://github.com/jayant911&quot;&gt;@jayant911&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/42957&quot;&gt;#42957&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43108&quot;&gt;#43108&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43130&quot;&gt;#43130&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43215&quot;&gt;#43215&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43183&quot;&gt;#43183&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43219&quot;&gt;#43219&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43245&quot;&gt;#43245&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43220&quot;&gt;#43220&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43252&quot;&gt;#43252&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43268&quot;&gt;#43268&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43184&quot;&gt;#43184&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43277&quot;&gt;#43277&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43278&quot;&gt;#43278&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43284&quot;&gt;#43284&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43302&quot;&gt;#43302&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43312&quot;&gt;#43312&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43348&quot;&gt;#43348&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43327&quot;&gt;#43327&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43362&quot;&gt;#43362&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43365&quot;&gt;#43365&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43383&quot;&gt;#43383&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43432&quot;&gt;#43432&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43259&quot;&gt;#43259&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43439&quot;&gt;#43439&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43473&quot;&gt;#43473&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43481&quot;&gt;#43481&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43480&quot;&gt;#43480&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43479&quot;&gt;#43479&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43525&quot;&gt;#43525&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43535&quot;&gt;#43535&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43543&quot;&gt;#43543&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43549&quot;&gt;#43549&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43570&quot;&gt;#43570&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43571&quot;&gt;#43571&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43569&quot;&gt;#43569&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43579&quot;&gt;#43579&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43584&quot;&gt;#43584&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43657&quot;&gt;#43657&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43713&quot;&gt;#43713&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Thanks to a wide range of people, many of whom were contributing to Servo for their first time, we’ve also landed a bunch of architectural improvements (&lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&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/43646&quot;&gt;#43646&lt;/a&gt;), cleanups (&lt;a href=&quot;https://github.com/simartin&quot;&gt;@simartin&lt;/a&gt;, &lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/TG199&quot;&gt;@TG199&lt;/a&gt;, &lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/niyabits&quot;&gt;@niyabits&lt;/a&gt;, &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/43276&quot;&gt;#43276&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43285&quot;&gt;#43285&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43532&quot;&gt;#43532&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43778&quot;&gt;#43778&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43771&quot;&gt;#43771&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43566&quot;&gt;#43566&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43567&quot;&gt;#43567&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43587&quot;&gt;#43587&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43140&quot;&gt;#43140&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43316&quot;&gt;#43316&lt;/a&gt;), and refactors (&lt;a href=&quot;https://github.com/sabbCodes&quot;&gt;@sabbCodes&lt;/a&gt;, &lt;a href=&quot;https://github.com/arabson99&quot;&gt;@arabson99&lt;/a&gt;, &lt;a href=&quot;https://github.com/jayant911&quot;&gt;@jayant911&lt;/a&gt;, &lt;a href=&quot;https://github.com/StaySafe020&quot;&gt;@StaySafe020&lt;/a&gt;, &lt;a href=&quot;https://github.com/saydmateen&quot;&gt;@saydmateen&lt;/a&gt;, &lt;a href=&quot;https://github.com/eerii&quot;&gt;@eerii&lt;/a&gt;, &lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/elomscansio&quot;&gt;@elomscansio&lt;/a&gt;, &lt;a href=&quot;https://github.com/CynthiaOketch&quot;&gt;@CynthiaOketch&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43614&quot;&gt;#43614&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43641&quot;&gt;#43641&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43619&quot;&gt;#43619&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43642&quot;&gt;#43642&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43623&quot;&gt;#43623&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43656&quot;&gt;#43656&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43644&quot;&gt;#43644&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43672&quot;&gt;#43672&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43664&quot;&gt;#43664&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43676&quot;&gt;#43676&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43684&quot;&gt;#43684&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43679&quot;&gt;#43679&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43678&quot;&gt;#43678&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43655&quot;&gt;#43655&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43675&quot;&gt;#43675&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43731&quot;&gt;#43731&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43729&quot;&gt;#43729&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43728&quot;&gt;#43728&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43740&quot;&gt;#43740&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43751&quot;&gt;#43751&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43748&quot;&gt;#43748&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43747&quot;&gt;#43747&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43752&quot;&gt;#43752&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43745&quot;&gt;#43745&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43724&quot;&gt;#43724&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43723&quot;&gt;#43723&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43765&quot;&gt;#43765&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43767&quot;&gt;#43767&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43181&quot;&gt;#43181&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43269&quot;&gt;#43269&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43270&quot;&gt;#43270&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43279&quot;&gt;#43279&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43437&quot;&gt;#43437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43597&quot;&gt;#43597&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43607&quot;&gt;#43607&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43602&quot;&gt;#43602&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43616&quot;&gt;#43616&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43609&quot;&gt;#43609&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43612&quot;&gt;#43612&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43647&quot;&gt;#43647&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43651&quot;&gt;#43651&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43662&quot;&gt;#43662&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43714&quot;&gt;#43714&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43774&quot;&gt;#43774&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/twisjun/blog/2026/04/30/march-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;7167 USD/month&lt;/strong&gt; (+2.6% from February) 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/twisjun/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;37 GitHub users&lt;/strong&gt; (+5 from February) 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/twisjun/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% * 7167 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7167&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7167 / 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;7167&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/twisjun/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 is now available on crates.io</title>
    <link href="https://servo.org/twisjun/blog/2026/04/13/servo-0.1.0-release/"/>
    <updated>2026-04-13T00:00:00Z</updated>
    <id>https://servo.org/twisjun/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/twisjun/blog/2026/03/31/february-in-servo/"/>
    <updated>2026-03-31T00:00:00Z</updated>
    <id>https://servo.org/twisjun/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/twisjun/img/blog/2026-03-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/img/blog/2026-03-preferences-page.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/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/twisjun/img/blog/2026-03-config-page.png&quot;&gt;&lt;img src=&quot;https://servo.org/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/blog/2026/02/28/january-in-servo/"/>
    <updated>2026-02-28T00:00:00Z</updated>
    <id>https://servo.org/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/blog/2026/01/23/december-in-servo/"/>
    <updated>2026-01-23T00:00:00Z</updated>
    <id>https://servo.org/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/blog/2025/12/15/november-in-servo/"/>
    <updated>2025-12-15T00:00:00Z</updated>
    <id>https://servo.org/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/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/twisjun/blog/2025/11/21/sponsorship-tiers/"/>
    <updated>2025-11-21T00:00:00Z</updated>
    <id>https://servo.org/twisjun/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/twisjun/#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/twisjun/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>
</feed>