<?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-10-26T00:00:00Z</updated>
  <id>https://servo.org</id>
  <author>
    <name>Servo Team</name>
    <email>info@servo.org</email>
  </author>
  <entry>
    <title>September in Servo: who knows?</title>
    <link href="https://servo.org/twissept/blog/2026/10/26/september-in-servo/"/>
    <updated>2026-10-26T00:00:00Z</updated>
    <id>https://servo.org/twissept/blog/2026/10/26/september-in-servo/</id>
    <content xml:lang="en" type="html">&lt;style&gt;
code {
  white-space: nowrap;
}
&lt;/style&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.7.0&quot;&gt;&lt;strong&gt;Servo 0.7.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in August, which came out to a new record of &lt;strong&gt;566 commits&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;The developer tools console now &lt;strong&gt;eagerly evaluates&lt;/strong&gt; JS inputs, allowing faster feedback (@freyacodes, #47527).&lt;/p&gt;
&lt;p&gt;We’ve shipped new web platform features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;:checked&lt;/strong&gt; pseudoclass (@skyz1, #47987)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;user-select&lt;/strong&gt; property (@SimonSapin, @mrobinson, #48137)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;&lt;progress&gt;&lt;/progress&gt;&lt;/strong&gt; element (@rayguo17, #46974)&lt;/li&gt;
&lt;li&gt;CSS &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Values_and_units/Using_typed_arithmetic&quot;&gt;typed arithmetic&lt;/a&gt; (@Loirooriol, #48338)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;alpha()&lt;/strong&gt; CSS function (@Loirooriol, #48344)&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;parentRule&lt;/strong&gt; on &lt;strong&gt;CSSRule&lt;/strong&gt; and &lt;strong&gt;CSSStyleDeclaration&lt;/strong&gt; (@skyz1, #47743)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;version&lt;/strong&gt; on &lt;strong&gt;HTMLHtmlElement&lt;/strong&gt; (@SilvioPilato, #47786)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getComposedRanges()&lt;/strong&gt; and &lt;strong&gt;direction&lt;/strong&gt; on &lt;strong&gt;Selection&lt;/strong&gt; (@mrobinson, #47683)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;baseURL&lt;/strong&gt; on &lt;strong&gt;CSSStyleSheet&lt;/strong&gt; (@Gae24, #47783)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#loading_non-javascript_resources&quot;&gt;&lt;strong&gt;CSS modules&lt;/strong&gt;&lt;/a&gt;(@Gae24, #47813) and &lt;strong&gt;text modules&lt;/strong&gt; (@Gae24, #47863)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getContextAttributes()&lt;/strong&gt; on &lt;strong&gt;CanvasRenderingContext2D&lt;/strong&gt; and &lt;strong&gt;OffscreenCanvasRenderingContext2D&lt;/strong&gt; (@Taym95, #47868)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;Content-Language&lt;/strong&gt; header (@TimvdLippe, #47930)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dir&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; (@yezhizhen, #48170)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SVGAElement&lt;/strong&gt;, &lt;strong&gt;SVGPatternElement&lt;/strong&gt;, &lt;strong&gt;SVGTSpanElement&lt;/strong&gt;, &lt;strong&gt;SVGTextContentElement&lt;/strong&gt;, &lt;strong&gt;SVGTextElement&lt;/strong&gt;, &lt;strong&gt;SVGTextPositioningElement&lt;/strong&gt; (@mu-mostafa98, #48174)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;MLKEM768-X25519&lt;/strong&gt; algorithm for &lt;strong&gt;WebCrypto&lt;/strong&gt; (@kkoyung, #48240, #48282, #48313, #48350)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;roundRect()&lt;/strong&gt; on &lt;strong&gt;CanvasRenderingContext2D&lt;/strong&gt; (@yezhizhen, #48293)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;paintTime&lt;/strong&gt; and &lt;strong&gt;presentationTime&lt;/strong&gt; on &lt;strong&gt;PerformancePaintTiming&lt;/strong&gt; (@shubhamg13, #47926)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getCueAsHTML()&lt;/strong&gt; on &lt;strong&gt;VTTCue&lt;/strong&gt; (@TimvdLippe, #48146)&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/twissept/blog/2026/10/26/september-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;We upgraded to &lt;strong&gt;SpiderMonkey v153.3&lt;/strong&gt; and &lt;strong&gt;mozangle v0.7&lt;/strong&gt;, both of which included fixes for security bugs reported upstream (@sagudev, #48176, #47655, #48259).&lt;/p&gt;
&lt;h2 id=&quot;real-world-compat&quot; tabindex=&quot;-1&quot;&gt;Real world compat &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/10/26/september-in-servo/#real-world-compat&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;The &lt;a href=&quot;https://www.egui.rs/&quot;&gt;egui.rs&lt;/a&gt; demo now works as expected with &lt;code&gt;--pref dom._webegpu_enabled&lt;/code&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-10-egui.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-egui.png&quot; alt=&quot;http://egui.rs rendering in Servo&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;This &lt;a href=&quot;https://jooyouss.github.io/candy-crush/&quot;&gt;Candy Crush&lt;/a&gt; game.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-10-candycrush.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-candycrush.png&quot; alt=&quot;A Candy Crush game rendering in Servo&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;We’re interested to hear how well your favourite websites run in Servo! Report successes in &lt;a href=&quot;https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341&quot;&gt;this Zulip thread&lt;/a&gt; or &lt;a href=&quot;https://github.com/servo/servo/discussions/49037&quot;&gt;this Github discussion&lt;/a&gt;, and failures &lt;a href=&quot;https://github.com/servo/servo/issues&quot;&gt;in our GitHub issues&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/twissept/blog/2026/10/26/september-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;Our accessibility tree (&lt;code&gt;--pref accessibility_enabled&lt;/code&gt;) now &lt;strong&gt;reports geometry bounds&lt;/strong&gt; for inline elements (@alice, #47905) and does much less work when responding to DOM changes (@alice, @mrobinson, #47690).
Additionally, elements with &lt;code&gt;display: none&lt;/code&gt; are reported as hidden (@alice, #47772).&lt;/p&gt;
&lt;p&gt;We had lots of conformance improvements for our &lt;strong&gt;WebGL2 implementation&lt;/strong&gt; (&lt;code&gt;--pref dom_webgl2_enabled&lt;/code&gt;) (@mxmgorin, #48423, #48441, #48470, #48479, #48495, #48473, #48536).&lt;/p&gt;
&lt;p&gt;Support for WSIWYG editors (which rely heavily on &lt;strong&gt;&lt;code&gt;contenteditable&lt;/code&gt;&lt;/strong&gt;) is going very well: keyboard inputs are now hooked up when &lt;code&gt;--pref dom_exec_command_enabled&lt;/code&gt; is present, so many editors are now usable (&lt;a href=&quot;https://www.tiny.cloud/docs/tinymce/latest/basic-example/&quot;&gt;example&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closed captioning&lt;/strong&gt; for video elements is making progress.
Text tracks now fire &lt;code&gt;enter&lt;/code&gt;, &lt;code&gt;exit&lt;/code&gt;, and &lt;code&gt;cuechange&lt;/code&gt; events (@TimvdLippe, #47725).
Media elements now return the full sorted list of text tracks (@TimvdLippe, #47785).
Adding cues to a text track now sets that track correctly (@TimvdLippe, #48012).
Text track objects now reflect the attributes of the associated &lt;code&gt;&amp;lt;track&amp;gt;&lt;/code&gt; element.
Text track URLs are now fetched at the correct time (@TimvdLippe, #48325), and active cues are computed correctly (@TimvdLippe, #48305), while text track cues are ordered as expected (@TimvdLippe, #48368).
Additionally, WebVTT parsing can now recover from errors (@TimvdLippe, #48391).&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Sanitizer API&lt;/strong&gt; (&lt;code&gt;--pref dom_sanitizer_enabled&lt;/code&gt;) now accepts the &lt;code&gt;javascriptURLs&lt;/code&gt; property (@skyz1, #47867).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IndexedDB&lt;/strong&gt; continues to improve: tables no longer error if unrelated tables contain duplicate index names (&lt;code&gt;--pref dom_indexeddb_enabled&lt;/code&gt;) (@leowatts, #47936).
Additionally, we implemented &lt;strong&gt;openCursor()&lt;/strong&gt; and &lt;strong&gt;openKeyCursor()&lt;/strong&gt; on &lt;strong&gt;IDBIndex&lt;/strong&gt; (@kuntal-devrat, #48281), as well as &lt;strong&gt;advance()&lt;/strong&gt;, &lt;strong&gt;continue()&lt;/strong&gt;, and &lt;strong&gt;continuePrimaryKey()&lt;/strong&gt; on &lt;strong&gt;IDBCursor&lt;/strong&gt; (@kuntal-devrat, #48400).&lt;/p&gt;
&lt;p&gt;We implemented the &lt;strong&gt;getTimeline()&lt;/strong&gt; and &lt;strong&gt;setTimeline()&lt;/strong&gt; methods for the &lt;strong&gt;Animation&lt;/strong&gt; interface (&lt;code&gt;--pref dom_web_animations_enabled&lt;/code&gt;) (@simonwuelker, #48122).&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/twissept/blog/2026/10/26/september-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;There’s a new API for integrating with accessibility tools: &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.forward_accessibility_action&quot;&gt;&lt;code&gt;forward_accessibility_action&lt;/code&gt;&lt;/a&gt; (@alice, @mrobinson, #48512).&lt;/p&gt;
&lt;p&gt;There is also an API to clear session history: &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.clear_session_history&quot;&gt;&lt;code&gt;clear_session_history&lt;/code&gt;&lt;/a&gt; (@Narfinger, #47483).&lt;/p&gt;
&lt;p&gt;The &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_throttled&lt;/code&gt; API has been removed (@mrobinson, #39923).
Throttling automatically occurs when a WebView is &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.hide&quot;&gt;hidden&lt;/a&gt; and stopped when &lt;a href=&quot;https://doc.servo.org/servo/struct.WebView.html#method.show&quot;&gt;shown&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &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;code&gt;notify_focus_changed&lt;/code&gt; method was removed, along with the &lt;a href=&quot;https://doc.servo.org/servo/struct.Servo.html&quot;&gt;&lt;code&gt;Servo&lt;/code&gt;&lt;/a&gt; methods &lt;code&gt;focus&lt;/code&gt; and &lt;code&gt;blur&lt;/code&gt; (@mrobinson, #48364).
Embedders must call &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_focused&quot;&gt;&lt;code&gt;set_focused&lt;/code&gt;&lt;/a&gt; whenever a WebView has gained or lost system focus.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;webgl&lt;/code&gt; feature has been added to the &lt;code&gt;default_web_features&lt;/code&gt; feature (@janeoa, #47866).
If an embedding does not want to ship with WebGL support they will now need to disable default features.&lt;/p&gt;
&lt;p&gt;Multiprocess mode is enabled at build time with the new Cargo feature &lt;code&gt;multprocess&lt;/code&gt; (@Narfinger, #47360).
To remove support for this feature (reducing binary size by ~2MB), build Servo with default features disabled.&lt;/p&gt;
&lt;p&gt;Two new preferences exist to tune garbage collector behaviour: &lt;code&gt;js_mem_gc_malloc_threshold_base_mb&lt;/code&gt; and &lt;code&gt;js_mem_gc_urgent_threshold_mb&lt;/code&gt; (@mxmgorin, #47999).
These can help on memory-constrained devices, and more information is available in the SpiderMonkey source (&lt;a href=&quot;https://searchfox.org/firefox-main/rev/28b7a7bffb5f82828143d9ad63839ad263b598be/js/src/gc/Scheduling.h#425-429&quot;&gt;base&lt;/a&gt;, &lt;a href=&quot;https://searchfox.org/firefox-main/rev/28b7a7bffb5f82828143d9ad63839ad263b598be/js/src/gc/Scheduling.h#440-445&quot;&gt;urgent&lt;/a&gt;).&lt;/p&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/twissept/blog/2026/10/26/september-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;It is now possible to cross-compile the OpenHarmony build from Windows hosts (@jschwe, #48392).&lt;/p&gt;
&lt;p&gt;Unhandled promise rejections are reported to the JS console (@TTyChud, #48486), making it easier to narrow down web compatibility issues in Servo.&lt;/p&gt;
&lt;p&gt;The OpenHarmony SDK was updated to API level 23 (@Narfinger, #48505).&lt;/p&gt;
&lt;p&gt;Pressing Control+A (or Command+A on macOS) now selects all the content in a document (@dzfrias, @mrobinson, #48025).&lt;/p&gt;
&lt;p&gt;Embedder-originating JS (e.g. devtools console or embedding APIs) will always execute, even in documents that disable scripting via sandboxing or CSP (@derdilla, #48394).&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/twissept/blog/2026/10/26/september-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 improved performance by removing &lt;strong&gt;unnecessary allocations&lt;/strong&gt; (@Narfinger, @TimvdLippe, @yezhizhen, #47689, #47839, #47838, #47982, #48006, #48036, #48099, #48204, #48127, #48218, #48357, #48386, #48422, #48440, #48452, #48508), &lt;strong&gt;preallocating more&lt;/strong&gt; when building vectors (@jschwe, @Narfinger, @sagudev, @webbeef, #47455, #47613, #48026, #48398), and &lt;strong&gt;avoiding IPC&lt;/strong&gt; in single process mode (@leowatts, @Narfinger, @Uiniel, @TTyChud, #47691, #47718, #48002, #48073, #48476, #48435).&lt;/p&gt;
&lt;p&gt;We also sped up Servo by reducing interactions with the GC (@TimvdLippe, @Narfinger, #47818, #48257, #48396) and doing less work when modifying selections (@SimonSapin, #47579), dispatching events (@webbeef, #48078), calculating font metrics (@RichardTjokroutomo, #48238), and indexing window frames (@mrobinson, #47832).&lt;/p&gt;
&lt;p&gt;We &lt;strong&gt;reduced memory usage&lt;/strong&gt; in common cases by reusing buffers (@Narfinger, #47751), clearing more page-specific data (@Radeonares32, @Narfinger, @jschwe, @mrobinson, @mxmgorin, #47651, #47806, #47805, #48166, #48295, #48297, #48016), compacting data structures (@Narfinger, @webbeef, @SimonSapin, @mrobinson, #47776, #48039, #48050, #47742, #48301, #48296, #48105), and sharing more buffers (@jdm, #47998).&lt;/p&gt;
&lt;p&gt;We turned on &lt;strong&gt;thread affinity boosting&lt;/strong&gt; on Linux, which can improve performance on some CPU architectures (@jschwe, #47058).&lt;/p&gt;
&lt;p&gt;We’re working on statically preventing &lt;a href=&quot;https://github.com/servo/servo/issues/39139&quot;&gt;a footgun&lt;/a&gt; that can lead to uncollectible GC cycles and leaking memory (@Gae24, @jdm, @lumiscosity, @SilvioPilato, @sahilnyk, @TTyChud, @kuntal-devrat, @MohamedAli00949, #47941, #48013, #48021, #48035, #48033, #48051, #48072, #48171, #48209, #48248, #48246, #48264, #48285, #48311, #48408, #48053, #48156, #48186, #48223, #48315, #47872, #47698, #47682, #47735, #47816, #47817, #47794, #47909, #47934, #47935, #47954, #48022, #47955, #48058, #48228, #48247, #48261, #48280, #48302, #48316, #48328, #48346, #48355, #48262, #48377, #48304, #48378, #48388, #48432).&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/twissept/blog/2026/10/26/september-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;CSS images now &lt;strong&gt;delay the &lt;code&gt;load&lt;/code&gt; event&lt;/strong&gt;, leading to more consistent behaviour for engine users performing visual rendering (@TimvdLippe, #48199).&lt;/p&gt;
&lt;p&gt;Interactive selections in documents continued to improve.
They now can span shadow trees (@mrobinson, @SimonSapin, #47931), and have consistent heights and positions (@mrobinson, #47937), plus there are new context menu entries to copy and select all (@mrobinson, #48101).
Additionally, image-based content shows when it is part of a selection (@mrobinson, #48149).&lt;/p&gt;
&lt;p&gt;There are more useful error messages for methods on &lt;strong&gt;Document&lt;/strong&gt; (@eachra-bawn, #47835).&lt;/p&gt;
&lt;p&gt;We also fixed bugs related to &lt;strong&gt;visibilityState&lt;/strong&gt; on &lt;strong&gt;Document&lt;/strong&gt; (@yezhizhen, #47908), &lt;strong&gt;containsNode()&lt;/strong&gt; on &lt;strong&gt;Selection&lt;/strong&gt; (@mrobinson, #47938), &lt;strong&gt;setKeyframes&lt;/strong&gt; on &lt;strong&gt;KeyframeEffect&lt;/strong&gt; (@simonwuelker, #48103), selections when focusing a text input (@mrobinson, #48107), &lt;strong&gt;AudioParam&lt;/strong&gt; clamping and automation (@kevlu93, #48351, #48347), &lt;strong&gt;PannerNode&lt;/strong&gt; outputs (@kevlu93, #48510), the &lt;strong&gt;muted&lt;/strong&gt; attribute on &lt;strong&gt;HTMLMediaElement&lt;/strong&gt; (@TimvdLippe, #48403), placeholders in text inputs (@jdm, #47761), animations when modifying document stylesheets (@SharanRP, #48000), gradient color stops (@BudiArb, #48288), sticky table rows (@TTyChud, #48380), &lt;strong&gt;::first-letter&lt;/strong&gt; (@Loirooriol, #48307), &lt;strong&gt;text-wrap-mode&lt;/strong&gt; (@mrobinson, #48469), OTF fonts (@wood-ghost, #47904), CSS and nosniff (@sahvx655-wq, #45481), &lt;strong&gt;Sec-Fetch-&lt;/strong&gt; headers and redirects (@TimvdLippe, #48203)&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/twissept/blog/2026/10/26/september-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;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/twissept/blog/2026/10/26/september-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;8144 USD/month&lt;/strong&gt; (+1% from August) 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/twissept/blog/2026/09/15/one-year-of-sponsorship/&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; (+1 from August) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/twissept/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% * 8144 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;8128&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 8144 / 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;7824&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/twissept/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>August in Servo: CSS Grid, text selection, and more!</title>
    <link href="https://servo.org/twissept/blog/2026/10/09/august-in-servo/"/>
    <updated>2026-10-09T00:00:00Z</updated>
    <id>https://servo.org/twissept/blog/2026/10/09/august-in-servo/</id>
    <content xml:lang="en" type="html">&lt;style&gt;
code {
  white-space: nowrap;
}
&lt;/style&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.6.0&quot;&gt;&lt;strong&gt;Servo 0.6.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in August, which came out to &lt;strong&gt;417 commits&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;The big news is that we’ve turned on support for &lt;strong&gt;CSS Grid&lt;/strong&gt; by default (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45621&quot;&gt;#45621&lt;/a&gt;).
This has had a huge positive impact on the visual appearance of many websites!&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-10-gary.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-gary.png&quot; alt=&quot;a black and white cat named Gary showing off new visual web platform features&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;touch-action&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/47043&quot;&gt;#47043&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;animation-composition&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/47405&quot;&gt;#47405&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;color-scheme&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/47042&quot;&gt;#47042&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;full-width&lt;/strong&gt;, &lt;strong&gt;math-auto&lt;/strong&gt;, &lt;strong&gt;full-size-kana&lt;/strong&gt; values for &lt;strong&gt;text-transform&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/47160&quot;&gt;#47160&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47160&quot;&gt;#47160&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47225&quot;&gt;#47225&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;requestAnimationFrame()&lt;/strong&gt; on &lt;strong&gt;DedicatedWorkerGlobalScope&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/46232&quot;&gt;#46232&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ancestorOrigins&lt;/strong&gt; on &lt;strong&gt;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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46056&quot;&gt;#46056&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;imagesrcset&lt;/strong&gt; and &lt;strong&gt;imagesizes&lt;/strong&gt; on &lt;code&gt;&amp;lt;link rel=preload as=image&amp;gt;&lt;/code&gt; (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&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/47103&quot;&gt;#47103&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;style&lt;/strong&gt; on &lt;strong&gt;CSSFontFaceRule&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/47388&quot;&gt;#47388&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;isReloadNavigation&lt;/strong&gt; and &lt;strong&gt;isHistoryNavigation&lt;/strong&gt; 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/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46917&quot;&gt;#46917&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;name=color-scheme&lt;/strong&gt; on &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&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/46993&quot;&gt;#46993&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;focusin&lt;/strong&gt; and &lt;strong&gt;focusout&lt;/strong&gt; events (&lt;a href=&quot;https://github.com/RichardTjokroutomo&quot;&gt;@RichardTjokroutomo&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/46980&quot;&gt;#46980&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new TextEvent()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/moamenhesham0&quot;&gt;@moamenhesham0&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/47391&quot;&gt;#47391&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PeriodicWave&lt;/strong&gt; and &lt;strong&gt;createPeriodicWave&lt;/strong&gt; on &lt;strong&gt;BaseAudioContext&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kevlu93&quot;&gt;@kevlu93&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47492&quot;&gt;#47492&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This release also contains significant improvements to &lt;strong&gt;navigation&lt;/strong&gt;, &lt;strong&gt;document loading&lt;/strong&gt;, and &lt;strong&gt;session history&lt;/strong&gt;, which are some of the &lt;a href=&quot;https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigation-and-session-history&quot;&gt;gnarliest&lt;/a&gt; parts of the HTML specification. Who knew that loading &lt;code&gt;about:blank&lt;/code&gt; was &lt;a href=&quot;https://hsivonen.fi/about-blank/&quot;&gt;so complicated&lt;/a&gt;? The upshot to all this work is that pages that open additional windows or include iframes work much more reliably.&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/twissept/blog/2026/10/09/august-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/twissept/blog/2026/10/09/august-in-servo/#real-world-compat&quot;&gt;&lt;strong&gt;Real world compat&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/twissept/blog/2026/10/09/august-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/twissept/blog/2026/10/09/august-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/twissept/blog/2026/10/09/august-in-servo/#for-users-and-developers&quot;&gt;&lt;strong&gt;For users and 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/twissept/blog/2026/10/09/august-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/twissept/blog/2026/10/09/august-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;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twissept/blog/2026/10/09/august-in-servo/#new-contributors&quot;&gt;&lt;strong&gt;New contributors&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/twissept/blog/2026/10/09/august-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;We upgraded to &lt;strong&gt;SpiderMonkey v153&lt;/strong&gt;, which brings many new security and crash fixes to Servo’s JavaScript engine integration (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&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/47489&quot;&gt;#47489&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Navigating away from a document that &lt;strong&gt;activated fullscreen mode&lt;/strong&gt; now exits fullscreen mode (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&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/47123&quot;&gt;#47123&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;real-world-compat&quot; tabindex=&quot;-1&quot;&gt;Real world compat &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/10/09/august-in-servo/#real-world-compat&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;CSS Grid enabled by default means that many websites with traditional grid layouts now look correct, like &lt;a href=&quot;https://rustweek.org/&quot;&gt;rustweek.org&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 22%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.6.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-grid2-before.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-grid2-after.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://2026.rustweek.org/&quot;&gt;2026.rustweek.org&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;It also makes a lot of websites look better that you wouldn’t assume rely on CSS Grid:&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 22%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.6.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-grid-before.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-grid-after.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://labs.jensimmons.com/&quot;&gt;labs.jensimmons.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;style&gt;
    ._spaced {
        margin: 1em 0;
    }
    ._halves {
        display: flex;
        flex-flow: row wrap;
    }
    ._halves &gt; * {
        width: 50%;
    }
    ._peel {
        --default-position: 50%;
        position: relative;
        overflow: hidden;
        background: white;
        * {
            /* ensure ‘pointermove’ events always target the root */
            pointer-events: none;
            user-select: none;
        }
        img {
            background: white;
        }
        :not(:last-child) {
            position: absolute;
            inset: 0 auto 0 auto;
            width: var(--position, var(--default-position));
            height: 100%;
            object-fit: cover;
            object-position: top left;
        }
        ._line {
            z-index: 1;
            border-right: thin solid #1192e8;
            div {
                position: absolute;
                right: 0;
                width: 0;
            }
            div div {
                position: absolute;
                width: max-content;
                padding: 0 0.25em;
                background: #ffffff80;
            }
            ._left div {
                /* extend left of the line */
                right: 0;
            }
            ._right div {
                /* extend right of the line */
                left: 0;
            }
        }
    }
&lt;/style&gt;
&lt;script&gt;
    for (const peel of document.querySelectorAll(&quot;._peel&quot;)) {
        peel.addEventListener(&quot;pointermove&quot;, event =&gt; {
            const position = Math.max(0, Math.min(1, event.offsetX / peel.offsetWidth));
            peel.style.setProperty(&quot;--position&quot;, `${position * 100}%`);
        }, true);
    }
&lt;/script&gt;
&lt;p&gt;Panning gestures initiated by touch inputs now lock to the dominant axis (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46983&quot;&gt;#46983&lt;/a&gt;).
This results in more predictable panning when interacting with pages in Servo.&lt;/p&gt;
&lt;p&gt;We fixed a crash affecting &lt;a href=&quot;https://gumroad.com.au/&quot;&gt;gumroad.com.au&lt;/a&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/47266&quot;&gt;#47266&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’re interested to hear how well your favourite websites run in Servo! Report successes in &lt;a href=&quot;https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341&quot;&gt;this Zulip thread&lt;/a&gt; or &lt;a href=&quot;https://github.com/servo/servo/discussions/49037&quot;&gt;this Github discussion&lt;/a&gt;, and failures &lt;a href=&quot;https://github.com/servo/servo/issues&quot;&gt;in our GitHub issues&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/twissept/blog/2026/10/09/august-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;Accessibility support&lt;/strong&gt; in Servo continues to make great strides; it can be enabled with the &lt;code&gt;--pref accessibility_enabled&lt;/code&gt; command line argument.
Servo now reports &lt;strong&gt;positions and sizes&lt;/strong&gt; for items in the content accessibility tree (&lt;a href=&quot;https://github.com/philocalyst&quot;&gt;@philocalyst&lt;/a&gt;, &lt;a href=&quot;https://github.com/alice&quot;&gt;@alice&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/46996&quot;&gt;#46996&lt;/a&gt;), allowing macOS VoiceOver to work more reliably.
We also report many &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles&quot;&gt;&lt;strong&gt;ARIA roles&lt;/strong&gt;&lt;/a&gt; for web content elements to accessibility toolkits (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47318&quot;&gt;#47318&lt;/a&gt;).&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;Full list of supported roles&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;alert&lt;/li&gt;
&lt;li&gt;banner&lt;/li&gt;
&lt;li&gt;blockquote&lt;/li&gt;
&lt;li&gt;caption&lt;/li&gt;
&lt;li&gt;code&lt;/li&gt;
&lt;li&gt;complementary&lt;/li&gt;
&lt;li&gt;contentinfo&lt;/li&gt;
&lt;li&gt;definition&lt;/li&gt;
&lt;li&gt;deletion&lt;/li&gt;
&lt;li&gt;directory&lt;/li&gt;
&lt;li&gt;document&lt;/li&gt;
&lt;li&gt;emphasis&lt;/li&gt;
&lt;li&gt;feed&lt;/li&gt;
&lt;li&gt;figure&lt;/li&gt;
&lt;li&gt;generic&lt;/li&gt;
&lt;li&gt;insertion&lt;/li&gt;
&lt;li&gt;list&lt;/li&gt;
&lt;li&gt;log&lt;/li&gt;
&lt;li&gt;main&lt;/li&gt;
&lt;li&gt;math&lt;/li&gt;
&lt;li&gt;navigation&lt;/li&gt;
&lt;li&gt;none&lt;/li&gt;
&lt;li&gt;note&lt;/li&gt;
&lt;li&gt;paragraph&lt;/li&gt;
&lt;li&gt;presentation&lt;/li&gt;
&lt;li&gt;rowgroup&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;status&lt;/li&gt;
&lt;li&gt;strong&lt;/li&gt;
&lt;li&gt;term&lt;/li&gt;
&lt;li&gt;time&lt;/li&gt;
&lt;li&gt;timer&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;&lt;br /&gt;
&lt;p&gt;Servo’s support for &lt;strong&gt;Document.execCommand()&lt;/strong&gt; is rapidly improving, and can be enabled with &lt;code&gt;--pref dom_exec_command_enabled&lt;/code&gt;.
We fixed issues with the &lt;strong&gt;inserttext&lt;/strong&gt; command (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47224&quot;&gt;#47224&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47306&quot;&gt;#47306&lt;/a&gt;), editing uneditable content (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47362&quot;&gt;#47362&lt;/a&gt;), computing contained nodes (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47429&quot;&gt;#47429&lt;/a&gt;), adjusting selections in &lt;strong&gt;contenteditable&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/47393&quot;&gt;#47393&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47581&quot;&gt;#47581&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47581&quot;&gt;#47581&lt;/a&gt;), and implemented the &lt;strong&gt;indent&lt;/strong&gt; and &lt;strong&gt;insertLineBreak&lt;/strong&gt; commands (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47416&quot;&gt;#47416&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47445&quot;&gt;#47445&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We made a lot of progress on the &lt;strong&gt;LargestContentfulPaint&lt;/strong&gt; performance metric, implemented behind the &lt;code&gt;--pref largest_contentful_paint_enabled&lt;/code&gt; argument.
Servo now supports the &lt;strong&gt;element&lt;/strong&gt; and &lt;strong&gt;loadTime&lt;/strong&gt; attributes, (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46553&quot;&gt;#46553&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47475&quot;&gt;#47475&lt;/a&gt;), URLs for video element posters (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43376&quot;&gt;#43376&lt;/a&gt;), accurate size information (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43378&quot;&gt;#43378&lt;/a&gt;), and painting text nodes (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47212&quot;&gt;#47212&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;There was preparatory work for a future &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/AudioWorklet&quot;&gt;&lt;strong&gt;AudioWorklet&lt;/strong&gt;&lt;/a&gt; implementation (&lt;a href=&quot;https://github.com/niyabits&quot;&gt;@niyabits&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46856&quot;&gt;#46856&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47016&quot;&gt;#47016&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47199&quot;&gt;#47199&lt;/a&gt;).
See Niya’s &lt;a href=&quot;https://text.tchncs.de/niya/wrapping-up-my-work-on-servos-audioworklet&quot;&gt;blog post&lt;/a&gt; about her Outreachy project for more details!&lt;/p&gt;
&lt;p&gt;We’re continuing work on the &lt;strong&gt;ServiceWorker&lt;/strong&gt; feature, which can be enabled with &lt;code&gt;--pref dom_serviceworker_enabled&lt;/code&gt;.
This month we implemented the &lt;strong&gt;CookieStore&lt;/strong&gt; interface behind the &lt;code&gt;--pref dom_cookiestore_enabled&lt;/code&gt; command line argument (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47044&quot;&gt;#47044&lt;/a&gt;) as well as the &lt;strong&gt;Cache&lt;/strong&gt; interface (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47220&quot;&gt;#47220&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now supports a &lt;strong&gt;disk-backed HTTP cache&lt;/strong&gt; that can be enabled with &lt;code&gt;--pref network_http_disk_cache&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/43819&quot;&gt;#43819&lt;/a&gt;).
This cache persists between runs, but there is not yet any way to clear it.&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/twissept/blog/2026/10/09/august-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;Breaking change:&lt;/strong&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;toggle_sampling_profiler&lt;/code&gt; has been removed (&lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47014&quot;&gt;#47014&lt;/a&gt;).
To perform sampling profiling on Servo, follow the instructions in &lt;a href=&quot;https://book.servo.org/contributing/profiling.html&quot;&gt;the book&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking change:&lt;/strong&gt; The variants of &lt;a href=&quot;https://doc.servo.org/servo/enum.MouseButton.html&quot;&gt;&lt;code&gt;MouseButton&lt;/code&gt;&lt;/a&gt; have been renamed to &lt;code&gt;Primary&lt;/code&gt;, &lt;code&gt;Secondary&lt;/code&gt;, and &lt;code&gt;Auxiliary&lt;/code&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/47327&quot;&gt;#47327&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve added several new Cargo features reflecting common usage patterns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;default_web_features&lt;/code&gt;, to include optional web platform features in the build (e.g. WebXR and WebGPU) (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44032&quot;&gt;#44032&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bundled&lt;/code&gt;, to include required resources in the binary (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44032&quot;&gt;#44032&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brotli-compression-stream&lt;/code&gt;, enabling support for &lt;code&gt;brotli&lt;/code&gt; content in the &lt;code&gt;CompressionStream&lt;/code&gt;/&lt;code&gt;DecompressionStream&lt;/code&gt; web APIs (&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/47197&quot;&gt;#47197&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;webcrypto&lt;/code&gt;, to enable support for the Crypto and WebCrypto web APIs (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47198&quot;&gt;#47198&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;webgl&lt;/code&gt;, to enable support for WebGL (&lt;a href=&quot;https://github.com/janeoa&quot;&gt;@janeoa&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47200&quot;&gt;#47200&lt;/a&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/twissept/blog/2026/10/09/august-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;One visible change is that interactive &lt;strong&gt;text selection&lt;/strong&gt; now works!
This is the result of lots of work across our script and layout code to ensure it respects the actual geometry of the page content (&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/47022&quot;&gt;#47022&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47025&quot;&gt;#47025&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47329&quot;&gt;#47329&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47358&quot;&gt;#47358&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46982&quot;&gt;#46982&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47425&quot;&gt;#47425&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47438&quot;&gt;#47438&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47437&quot;&gt;#47437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47581&quot;&gt;#47581&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47070&quot;&gt;#47070&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47048&quot;&gt;#47048&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46963&quot;&gt;#46963&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-10-select.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-10-select.png&quot; alt=&quot;servoshell 0.6.0 showing text selection on an element using CSS perspective&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;Building Servo now requires at least &lt;strong&gt;Clang 19&lt;/strong&gt; on all platforms (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47421&quot;&gt;#47421&lt;/a&gt;).
Additionally, the &lt;code&gt;cargo-ohos&lt;/code&gt; tool is now required for building for 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/47334&quot;&gt;#47334&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Debug builds on Windows can now complete successfully (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47372&quot;&gt;#47372&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Linux arm64 builds have been customized to work on &lt;strong&gt;Raspberry Pi 5&lt;/strong&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/47113&quot;&gt;#47113&lt;/a&gt;).
Any libservo embedders targeting the same platform will require a similar change if they are using jemalloc.&lt;/p&gt;
&lt;h3 id=&quot;servoshell&quot; tabindex=&quot;-1&quot;&gt;servoshell &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/10/09/august-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;/h3&gt;
&lt;p&gt;Under &lt;strong&gt;Wayland&lt;/strong&gt; and &lt;strong&gt;OpenHarmony&lt;/strong&gt;, we now integrate with the system clipboard (&lt;a href=&quot;https://github.com/TheZoq2&quot;&gt;@TheZoq2&lt;/a&gt;, &lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&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/46938&quot;&gt;#46938&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47177&quot;&gt;#47177&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The macOS command key and Windows logo key is now reported as &lt;code&gt;Meta&lt;/code&gt; instead of &lt;code&gt;Super&lt;/code&gt; (&lt;a href=&quot;https://github.com/eachra-bawn&quot;&gt;@eachra-bawn&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47330&quot;&gt;#47330&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Android&lt;/strong&gt; port has had many rough edges filed off as part of modernizing it for the &lt;strong&gt;Compose UI&lt;/strong&gt; (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47656&quot;&gt;#47656&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47491&quot;&gt;#47491&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47494&quot;&gt;#47494&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47697&quot;&gt;#47697&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46955&quot;&gt;#46955&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47644&quot;&gt;#47644&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47652&quot;&gt;#47652&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47276&quot;&gt;#47276&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47277&quot;&gt;#47277&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47299&quot;&gt;#47299&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47439&quot;&gt;#47439&lt;/a&gt;) and converting its implementation to Kotlin (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46926&quot;&gt;#46926&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46925&quot;&gt;#46925&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46951&quot;&gt;#46951&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46965&quot;&gt;#46965&lt;/a&gt;).
Library consumers are no longer responsible for implementing &lt;strong&gt;pause and resume&lt;/strong&gt; support (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47555&quot;&gt;#47555&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Meanwhile, the &lt;strong&gt;OpenHarmony&lt;/strong&gt; port now supports external keyboards with US keyboard layouts (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47359&quot;&gt;#47359&lt;/a&gt;).
Additionally, there are now better fallback font selections for CJK characters (&lt;a href=&quot;https://github.com/RichardTjokroutomo&quot;&gt;@RichardTjokroutomo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47116&quot;&gt;#47116&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47664&quot;&gt;#47664&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Setting the &lt;code&gt;device_pixel_ratio_override&lt;/code&gt; preference is no longer ignored on Android and 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/47081&quot;&gt;#47081&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/twissept/blog/2026/10/09/august-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;There were many small changes this month that &lt;strong&gt;removed unnecessary allocations&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/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47264&quot;&gt;#47264&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47147&quot;&gt;#47147&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47066&quot;&gt;#47066&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47249&quot;&gt;#47249&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47249&quot;&gt;#47249&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47285&quot;&gt;#47285&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47307&quot;&gt;#47307&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47343&quot;&gt;#47343&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47361&quot;&gt;#47361&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47395&quot;&gt;#47395&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47427&quot;&gt;#47427&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47454&quot;&gt;#47454&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47474&quot;&gt;#47474&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47506&quot;&gt;#47506&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47479&quot;&gt;#47479&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47530&quot;&gt;#47530&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47541&quot;&gt;#47541&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47566&quot;&gt;#47566&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47509&quot;&gt;#47509&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47622&quot;&gt;#47622&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We also &lt;strong&gt;reduced GC interactions&lt;/strong&gt; leading to better JS performance (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47513&quot;&gt;#47513&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47250&quot;&gt;#47250&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47158&quot;&gt;#47158&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47165&quot;&gt;#47165&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47049&quot;&gt;#47049&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47251&quot;&gt;#47251&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47510&quot;&gt;#47510&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46981&quot;&gt;#46981&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;On platforms that memory map font data (such as OpenHarmony and macOS), we can now save time that would otherwise be spent loading font files from disk (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47029&quot;&gt;#47029&lt;/a&gt;).
Similarly, reading system fonts is no longer in the critical path of starting up the engine (&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/46476&quot;&gt;#46476&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;There were were also a number of savings in the final binary size (&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/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/servo/servo/pull/47211&quot;&gt;#47211&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47214&quot;&gt;#47214&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47210&quot;&gt;#47210&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46950&quot;&gt;#46950&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We &lt;strong&gt;fixed crashes&lt;/strong&gt; related to media playback (&lt;a href=&quot;https://github.com/calvaris&quot;&gt;@calvaris&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46891&quot;&gt;#46891&lt;/a&gt;), the 2d canvas renderer (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46915&quot;&gt;#46915&lt;/a&gt;), fonts with negative line gaps (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47374&quot;&gt;#47374&lt;/a&gt;), and resolving fonts variants (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47356&quot;&gt;#47356&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Canvas renderer worker threads can now be adjusted by the &lt;code&gt;thread_pool_canvas_workers&lt;/code&gt; preference, allowing more performance granularity according to embedder needs. (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46691&quot;&gt;#46691&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47018&quot;&gt;#47018&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;We’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey &lt;strong&gt;safer and more reliable&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/treetmitterglad&quot;&gt;@treetmitterglad&lt;/a&gt;, &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/servo/servo/pull/47398&quot;&gt;#47398&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47296&quot;&gt;#47296&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47051&quot;&gt;#47051&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47005&quot;&gt;#47005&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47323&quot;&gt;#47323&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47297&quot;&gt;#47297&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47322&quot;&gt;#47322&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47368&quot;&gt;#47368&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47446&quot;&gt;#47446&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47317&quot;&gt;#47317&lt;/a&gt;). We’re also working on statically preventing &lt;a href=&quot;https://github.com/servo/servo/issues/39139&quot;&gt;a footgun&lt;/a&gt; that can lead to uncollectible GC cycles and leaking memory (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47355&quot;&gt;#47355&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47650&quot;&gt;#47650&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Historically, &lt;strong&gt;about:memory&lt;/strong&gt; has reported all memory usage by Rust implementations of JS APIs as one undifferentiated &lt;code&gt;js/malloc-heap&lt;/code&gt; number.
We now break it down by memory usage of nodes in document trees (&lt;a href=&quot;https://github.com/pylbrecht&quot;&gt;@pylbrecht&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46931&quot;&gt;#46931&lt;/a&gt;) and interfaces that are not part of the DOM (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47531&quot;&gt;#47531&lt;/a&gt;). We also report memory usage for the network stack’s cookie database (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47248&quot;&gt;#47248&lt;/a&gt;) and the canvas renderer backend (&lt;a href=&quot;https://github.com/janeoa&quot;&gt;@janeoa&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/46958&quot;&gt;#46958&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve added an &lt;strong&gt;experimental threadboost&lt;/strong&gt; mechanism (&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/46843&quot;&gt;#46843&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47027&quot;&gt;#47027&lt;/a&gt;) that has been observed to improve Speedometer results by &lt;strong&gt;50%&lt;/strong&gt; and allow canvas rendering to reach 60 FPS.
This is initially enabled for OpenHarmony, but future expansion to other Linux-based platforms is expected.&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/twissept/blog/2026/10/09/august-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 upgraded to &lt;a href=&quot;https://github.com/linebender/resvg/blob/main/CHANGELOG.md#0480-2026-07-31&quot;&gt;resvg 0.48&lt;/a&gt;, fixing &lt;strong&gt;many issues with SVG images&lt;/strong&gt; with missing width/height attributes that specified a &lt;code&gt;viewBox&lt;/code&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/46937&quot;&gt;#46937&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Upgrading to &lt;a href=&quot;https://github.com/DioxusLabs/taffy/blob/main/CHANGELOG.md#0130&quot;&gt;Taffy 0.14&lt;/a&gt; fixed a number of &lt;strong&gt;CSS grid-related crashes&lt;/strong&gt;, support for grid names, better intrinsic sizing, and improved performance (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47031&quot;&gt;#47031&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47493&quot;&gt;#47493&lt;/a&gt;).
We also fixed some issues in the Taffy grid integration for more accurate baselines (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47518&quot;&gt;#47518&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Session history traversals (i.e. navigating backwards or forwards in history) now wait for any outstanding traversal to complete (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47293&quot;&gt;#47293&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47485&quot;&gt;#47485&lt;/a&gt;).
Meanwhile, navigations to &lt;code&gt;about:blank&lt;/code&gt; are skipped if the initial about:blank document is present (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47074&quot;&gt;#47074&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;about:blank&lt;/code&gt; documents no longer use the asynchronous HTML parser (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47050&quot;&gt;#47050&lt;/a&gt;), and no longer report a &lt;code&gt;readyState&lt;/code&gt; of &lt;code&gt;LOADING&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/47450&quot;&gt;#47450&lt;/a&gt;).
Opening auxiliary windows will wait to dispatch the load event until the initial &lt;code&gt;about:blank&lt;/code&gt; document has &lt;a href=&quot;https://html.spec.whatwg.org/multipage/document-sequences.html#windows%3Awindow&quot;&gt;been replaced&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/47442&quot;&gt;#47442&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46975&quot;&gt;#46975&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For non-about:blank content, we also made the document loading phases more reliable (&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/47426&quot;&gt;#47426&lt;/a&gt;), improved conformance of &lt;code&gt;javascript:&lt;/code&gt; URL evaluation and navigation target selection (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47486&quot;&gt;#47486&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47516&quot;&gt;#47516&lt;/a&gt;), and addressed longstanding compatibility issues with cross-origin &lt;code&gt;Window&lt;/code&gt; and &lt;code&gt;Location&lt;/code&gt; objects (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47549&quot;&gt;#47549&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Our media playback has improved; we fixed several issues around &lt;strong&gt;canPlayType()&lt;/strong&gt; on &lt;strong&gt;HTMLMediaElement&lt;/strong&gt; that allow Servo to report that &lt;strong&gt;MP4 content is playable&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/47612&quot;&gt;#47612&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47641&quot;&gt;#47641&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47670&quot;&gt;#47670&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Input elements with the &lt;code&gt;autofocus&lt;/code&gt; property inside of a &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; now receive focus when that dialog is opened (&lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&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/45826&quot;&gt;#45826&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We improved the exception error text for numerous web APIs (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/eachra-bawn&quot;&gt;@eachra-bawn&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46960&quot;&gt;#46960&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47124&quot;&gt;#47124&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47168&quot;&gt;#47168&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47580&quot;&gt;#47580&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47430&quot;&gt;#47430&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47127&quot;&gt;#47127&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We also fixed issues related to many other APIs, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matching other browsers’ treatment of &lt;strong&gt;Access-Control-Allow-Headers&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/47600&quot;&gt;#47600&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;WebCrypto &lt;strong&gt;CryptoKey&lt;/strong&gt; usage checks (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47112&quot;&gt;#47112&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47141&quot;&gt;#47141&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47178&quot;&gt;#47178&lt;/a&gt;) and key lengths (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47452&quot;&gt;#47452&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47453&quot;&gt;#47453&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;determining referrers when navigating (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47487&quot;&gt;#47487&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;reading &lt;strong&gt;name&lt;/strong&gt; on &lt;strong&gt;Window&lt;/strong&gt; inside of iframes (&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/47270&quot;&gt;#47270&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;many edge cases around determining dirty roots for incremental 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/46906&quot;&gt;#46906&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;edge cases around &lt;strong&gt;compareDocumentPosition&lt;/strong&gt; on &lt;strong&gt;Node&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/46886&quot;&gt;#46886&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolving ties in web font matching (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47449&quot;&gt;#47449&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Range.&lt;strong&gt;getClientBoundingRect()&lt;/strong&gt;/&lt;strong&gt;getClientRects&lt;/strong&gt;() for empty ranges (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47143&quot;&gt;#47143&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JS module fetching failures can now be retried (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46919&quot;&gt;#46919&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KeyEvent.keyCode&lt;/code&gt; values for many &lt;strong&gt;nonprintable keys&lt;/strong&gt; now match other browsers (&lt;a href=&quot;https://github.com/eachra-bawn&quot;&gt;@eachra-bawn&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47461&quot;&gt;#47461&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;making &lt;strong&gt;timing&lt;/strong&gt; on &lt;strong&gt;Performance&lt;/strong&gt; return a &lt;code&gt;PerformanceTiming&lt;/code&gt; object (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/aniebietafia&quot;&gt;@aniebietafia&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46990&quot;&gt;#46990&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;synthesizing font variations from &lt;code&gt;font-style&lt;/code&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/servo/servo/pull/46918&quot;&gt;#46918&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47364&quot;&gt;#47364&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;Get Element Tag Name&lt;/strong&gt; WebDriver command (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47216&quot;&gt;#47216&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;removed nonstandard WebDriver-related properties on the global object (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47542&quot;&gt;#47542&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sniffing RAR responses correctly (&lt;a href=&quot;https://github.com/wood-ghost&quot;&gt;@wood-ghost&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47366&quot;&gt;#47366&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Attribute&lt;/code&gt; nodes created during parsing now have the expected namespace prefix (&lt;a href=&quot;https://github.com/Ms2ger&quot;&gt;@Ms2ger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47030&quot;&gt;#47030&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;improving &lt;strong&gt;text-transform: capitalize&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/46910&quot;&gt;#46910&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;zero-sized margins inside of inline boxes (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47020&quot;&gt;#47020&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;incorrect &lt;code&gt;buttons&lt;/code&gt; values in pointer capture transitions (&lt;a href=&quot;https://github.com/steigeo&quot;&gt;@steigeo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45628&quot;&gt;#45628&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;empty lists returned by &lt;strong&gt;load()&lt;/strong&gt; on &lt;strong&gt;FontFaceSet&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/47564&quot;&gt;#47564&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;cancelling more ongoing network requests when performing a navigation (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47576&quot;&gt;#47576&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shaping text across inline boxes (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46829&quot;&gt;#46829&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scrollable overflow for &lt;code&gt;position: sticky&lt;/code&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/43766&quot;&gt;#43766&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fixing hyperlinks for blob: URLs (&lt;a href=&quot;https://github.com/TimvdLippe&quot;&gt;@TimvdLippe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47226&quot;&gt;#47226&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;firing the error callback for &lt;strong&gt;decodeAudioData&lt;/strong&gt; on &lt;strong&gt;BaseAudioContext&lt;/strong&gt; (&lt;a href=&quot;https://github.com/amittenak47&quot;&gt;@amittenak47&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/46870&quot;&gt;#46870&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&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/twissept/blog/2026/10/09/august-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;Frans Skarman (&lt;a href=&quot;https://github.com/TheZoq2&quot;&gt;@TheZoq2&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46938&quot;&gt;#46938&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Moamen Hesham (&lt;a href=&quot;https://github.com/moamenhesham0&quot;&gt;@moamenhesham0&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47391&quot;&gt;#47391&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Miles Wirht (&lt;a href=&quot;https://github.com/philocalyst&quot;&gt;@philocalyst&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46996&quot;&gt;#46996&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Vaibhav Srivastava (&lt;a href=&quot;https://github.com/vaibhav8a&quot;&gt;@vaibhav8a&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47626&quot;&gt;#47626&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wood-ghost (&lt;a href=&quot;https://github.com/wood-ghost&quot;&gt;@wood-ghost&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47366&quot;&gt;#47366&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;禾可 (&lt;a href=&quot;https://github.com/Lfan-ke&quot;&gt;@Lfan-ke&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/47514&quot;&gt;#47514&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/twissept/blog/2026/10/09/august-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;8128 USD/month&lt;/strong&gt; (+3% from July) 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/twissept/blog/2026/09/15/one-year-of-sponsorship/&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;36 GitHub users&lt;/strong&gt; (+1 from July) that depend on Servo are sponsoring us there.
If you use Servo libraries like &lt;a href=&quot;https://crates.io/crates/url/reverse_dependencies&quot;&gt;url&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/html5ever/reverse_dependencies&quot;&gt;html5ever&lt;/a&gt;, &lt;a href=&quot;https://crates.io/crates/selectors/reverse_dependencies&quot;&gt;selectors&lt;/a&gt;, or &lt;a href=&quot;https://crates.io/crates/cssparser/reverse_dependencies&quot;&gt;cssparser&lt;/a&gt;, signing up for &lt;a href=&quot;https://thanks.dev/&quot;&gt;thanks.dev&lt;/a&gt; could be a good way for you (or your employer) to give back to the community.&lt;/p&gt;
&lt;p&gt;We now have &lt;a href=&quot;https://servo.org/twissept/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% * 8124 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;8128&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 8124 / 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;7824&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/twissept/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>Your Donations at Work: One Year of Sponsored Servo Development</title>
    <link href="https://servo.org/twissept/blog/2026/09/15/one-year-of-sponsorship/"/>
    <updated>2026-09-15T00:00:00Z</updated>
    <id>https://servo.org/twissept/blog/2026/09/15/one-year-of-sponsorship/</id>
    <content xml:lang="en" type="html">&lt;p&gt;Last September, the Servo project &lt;a href=&quot;https://servo.org/blog/2025/09/17/your-donations-at-work-funding-jdm/&quot;&gt;announced&lt;/a&gt; that long-time maintainer &lt;a href=&quot;https://github.com/jdm&quot;&gt;Josh Bowman-Matthews (@jdm)&lt;/a&gt; would work part-time on improving the Servo contributor experience, entirely funded by the monthly donations on &lt;a href=&quot;https://opencollective.com/servo&quot;&gt;OpenCollective&lt;/a&gt; and &lt;a href=&quot;https://github.com/sponsors/servo&quot;&gt;GitHub&lt;/a&gt;.
In his own words, here is a look back over the past year!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;First of all, I am enormously grateful to everyone who financially supports Servo, as those donations have enabled me to devote significant time to a project that I care a lot about.
Some highlights from that funded work that I’m proud of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I nominated &lt;strong&gt;8 new &lt;a href=&quot;https://github.com/servo/project/blob/main/governance/README.md#maintainers&quot;&gt;maintainers&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I reviewed &lt;strong&gt;1150 pull requests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I filed &lt;strong&gt;114 issues&lt;/strong&gt; targeted at newer contributors (92% of them have been fixed)&lt;/li&gt;
&lt;li&gt;I wrote &lt;strong&gt;new documentation&lt;/strong&gt; about &lt;a href=&quot;https://book.servo.org/design-documentation/script/garbage-collection-and-refcell.html&quot;&gt;borrow hazards&lt;/a&gt;, &lt;a href=&quot;https://book.servo.org/design-documentation/experimental-features.html&quot;&gt;experimental features&lt;/a&gt;, the &lt;a href=&quot;https://book.servo.org/contributing/getting-started.html#ai-policy-faq&quot;&gt;AI policy&lt;/a&gt;, &lt;a href=&quot;https://book.servo.org/contributing/finding-things-to-do.html&quot;&gt;finding things to do&lt;/a&gt;, and fixing &lt;a href=&quot;https://book.servo.org/contributing/guides/diagnosing-errors/stable-wpt-errors.html&quot;&gt;stable&lt;/a&gt; and &lt;a href=&quot;https://book.servo.org/contributing/guides/diagnosing-errors/intermittent-wpt-errors.html&quot;&gt;intermittent&lt;/a&gt; test failures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On top of that, I spent time diagnosing unexpected failures in others’ PRs and fixed numerous intermittent test failures that made merging PRs more difficult for everyone.&lt;/p&gt;
&lt;p&gt;A few pieces of work from this period that stand out to me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;supporting a &lt;a href=&quot;https://github.com/servo/servo/issues/40600&quot;&gt;large scale rewrite&lt;/a&gt; of Servo’s JS engine integration to address intermittent panics related to garbage collection—I reviewed lots of pull requests, but also filed many issues that enabled the work addressing the panics to be spread across many other contributors&lt;/li&gt;
&lt;li&gt;getting tagged in to help understand test failures, uncovering our &lt;a href=&quot;https://github.com/servo/servo/issues/43149&quot;&gt;broken window.open behaviour&lt;/a&gt;, and eventually making &lt;a href=&quot;https://github.com/servo/servo/pull/46975&quot;&gt;a lot of flaky tests&lt;/a&gt; more stable&lt;/li&gt;
&lt;li&gt;supporting another contributor’s grant proposal to work on Servo that &lt;a href=&quot;https://nlnet.nl/project/Servo-Navigation_Downloads/&quot;&gt;was approved!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This role I’ve carved out means a lot to me—I’ve found a healthy balance that allows me to spend time with my family as well as make meaningful contributions to Servo, and I get to spend a lot of time looking for ways to make the project more accessible for others.
A big thank you to everybody supporting the project and my work; each individual monthly donation makes a big difference!
I’m excited to see what’s possible in the coming year.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>July in Servo: more platforms, faster canvas, web fonts in SVG, and more!</title>
    <link href="https://servo.org/twissept/blog/2026/08/31/july-in-servo/"/>
    <updated>2026-08-31T00:00:00Z</updated>
    <id>https://servo.org/twissept/blog/2026/08/31/july-in-servo/</id>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/servo/servo/releases/tag/v0.5.0&quot;&gt;&lt;strong&gt;Servo 0.5.0&lt;/strong&gt;&lt;/a&gt; contains all of the changes we landed in July, which came out to &lt;strong&gt;488 commits&lt;/strong&gt;, and we now publish binaries for &lt;strong&gt;Linux aarch64&lt;/strong&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/46760&quot;&gt;#46760&lt;/a&gt;)!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOM text selections&lt;/strong&gt; are now visible (&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/46698&quot;&gt;#46698&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46864&quot;&gt;#46864&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46742&quot;&gt;#46742&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46889&quot;&gt;#46889&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46126&quot;&gt;#46126&lt;/a&gt;).
Interactive selection is coming soon!&lt;/p&gt;
&lt;p&gt;For security fixes, see &lt;a href=&quot;https://servo.org/twissept/blog/2026/08/31/july-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/twissept/img/blog/2026-08-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-diffie.png&quot; alt=&quot;servoshell 0.5.0 showing several new features: ‘text-decoration-thickness’, ‘box-decoration-break’, web fonts in inline `&lt;svg&gt;`, and DOM selection rendering&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;‘Cache-Control: stale-while-revalidate’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/arayaryoma&quot;&gt;@arayaryoma&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46060&quot;&gt;#46060&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘text-decoration-thickness’&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/46592&quot;&gt;#46592&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘box-decoration-break’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45492&quot;&gt;#45492&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@font-feature-values’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45308&quot;&gt;#45308&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-language-override’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46618&quot;&gt;#46618&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-variant-alternates’&lt;/strong&gt;, for the most part (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45308&quot;&gt;#45308&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;a href=&quot;https://wicg.github.io/webcrypto-secure-curves/#ed448&quot;&gt;&lt;strong&gt;Ed448&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://wicg.github.io/webcrypto-secure-curves/#x448&quot;&gt;&lt;strong&gt;X448&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&quot;https://wicg.github.io/webcrypto-modern-algos/#kmac&quot;&gt;&lt;strong&gt;KMAC&lt;/strong&gt;&lt;/a&gt; algorithms 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/46402&quot;&gt;#46402&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46141&quot;&gt;#46141&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46180&quot;&gt;#46180&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46583&quot;&gt;#46583&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46606&quot;&gt;#46606&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46622&quot;&gt;#46622&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46334&quot;&gt;#46334&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46376&quot;&gt;#46376&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘insert­Horizontal­Rule’&lt;/strong&gt;, &lt;strong&gt;‘insert­Image’&lt;/strong&gt;, &lt;strong&gt;‘insert­Text’&lt;/strong&gt;, and &lt;strong&gt;‘forward­Delete’&lt;/strong&gt; commands in &lt;strong&gt;document.exec­Command()&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46608&quot;&gt;#46608&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46597&quot;&gt;#46597&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46538&quot;&gt;#46538&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46838&quot;&gt;#46838&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Animation­Effect&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/46677&quot;&gt;#46677&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new Touch()&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/46741&quot;&gt;#46741&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;duplex&lt;/strong&gt; property 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/46858&quot;&gt;#46858&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;effect&lt;/strong&gt; property on &lt;strong&gt;Animation&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/46677&quot;&gt;#46677&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;get­Keyframes()&lt;/strong&gt; and &lt;strong&gt;set­Keyframes()&lt;/strong&gt; on &lt;strong&gt;Keyframe­Effect&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/46118&quot;&gt;#46118&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;id&lt;/strong&gt; property on &lt;strong&gt;Largest­Contentful­Paint&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/46828&quot;&gt;#46828&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;read-only &lt;strong&gt;CSS­Font­Feature­Values­Rule&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/46728&quot;&gt;#46728&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&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/twissept/blog/2026/08/31/july-in-servo/#you-can-help&quot;&gt;&lt;strong&gt;You can help!&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/twissept/blog/2026/08/31/july-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/twissept/blog/2026/08/31/july-in-servo/#real-world-compat&quot;&gt;&lt;strong&gt;Real world compat&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/twissept/blog/2026/08/31/july-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/twissept/blog/2026/08/31/july-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/twissept/blog/2026/08/31/july-in-servo/#for-users-and-developers&quot;&gt;&lt;strong&gt;For users and 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/twissept/blog/2026/08/31/july-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/twissept/blog/2026/08/31/july-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;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twissept/blog/2026/08/31/july-in-servo/#new-contributors&quot;&gt;&lt;strong&gt;New contributors&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;you-can-help!&quot; tabindex=&quot;-1&quot;&gt;You can help! &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/08/31/july-in-servo/#you-can-help!&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’re working on a pull request that you think might be interesting for the next monthly update, even if you’re not 100% sure, tell us about it by following the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You add the &lt;span style=&quot;padding: 0.1875lh; border-radius: calc(0.5lh + 2 * 1px); background: rgb(13, 17, 23);&quot;&gt;&lt;span style=&quot;padding: 0 0.25lh; border: thin solid rgba(85, 221, 126, 0.3); border-radius: 0.5lh; color: rgb(85, 221, 126); background-color: rgba(84, 222, 126, 0.18);&quot;&gt;monthly update&lt;/span&gt;&lt;/span&gt; label to your pull request, or comment &lt;code style=&quot;display: /* allow wrapping only as last resort */ inline-block;&quot;&gt;&lt;a href=&quot;https://github.com/servo-highfive&quot;&gt;@servo-highfive&lt;/a&gt; monthly update&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Highfive posts a comment asking you some questions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You answer those questions in a comment containing &lt;code style=&quot;display: /* allow wrapping only as last resort */ inline-block;&quot;&gt;&lt;a href=&quot;https://github.com/servo-highfive&quot;&gt;@servo-highfive&lt;/a&gt; monthly update answer&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&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/twissept/blog/2026/08/31/july-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 was potentially affected by vulnerabilities in &lt;a href=&quot;https://crates.io/crates/quick-xml&quot;&gt;&lt;strong&gt;quick-xml&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://crates.io/crates/crossbeam-epoch&quot;&gt;&lt;strong&gt;crossbeam-epoch&lt;/strong&gt;&lt;/a&gt; that have been fixed in Servo 0.5.0 (&lt;a href=&quot;https://github.com/atouchet&quot;&gt;@atouchet&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/46737&quot;&gt;#46737&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46324&quot;&gt;#46324&lt;/a&gt;).
For more details, see &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0194&quot;&gt;RUSTSEC-2026-0194&lt;/a&gt;, &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0195&quot;&gt;RUSTSEC-2026-0195&lt;/a&gt;, and &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0204&quot;&gt;RUSTSEC-2026-0204&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve updated &lt;strong&gt;&lt;a href=&quot;https://github.com/servo/mozangle&quot;&gt;ANGLE&lt;/a&gt;&lt;/strong&gt; from a version based on Firefox 115.x ESR (&lt;a href=&quot;https://hg.mozilla.org/mozilla-unified/file/02755361e26d82768eb1d5f576145e19d7c265cd/gfx/angle&quot;&gt;02755361e26d8&lt;/a&gt;) to a version based on Firefox 140.12.0 ESR (&lt;a href=&quot;https://github.com/mozilla-firefox/firefox/commit/f8025617e815f21388b40baf189338d31a5f9a0a&quot;&gt;f8025617e815f&lt;/a&gt;), which likely includes many security fixes (&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/46455&quot;&gt;#46455&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/mozangle/pull/100&quot;&gt;mozangle#100&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;real-world-compat&quot; tabindex=&quot;-1&quot;&gt;Real world compat &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/08/31/july-in-servo/#real-world-compat&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;The duck on the &lt;strong&gt;DuckDuckGo (&lt;a href=&quot;https://duckduckgo.com/&quot;&gt;duckduckgo.com&lt;/a&gt;)&lt;/strong&gt; landing page now renders in v0.5.0, after we fixed a preload bug that affected SVG images (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46668&quot;&gt;#46668&lt;/a&gt;).&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 22%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-143728.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-143737.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://duckduckgo.com/&quot;&gt;duckduckgo.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Most of &lt;strong&gt;Gumroad (&lt;a href=&quot;https://gumroad.com/&quot;&gt;gumroad.com&lt;/a&gt;)&lt;/strong&gt;, except for the landing page, did not render at all in v0.4.0, but as of v0.5.0, pages like the &lt;a href=&quot;https://gumroad.com/discover&quot;&gt;&lt;strong&gt;Discover page&lt;/strong&gt;&lt;/a&gt; or &lt;a href=&quot;https://harrycraft2.gumroad.com/l/theworldslongestcity&quot;&gt;&lt;strong&gt;this product page&lt;/strong&gt;&lt;/a&gt; render almost perfectly.&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 40%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-165201.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-164722.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://gumroad.com/discover&quot;&gt;gumroad.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 40%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.5.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-162729.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-162731.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://harrycraft2.gumroad.com/l/theworldslongestcity&quot;&gt;gumroad.com&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;style&gt;
    ._spaced {
        margin: 1em 0;
    }
    ._halves {
        display: flex;
        flex-flow: row wrap;
    }
    ._halves &gt; * {
        width: 50%;
    }
    ._peel {
        --default-position: 50%;
        position: relative;
        overflow: hidden;
        background: white;
        * {
            /* ensure ‘pointermove’ events always target the root */
            pointer-events: none;
            user-select: none;
        }
        img {
            background: white;
        }
        :not(:last-child) {
            position: absolute;
            inset: 0 auto 0 auto;
            width: var(--position, var(--default-position));
            height: 100%;
            object-fit: cover;
            object-position: top left;
        }
        ._line {
            z-index: 1;
            border-right: thin solid #1192e8;
            div {
                position: absolute;
                right: 0;
                width: 0;
            }
            div div {
                position: absolute;
                width: max-content;
                padding: 0 0.25em;
                background: #ffffff80;
            }
            ._left div {
                /* extend left of the line */
                right: 0;
            }
            ._right div {
                /* extend right of the line */
                left: 0;
            }
        }
    }
&lt;/style&gt;
&lt;script&gt;
    for (const peel of document.querySelectorAll(&quot;._peel&quot;)) {
        peel.addEventListener(&quot;pointermove&quot;, event =&gt; {
            const position = Math.max(0, Math.min(1, event.offsetX / peel.offsetWidth));
            peel.style.setProperty(&quot;--position&quot;, `${position * 100}%`);
        }, true);
    }
&lt;/script&gt;
&lt;p&gt;We’re interested to hear how well your favourite websites run in Servo!
Report successes in &lt;a href=&quot;https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341&quot;&gt;this Zulip thread&lt;/a&gt;, and failures &lt;a href=&quot;https://github.com/servo/servo/issues&quot;&gt;in our GitHub issues&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/twissept/blog/2026/08/31/july-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;The upgrade to Stylo 2026-07-01 brings several changes to built-in &lt;strong&gt;CSS functions&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/46129&quot;&gt;#46129&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘alpha()’&lt;/strong&gt; is now supported, under &lt;code&gt;--pref layout­_css­_alpha­_color­_function­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘progress()’&lt;/strong&gt; is now supported, under &lt;code&gt;--pref layout­_css­_progress­_function­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘ellipse()’&lt;/strong&gt; values &lt;strong&gt;‘closest-corner’&lt;/strong&gt; and &lt;strong&gt;‘farthest-corner’&lt;/strong&gt; are no longer stable due to spec uncertainty, but they are still experimental, under &lt;code&gt;--pref layout­_css­_ellipse­_corners­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;‘attr()’&lt;/strong&gt; is more conformant, under &lt;code&gt;--pref layout­_css­_attr­_enabled&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Web­GPU&lt;/strong&gt; content can now enjoy better conformance and use &lt;strong&gt;GPU­External­Texture&lt;/strong&gt; and &lt;strong&gt;import­External­Texture()&lt;/strong&gt; on &lt;strong&gt;GPU­Device&lt;/strong&gt;, under &lt;code&gt;--pref dom­_webgpu­_enabled&lt;/code&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/45873&quot;&gt;#45873&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46178&quot;&gt;#46178&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46286&quot;&gt;#46286&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-08-webgpu.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-08-webgpu.png&quot; alt=&quot;servoshell 0.5.0 showing four tilted rectangles (in WebGPU), textured with a picture of a dog (which is a frame from an external video)&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Indexed­DB&lt;/strong&gt; content can now use the &lt;strong&gt;name&lt;/strong&gt; property on &lt;strong&gt;IDB­Index&lt;/strong&gt;, under &lt;code&gt;--pref dom­_indexeddb­_enabled&lt;/code&gt; (&lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45512&quot;&gt;#45512&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;document.fonts&lt;/strong&gt; now includes a &lt;strong&gt;Font­Face&lt;/strong&gt; for each valid &lt;strong&gt;‘@font-face’&lt;/strong&gt;, under &lt;code&gt;--pref dom­_fontface­_enabled&lt;/code&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/46509&quot;&gt;#46509&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46537&quot;&gt;#46537&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All of the features above are enabled in servoshell’s &lt;a href=&quot;https://book.servo.org/design-documentation/experimental-features.html#experimental-web-platform-features&quot;&gt;experimental mode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve started implementing &lt;strong&gt;WebVTT&lt;/strong&gt; for native &lt;strong&gt;subtitles&lt;/strong&gt; and &lt;strong&gt;captions&lt;/strong&gt;, enabled by default (no &lt;code&gt;--pref&lt;/code&gt;).
While they don’t render just yet, we can now fetch each &amp;lt;track src&amp;gt;, parse the WebVTT, and expose cues via the &lt;strong&gt;track&lt;/strong&gt; property on &lt;strong&gt;HTML­Track­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/46289&quot;&gt;#46289&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46383&quot;&gt;#46383&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;July was a big month for &lt;strong&gt;accessibility&lt;/strong&gt; in Servo, under &lt;code&gt;--pref accessibility­_enabled&lt;/code&gt;.
The focus for this month has been on &lt;strong&gt;performance&lt;/strong&gt;, with the accessibility tree now supporting &lt;strong&gt;incremental updates&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/45578&quot;&gt;#45578&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45971&quot;&gt;#45971&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46589&quot;&gt;#46589&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46691&quot;&gt;#46691&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46385&quot;&gt;#46385&lt;/a&gt;), requiring &lt;strong&gt;fewer HashMap lookups&lt;/strong&gt; and &lt;strong&gt;tree walks&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/45798&quot;&gt;#45798&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46740&quot;&gt;#46740&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46348&quot;&gt;#46348&lt;/a&gt;), and allowing for &lt;strong&gt;faster DOM mutations&lt;/strong&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/46348&quot;&gt;#46348&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46530&quot;&gt;#46530&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also started working on the &lt;a href=&quot;https://wicg.github.io/entries-api/&quot;&gt;&lt;strong&gt;File and Directory Entries API&lt;/strong&gt;&lt;/a&gt;, to allow users to &lt;strong&gt;select&lt;/strong&gt; and &lt;strong&gt;upload entire directories&lt;/strong&gt; via &lt;strong&gt;&amp;lt;input type=file&amp;gt;&lt;/strong&gt; and &lt;strong&gt;drag-and-drop&lt;/strong&gt;.
To that end, we now have &lt;strong&gt;webkit­Get­As­Entry()&lt;/strong&gt; on &lt;strong&gt;Data­Transfer­Item&lt;/strong&gt;, plus minimal support for &lt;strong&gt;File­System­Entry&lt;/strong&gt;, &lt;strong&gt;File­System­Directory­Entry&lt;/strong&gt;, and &lt;strong&gt;File­System­File­Entry&lt;/strong&gt;, under &lt;code&gt;--pref dom­_entries­_api­_enabled&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/46456&quot;&gt;#46456&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46879&quot;&gt;#46879&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46832&quot;&gt;#46832&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/twissept/blog/2026/08/31/july-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;We’ve improved the docs for the &lt;a href=&quot;https://doc.servo.org/servo/index.html&quot;&gt;&lt;code&gt;servo&lt;/code&gt;&lt;/a&gt; crate, and for &lt;a href=&quot;https://doc.servo.org/servo/trait.WebViewDelegate.html&quot;&gt;Web­View­Delegate&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/46193&quot;&gt;#46193&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking change:&lt;/strong&gt; &lt;a href=&quot;https://doc.servo.org/servo/struct.ServoBuilder.html&quot;&gt;&lt;code&gt;Servo­Builder&lt;/code&gt;&lt;/a&gt;::&lt;code&gt;webxr­_registry()&lt;/code&gt; has been &lt;strong&gt;removed&lt;/strong&gt;.
Instead use the new &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.register_webxr_registry&quot;&gt;&lt;code&gt;register­_webxr­_registry&lt;/code&gt;&lt;/a&gt;, which is a &lt;strong&gt;lazy&lt;/strong&gt; design that has allowed servoshell to &lt;strong&gt;halve its startup time&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/46494&quot;&gt;#46494&lt;/a&gt;).&lt;/p&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/twissept/blog/2026/08/31/july-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; for &lt;strong&gt;Android&lt;/strong&gt; now runs on &lt;strong&gt;Android 10+&lt;/strong&gt; (91% market share), not just Android 13+ (68% market share), improving adaptability and reducing waste (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46142&quot;&gt;#46142&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46308&quot;&gt;#46308&lt;/a&gt;).
We’ve also fixed a problem with building for Android on macOS (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46128&quot;&gt;#46128&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;servoshell&lt;/strong&gt; for &lt;strong&gt;Windows&lt;/strong&gt; is now better behaved when run in a console window, making the command prompt wait until servoshell exits (&lt;a href=&quot;https://github.com/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43010&quot;&gt;#43010&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When using the Firefox &lt;strong&gt;DevTools&lt;/strong&gt;, the &lt;strong&gt;Console&lt;/strong&gt; tab now supports some basic &lt;strong&gt;autocomplete&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/46382&quot;&gt;#46382&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve finished modernising servoshell for Android to use Compose UI (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46085&quot;&gt;#46085&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46164&quot;&gt;#46164&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46253&quot;&gt;#46253&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46257&quot;&gt;#46257&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46317&quot;&gt;#46317&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46353&quot;&gt;#46353&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46565&quot;&gt;#46565&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46612&quot;&gt;#46612&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46626&quot;&gt;#46626&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46666&quot;&gt;#46666&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46663&quot;&gt;#46663&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46700&quot;&gt;#46700&lt;/a&gt;), and we’re now migrating Servo as a library to use Kotlin (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46817&quot;&gt;#46817&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46895&quot;&gt;#46895&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46772&quot;&gt;#46772&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/twissept/blog/2026/08/31/july-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;Inline SVG&lt;/strong&gt; can now use &lt;strong&gt;web fonts&lt;/strong&gt; defined in the containing page (&lt;a href=&quot;https://github.com/yodalee&quot;&gt;@yodalee&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45979&quot;&gt;#45979&lt;/a&gt;).
We’re also implementing the &lt;strong&gt;SVG DOM&lt;/strong&gt;, starting with stub interfaces for &lt;strong&gt;SVG­Element&lt;/strong&gt;, SVG­Circle­Element, SVG­Defs­Element, SVG­Ellipse­Element, SVG­Line­Element, SVG­Linear­Gradient­Element, SVG­Path­Element, SVG­Polygon­Element, SVG­Polyline­Element, SVG­Radial­Gradient­Element, SVG­Stop­Element, SVG­Rect­Element, SVG­Symbol­Element, and SVG­Use­Element (&lt;a href=&quot;https://github.com/mu-mostafa98&quot;&gt;@mu-mostafa98&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46558&quot;&gt;#46558&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;button&amp;gt;&lt;/strong&gt; now &lt;strong&gt;vertically centers&lt;/strong&gt; its contents (&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/46590&quot;&gt;#46590&lt;/a&gt;), and behaves better with ‘display: block’ and ‘display: inline’ (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46536&quot;&gt;#46536&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the conformance of &lt;strong&gt;&amp;lt;form&amp;gt;&lt;/strong&gt; without &lt;strong&gt;&amp;lt;form action&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/kevlu93&quot;&gt;@kevlu93&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46860&quot;&gt;#46860&lt;/a&gt;), &lt;strong&gt;&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/46129&quot;&gt;#46129&lt;/a&gt;), &lt;strong&gt;Gamepad­Event&lt;/strong&gt; (&lt;a href=&quot;https://github.com/log101&quot;&gt;@log101&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46788&quot;&gt;#46788&lt;/a&gt;), &lt;strong&gt;document.execCommand(“delete”)&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46539&quot;&gt;#46539&lt;/a&gt;), the &lt;strong&gt;selector­Text&lt;/strong&gt; property on &lt;strong&gt;CSS­Style­Rule&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/46687&quot;&gt;#46687&lt;/a&gt;), and &lt;strong&gt;Set Window Rect&lt;/strong&gt; in WebDriver (&lt;a href=&quot;https://github.com/janeoa&quot;&gt;@janeoa&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46475&quot;&gt;#46475&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46477&quot;&gt;#46477&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed bugs related to &lt;strong&gt;&amp;lt;iframe&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/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46587&quot;&gt;#46587&lt;/a&gt;), &lt;strong&gt;&amp;lt;img&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/yodalee&quot;&gt;@yodalee&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46892&quot;&gt;#46892&lt;/a&gt;), &lt;strong&gt;&amp;lt;textarea&amp;gt;&lt;/strong&gt; (&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/46309&quot;&gt;#46309&lt;/a&gt;), &lt;strong&gt;custom properties&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/46129&quot;&gt;#46129&lt;/a&gt;), &lt;strong&gt;‘::before’&lt;/strong&gt; and &lt;strong&gt;‘::after’&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/46640&quot;&gt;#46640&lt;/a&gt;), &lt;strong&gt;‘flex-direction: column’&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/46697&quot;&gt;#46697&lt;/a&gt;), &lt;strong&gt;‘float’&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/46407&quot;&gt;#46407&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46500&quot;&gt;#46500&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46505&quot;&gt;#46505&lt;/a&gt;), &lt;strong&gt;‘@font-face’&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/46568&quot;&gt;#46568&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46271&quot;&gt;#46271&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46436&quot;&gt;#46436&lt;/a&gt;), &lt;strong&gt;‘position: absolute’&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/46358&quot;&gt;#46358&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46637&quot;&gt;#46637&lt;/a&gt;), &lt;strong&gt;Blob&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/46881&quot;&gt;#46881&lt;/a&gt;), &lt;strong&gt;IDB­Database&lt;/strong&gt; and &lt;strong&gt;IDB­Object­Store&lt;/strong&gt; and &lt;strong&gt;IDB­Index&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/46615&quot;&gt;#46615&lt;/a&gt;), the &lt;strong&gt;adopted­Style­Sheets&lt;/strong&gt; property on &lt;strong&gt;Shadow­Root&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/46738&quot;&gt;#46738&lt;/a&gt;), &lt;strong&gt;delete()&lt;/strong&gt; on &lt;strong&gt;Font­Face­Set&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/46634&quot;&gt;#46634&lt;/a&gt;), &lt;strong&gt;move­Before()&lt;/strong&gt; on &lt;strong&gt;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/46599&quot;&gt;#46599&lt;/a&gt;), &lt;strong&gt;resize­To()&lt;/strong&gt; on &lt;strong&gt;Window&lt;/strong&gt; (&lt;a href=&quot;https://github.com/janeoa&quot;&gt;@janeoa&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46477&quot;&gt;#46477&lt;/a&gt;), the &lt;strong&gt;selected&lt;/strong&gt; property on &lt;strong&gt;HTML­Option­Element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rhit-kapilaar&quot;&gt;@rhit-kapilaar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46386&quot;&gt;#46386&lt;/a&gt;), and the &lt;strong&gt;value&lt;/strong&gt; property on &lt;strong&gt;HTML­Select­Element&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/46230&quot;&gt;#46230&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/twissept/blog/2026/08/31/july-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;&lt;strong&gt;2D canvas&lt;/strong&gt; rendering is now &lt;strong&gt;multithreaded&lt;/strong&gt;, improving frame rates by &lt;strong&gt;up to 55%&lt;/strong&gt; and power consumption per frame by &lt;strong&gt;up to 42%&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/46410&quot;&gt;#46410&lt;/a&gt;), and should use a lot less memory too (&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/46786&quot;&gt;#46786&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Text rendering&lt;/strong&gt; is &lt;strong&gt;up to 10x faster&lt;/strong&gt; for cases with the same text and different ‘font-size’ (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46129&quot;&gt;#46129&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flex layout&lt;/strong&gt; benchmarks are up to &lt;strong&gt;3%&lt;/strong&gt; faster, and an improvement to &lt;strong&gt;get­Elements­By­Class­Name()&lt;/strong&gt; has made some websites up to &lt;strong&gt;1%&lt;/strong&gt; faster (&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/46563&quot;&gt;#46563&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46595&quot;&gt;#46595&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46594&quot;&gt;#46594&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also reduced memory usage, allocations, GC rooting steps, and other operations in many parts of Servo (&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/yezhizhen&quot;&gt;@yezhizhen&lt;/a&gt;, &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/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/cychronex-labs&quot;&gt;@cychronex-labs&lt;/a&gt;, &lt;a href=&quot;https://github.com/arayaryoma&quot;&gt;@arayaryoma&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46499&quot;&gt;#46499&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46411&quot;&gt;#46411&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46659&quot;&gt;#46659&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45974&quot;&gt;#45974&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46377&quot;&gt;#46377&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45758&quot;&gt;#45758&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46440&quot;&gt;#46440&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46762&quot;&gt;#46762&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46301&quot;&gt;#46301&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46349&quot;&gt;#46349&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46419&quot;&gt;#46419&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46418&quot;&gt;#46418&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46420&quot;&gt;#46420&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46460&quot;&gt;#46460&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46633&quot;&gt;#46633&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46638&quot;&gt;#46638&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46690&quot;&gt;#46690&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46745&quot;&gt;#46745&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46726&quot;&gt;#46726&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46564&quot;&gt;#46564&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46144&quot;&gt;#46144&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46664&quot;&gt;#46664&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46462&quot;&gt;#46462&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46139&quot;&gt;#46139&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46430&quot;&gt;#46430&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46446&quot;&gt;#46446&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46498&quot;&gt;#46498&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46548&quot;&gt;#46548&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46598&quot;&gt;#46598&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46632&quot;&gt;#46632&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46656&quot;&gt;#46656&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46678&quot;&gt;#46678&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46718&quot;&gt;#46718&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46722&quot;&gt;#46722&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46238&quot;&gt;#46238&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46072&quot;&gt;#46072&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46408&quot;&gt;#46408&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46438&quot;&gt;#46438&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46437&quot;&gt;#46437&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46528&quot;&gt;#46528&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46124&quot;&gt;#46124&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46330&quot;&gt;#46330&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46412&quot;&gt;#46412&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46807&quot;&gt;#46807&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed a crash regression with memory corruption (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46316&quot;&gt;#46316&lt;/a&gt;), several dynamic-borrow-related crashes (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/SharanRP&quot;&gt;@SharanRP&lt;/a&gt;, &lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/agrawalx&quot;&gt;@agrawalx&lt;/a&gt;, &lt;a href=&quot;https://github.com/amittenak47&quot;&gt;@amittenak47&lt;/a&gt;, &lt;a href=&quot;https://github.com/sungmen&quot;&gt;@sungmen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46381&quot;&gt;#46381&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46384&quot;&gt;#46384&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46405&quot;&gt;#46405&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46684&quot;&gt;#46684&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46452&quot;&gt;#46452&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46770&quot;&gt;#46770&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46830&quot;&gt;#46830&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46763&quot;&gt;#46763&lt;/a&gt;), plus crashes related to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;area&amp;gt;&lt;/strong&gt; without &lt;strong&gt;&amp;lt;area href&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/46341&quot;&gt;#46341&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;progress&amp;gt;&lt;/strong&gt; or shadow DOM (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&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/46188&quot;&gt;#46188&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;table&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/46775&quot;&gt;#46775&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;td rowspan&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/46841&quot;&gt;#46841&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;svg&amp;gt;&lt;/strong&gt; without &lt;strong&gt;&amp;lt;svg viewBox&amp;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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46199&quot;&gt;#46199&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/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/46261&quot;&gt;#46261&lt;/a&gt;)&lt;/li&gt;
&lt;li&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/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46689&quot;&gt;#46689&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘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/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46314&quot;&gt;#46314&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘mix-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/45624&quot;&gt;#45624&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Array­Buffer&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/46504&quot;&gt;#46504&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;adopted­Style­Sheets&lt;/strong&gt; on &lt;strong&gt;Document&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/46373&quot;&gt;#46373&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;exec­Command(&lt;code&gt;&amp;quot;delete&amp;quot;&lt;/code&gt;)&lt;/strong&gt; on &lt;strong&gt;Document&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/46265&quot;&gt;#46265&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;removing DOM nodes (&lt;a href=&quot;https://github.com/SimonSapin&quot;&gt;@SimonSapin&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46866&quot;&gt;#46866&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey safer and more reliable (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&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/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/kunalmohan&quot;&gt;@kunalmohan&lt;/a&gt;, &lt;a href=&quot;https://github.com/lumiscosity&quot;&gt;@lumiscosity&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/46191&quot;&gt;#46191&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46777&quot;&gt;#46777&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46890&quot;&gt;#46890&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46243&quot;&gt;#46243&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46248&quot;&gt;#46248&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46246&quot;&gt;#46246&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46310&quot;&gt;#46310&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46312&quot;&gt;#46312&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46333&quot;&gt;#46333&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46147&quot;&gt;#46147&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46150&quot;&gt;#46150&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46151&quot;&gt;#46151&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46229&quot;&gt;#46229&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46262&quot;&gt;#46262&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46375&quot;&gt;#46375&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46374&quot;&gt;#46374&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46529&quot;&gt;#46529&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46584&quot;&gt;#46584&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46585&quot;&gt;#46585&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46593&quot;&gt;#46593&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46693&quot;&gt;#46693&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46166&quot;&gt;#46166&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46156&quot;&gt;#46156&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46254&quot;&gt;#46254&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46267&quot;&gt;#46267&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46268&quot;&gt;#46268&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46269&quot;&gt;#46269&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46270&quot;&gt;#46270&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46284&quot;&gt;#46284&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46285&quot;&gt;#46285&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46318&quot;&gt;#46318&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46435&quot;&gt;#46435&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46461&quot;&gt;#46461&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/twissept/blog/2026/08/31/july-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;Umut Cevdet Koçak (&lt;a href=&quot;https://github.com/UMCEKO&quot;&gt;@UMCEKO&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46256&quot;&gt;#46256&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Yash Agrawal (&lt;a href=&quot;https://github.com/agrawalx&quot;&gt;@agrawalx&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46770&quot;&gt;#46770&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;amittenak47 (&lt;a href=&quot;https://github.com/amittenak47&quot;&gt;@amittenak47&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46743&quot;&gt;#46743&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Apoorva Pendse (&lt;a href=&quot;https://github.com/apoorvapendse&quot;&gt;@apoorvapendse&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46739&quot;&gt;#46739&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dDostalker (&lt;a href=&quot;https://github.com/dDostalker&quot;&gt;@dDostalker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46181&quot;&gt;#46181&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Oisín Ó Maolchathail (&lt;a href=&quot;https://github.com/eachra-bawn&quot;&gt;@eachra-bawn&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46478&quot;&gt;#46478&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kevin Lu (&lt;a href=&quot;https://github.com/kevlu93&quot;&gt;@kevlu93&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46860&quot;&gt;#46860&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mohamed Mostafa (&lt;a href=&quot;https://github.com/mu-mostafa98&quot;&gt;@mu-mostafa98&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45405&quot;&gt;#45405&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SeongMan Jeon (&lt;a href=&quot;https://github.com/sungmen&quot;&gt;@sungmen&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46763&quot;&gt;#46763&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Yoda Lee (&lt;a href=&quot;https://github.com/yodalee&quot;&gt;@yodalee&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45979&quot;&gt;#45979&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/twissept/blog/2026/08/31/july-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;7824 USD/month&lt;/strong&gt; (+1.8% from June) 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/twissept/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 June) 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/twissept/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% * 7824 / 10000); padding-right: 0.5em;&quot;&gt;&lt;strong&gt;7824&lt;/strong&gt; USD/month&lt;/div&gt;
        &lt;div style=&quot;position: absolute; margin-left: calc(100% * 7824 / 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;7824&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/twissept/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>June in Servo: real world compat, media queries, SharedWorker, and more!</title>
    <link href="https://servo.org/twissept/blog/2026/07/31/june-in-servo/"/>
    <updated>2026-07-31T00:00:00Z</updated>
    <id>https://servo.org/twissept/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 June, 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/twissept/blog/2026/07/31/june-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/twissept/img/blog/2026-07-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-diffie.png&quot; alt=&quot;servoshell 0.4.0 showing several new features: the ‘width’, ‘height’, ‘device-width’, ‘device-height’, and ‘aspect-ratio’ media query features, plus the upgraded ‘attr()’ function, with a box whose ‘background-color’ and ‘width’ are controlled by data attributes that are in turn set by range inputs&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;‘attr()’&lt;/strong&gt;, in &lt;a href=&quot;https://book.servo.org/design-documentation/experimental-features.html#experimental-web-platform-features&quot;&gt;experimental mode&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/45041&quot;&gt;#45041&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘image(&amp;lt;color&amp;gt;)’&lt;/strong&gt;, &lt;strong&gt;‘closest-corner’&lt;/strong&gt;, and &lt;strong&gt;‘farthest-corner’&lt;/strong&gt; in &lt;strong&gt;‘ellipse()’&lt;/strong&gt; and &lt;strong&gt;‘circle()’&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/45421&quot;&gt;#45421&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘calc()’&lt;/strong&gt; and other &lt;a href=&quot;https://drafts.csswg.org/css-values/#math&quot;&gt;mathematical expressions&lt;/a&gt; can now be resolved later than parse time, e.g. &lt;code&gt;sign(1em - 32px)&lt;/code&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/45421&quot;&gt;#45421&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘font-feature-settings’&lt;/strong&gt; in &lt;strong&gt;‘@font-face’&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/45393&quot;&gt;#45393&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@media (device-width)’&lt;/strong&gt;, &lt;strong&gt;‘@media (device-height)’&lt;/strong&gt;, &lt;strong&gt;‘@media (height)’&lt;/strong&gt;, &lt;strong&gt;‘@media (aspect-ratio)’&lt;/strong&gt;, and their &lt;strong&gt;min-&lt;/strong&gt; and &lt;strong&gt;max-&lt;/strong&gt; variants (&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/nicoburns&quot;&gt;@nicoburns&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/44978&quot;&gt;#44978&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45707&quot;&gt;#45707&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45490&quot;&gt;#45490&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@media (orientation)’&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/45707&quot;&gt;#45707&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@media (pointer)’&lt;/strong&gt; and &lt;strong&gt;‘@media (any-pointer)’&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/45681&quot;&gt;#45681&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘@media (hover)’&lt;/strong&gt; and &lt;strong&gt;‘@media (any-hover)’&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/45681&quot;&gt;#45681&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;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/45786&quot;&gt;#45786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;console­.dir()&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/45109&quot;&gt;#45109&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;custom­Element­Registry&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/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45872&quot;&gt;#45872&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;initialize()&lt;/strong&gt; on &lt;strong&gt;Custom­Element­Registry&lt;/strong&gt; (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&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/45903&quot;&gt;#45903&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;new Custom­Element­Registry()&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/45791&quot;&gt;#45791&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45550&quot;&gt;#45550&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;text­Stream()&lt;/strong&gt; on &lt;strong&gt;Request&lt;/strong&gt;, &lt;strong&gt;Response&lt;/strong&gt;, and &lt;strong&gt;Blob&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/45864&quot;&gt;#45864&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45861&quot;&gt;#45861&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;set­Pointer­Capture()&lt;/strong&gt;, &lt;strong&gt;release­Pointer­Capture()&lt;/strong&gt;, &lt;strong&gt;has­Pointer­Capture()&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/45048&quot;&gt;#45048&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;on­touch­start&lt;/strong&gt;, &lt;strong&gt;on­touch­end&lt;/strong&gt;, &lt;strong&gt;on­touch­move&lt;/strong&gt;, &lt;strong&gt;on­touch­cancel&lt;/strong&gt; on &lt;strong&gt;Element&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/45049&quot;&gt;#45049&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crypto­.subtle­.digest()&lt;/strong&gt; for &lt;strong&gt;KT128&lt;/strong&gt; and &lt;strong&gt;KT256&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/45699&quot;&gt;#45699&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crypto­.subtle­.get­Public­Key()&lt;/strong&gt; for &lt;strong&gt;ML-KEM&lt;/strong&gt; and &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/45252&quot;&gt;#45252&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&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/twissept/blog/2026/07/31/june-in-servo/#you-can-help&quot;&gt;&lt;strong&gt;You can help!&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/twissept/blog/2026/07/31/june-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/twissept/blog/2026/07/31/june-in-servo/#real-world-compat&quot;&gt;&lt;strong&gt;Real world compat&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/twissept/blog/2026/07/31/june-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/twissept/blog/2026/07/31/june-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/twissept/blog/2026/07/31/june-in-servo/#for-users-and-developers&quot;&gt;&lt;strong&gt;For users and 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/twissept/blog/2026/07/31/june-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/twissept/blog/2026/07/31/june-in-servo/#garbage-collection-safety&quot;&gt;&lt;strong&gt;Garbage collection safety&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/twissept/blog/2026/07/31/june-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;li&gt;
&lt;p&gt;&lt;a href=&quot;https://servo.org/twissept/blog/2026/07/31/june-in-servo/#new-contributors&quot;&gt;&lt;strong&gt;New contributors&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;you-can-help!&quot; tabindex=&quot;-1&quot;&gt;You can help! &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/07/31/june-in-servo/#you-can-help!&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 steadily becoming a bigger and busier project every month, and by June 2026, we’ve been reading through &lt;strong&gt;over four times&lt;/strong&gt; the commits as we did when we started in September 2023.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-07-commits.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-commits.png&quot; alt=&quot;line chart showing how many commits landed in Servo’s main repo each month from September 2023 to June 2026 inclusive. there’s a clear linear trend, from 130 commits up to 551 commits&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;This is hard work, particularly since there are things we need to know that are often difficult to answer just by reading the changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Who does the change affect&lt;/strong&gt;, if anyone? Does it affect users, Servo developers, embedders, or some other group?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What observable difference does the change make&lt;/strong&gt;, if any?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Does the feature require any preferences to be enabled&lt;/strong&gt;, or is it enabled for everyone by default?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Are any real-world websites affected by the change?&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What issue or broader project is the change related to?&lt;/strong&gt; This question is answered by &lt;code&gt;Fixes: #xxxxx&lt;/code&gt; or &lt;code&gt;Part of: #xxxxx&lt;/code&gt; in the PR description.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to an initiative by &lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, it’s now easier than ever for you to &lt;strong&gt;help us answer those questions&lt;/strong&gt;, using the Servo Highfive bot!
If you’re working on a pull request that you think might be interesting for the next monthly update, even if you’re not 100% sure, tell us about it by following the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You add the &lt;span style=&quot;padding: 0.1875lh; border-radius: calc(0.5lh + 2 * 1px); background: rgb(13, 17, 23);&quot;&gt;&lt;span style=&quot;padding: 0 0.25lh; border: thin solid rgba(85, 221, 126, 0.3); border-radius: 0.5lh; color: rgb(85, 221, 126); background-color: rgba(84, 222, 126, 0.18);&quot;&gt;monthly update&lt;/span&gt;&lt;/span&gt; label to your pull request, or comment &lt;code style=&quot;display: /* allow wrapping only as last resort */ inline-block;&quot;&gt;&lt;a href=&quot;https://github.com/servo-highfive&quot;&gt;@servo-highfive&lt;/a&gt; monthly update&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Highfive posts a comment asking you some questions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You answer those questions in a comment containing &lt;code style=&quot;display: /* allow wrapping only as last resort */ inline-block;&quot;&gt;&lt;a href=&quot;https://github.com/servo-highfive&quot;&gt;@servo-highfive&lt;/a&gt; monthly update answer&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&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/twissept/blog/2026/07/31/june-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.1&lt;/strong&gt;, had several &lt;strong&gt;security bugs&lt;/strong&gt; that have been fixed in Servo 0.4.0 with the update to SpiderMonkey 140.11.0 (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45584&quot;&gt;#45584&lt;/a&gt;).
For more details, see &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-8388&quot;&gt;CVE-2026-8388&lt;/a&gt;, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-8391&quot;&gt;CVE-2026-8391&lt;/a&gt;, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-8974&quot;&gt;CVE-2026-8974&lt;/a&gt;, &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-8975&quot;&gt;CVE-2026-8975&lt;/a&gt;, and &lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2026-48/&quot;&gt;MFSA 2026-48&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Several more &lt;strong&gt;security bugs&lt;/strong&gt; in Servo’s JS runtime have been fixed in Servo 0.4.0 with the update to SpiderMonkey 140.12.0 (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45766&quot;&gt;#45766&lt;/a&gt;).
The exact CVEs that apply to us are not yet known, but for more details, see &lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2026-58/&quot;&gt;MFSA 2026-58&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RSA&lt;/strong&gt; operations in &lt;strong&gt;Subtle­Crypto&lt;/strong&gt; now do modular exponentiation in constant time (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45631&quot;&gt;#45631&lt;/a&gt;).
Please note that our RSA implementation is currently vulnerable to the &lt;a href=&quot;https://people.redhat.com/~hkario/marvin/&quot;&gt;Marvin Attack&lt;/a&gt; – for more details, see &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2023-0071.html&quot;&gt;RUSTSEC-2023-0071&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ML-DSA&lt;/strong&gt; operations in &lt;strong&gt;Subtle­Crypto&lt;/strong&gt; now do the Decompose step in constant time, fixing &lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2025-0144.html&quot;&gt;RUSTSEC-2025-0144&lt;/a&gt; (&lt;a href=&quot;https://github.com/kkoyung&quot;&gt;@kkoyung&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45294&quot;&gt;#45294&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed an HTML injection bug (XSS) in &lt;strong&gt;file:/// directory listings&lt;/strong&gt;, which affected file names containing &lt;code&gt;&amp;lt;/script&amp;gt;&lt;/code&gt; (&lt;a href=&quot;https://github.com/sahvx655-wq&quot;&gt;@sahvx655-wq&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45510&quot;&gt;#45510&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;real-world-compat&quot; tabindex=&quot;-1&quot;&gt;Real world compat &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/07/31/june-in-servo/#real-world-compat&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;Layout correctness has significantly improved on &lt;strong&gt;&lt;a href=&quot;https://lichess.org/&quot;&gt;lichess.org&lt;/a&gt;&lt;/strong&gt;, and many websites have become a lot more readable thanks to our improved handling of &lt;strong&gt;variable fonts&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/45768&quot;&gt;#45768&lt;/a&gt;), including &lt;strong&gt;Zulip (&lt;a href=&quot;https://servo.zulipchat.com/&quot;&gt;servo.zulipchat.com&lt;/a&gt;)&lt;/strong&gt; and &lt;strong&gt;Speedtest (&lt;a href=&quot;https://speedtest.net/&quot;&gt;speedtest.net&lt;/a&gt;)&lt;/strong&gt;.&lt;/p&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 33%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.3.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-161705.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-161708.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://lichess.org/&quot;&gt;lichess.org&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 20%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.3.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-161115.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-161201.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;Zulip (&lt;a href=&quot;https://servo.zulipchat.com/&quot;&gt;servo.zulipchat.com&lt;/a&gt;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;_spaced&quot;&gt;
    &lt;div class=&quot;_peel&quot; style=&quot;--default-position: 39%;&quot;&gt;
        &lt;div class=&quot;_line&quot;&gt;
            &lt;div class=&quot;_left&quot;&gt;&lt;div&gt;v0.3.0&lt;/div&gt;&lt;/div&gt;
            &lt;div class=&quot;_right&quot;&gt;&lt;div&gt;v0.4.0&lt;/div&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-174050.png&quot; /&gt;
        &lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-174052.png&quot; /&gt;
    &lt;/div&gt;
    &lt;figcaption&gt;Speedtest (&lt;a href=&quot;https://speedtest.net/&quot;&gt;speedtest.net&lt;/a&gt;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Many websites worked in Servo even before version 0.4.0, including &lt;strong&gt;Google Photos (&lt;a href=&quot;https://photos.google.com/&quot;&gt;photos.google.com&lt;/a&gt;)&lt;/strong&gt; and Cash Converters (&lt;a href=&quot;https://cashconverters.com.au/&quot;&gt;cashconverters.com.au&lt;/a&gt;), and continue to work in version 0.4.0.
Other websites, like Google Maps (&lt;a href=&quot;https://maps.google.com/&quot;&gt;maps.google.com&lt;/a&gt;) and OpenStreetMap (&lt;a href=&quot;https://www.openstreetmap.org/&quot;&gt;www.openstreetmap.org&lt;/a&gt;), render well but have some issues with interactivity.&lt;/p&gt;
&lt;figure class=&quot;_spaced _halves&quot;&gt;
    &lt;figure class=&quot;_spaced&quot;&gt;
        &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-07-175215.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-175215.png&quot; /&gt;&lt;/a&gt;
        &lt;figcaption&gt;Google Photos (&lt;a href=&quot;https://photos.google.com/&quot;&gt;photos.google.com&lt;/a&gt;)&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;figure class=&quot;_spaced&quot;&gt;
        &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-07-162341.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-162341.png&quot; /&gt;&lt;/a&gt;
        &lt;figcaption&gt;Cash Converters (&lt;a href=&quot;https://cashconverters.com.au/&quot;&gt;cashconverters.com.au&lt;/a&gt;)&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;figure class=&quot;_spaced&quot;&gt;
        &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-07-202258.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-202258.png&quot; /&gt;&lt;/a&gt;
        &lt;figcaption&gt;Google Maps (&lt;a href=&quot;https://maps.google.com/&quot;&gt;maps.google.com&lt;/a&gt;)&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;figure class=&quot;_spaced&quot;&gt;
        &lt;a href=&quot;https://servo.org/twissept/img/blog/2026-07-203458.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/img/blog/2026-07-203458.png&quot; /&gt;&lt;/a&gt;
        &lt;figcaption&gt;OpenStreetMap (&lt;a href=&quot;https://www.openstreetmap.org/&quot;&gt;www.openstreetmap.org&lt;/a&gt;)&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;/figure&gt;
&lt;style&gt;
    ._spaced {
        margin: 1em 0;
    }
    ._halves {
        display: flex;
        flex-flow: row wrap;
    }
    ._halves &gt; * {
        width: 50%;
    }
    ._peel {
        --default-position: 50%;
        position: relative;
        overflow: hidden;
        background: white;
        * {
            /* ensure ‘pointermove’ events always target the root */
            pointer-events: none;
            user-select: none;
        }
        img {
            background: white;
        }
        :not(:last-child) {
            position: absolute;
            inset: 0 auto 0 auto;
            width: var(--position, var(--default-position));
            height: 100%;
            object-fit: cover;
            object-position: top left;
        }
        ._line {
            z-index: 1;
            border-right: thin solid #1192e8;
            div {
                position: absolute;
                right: 0;
                width: 0;
            }
            div div {
                position: absolute;
                width: max-content;
                padding: 0 0.25em;
                background: #ffffff80;
            }
            ._left div {
                /* extend left of the line */
                right: 0;
            }
            ._right div {
                /* extend right of the line */
                left: 0;
            }
        }
    }
&lt;/style&gt;
&lt;script&gt;
    for (const peel of document.querySelectorAll(&quot;._peel&quot;)) {
        peel.addEventListener(&quot;pointermove&quot;, event =&gt; {
            const position = Math.max(0, Math.min(1, event.offsetX / peel.offsetWidth));
            peel.style.setProperty(&quot;--position&quot;, `${position * 100}%`);
        }, true);
    }
&lt;/script&gt;
&lt;p&gt;We’re interested to hear how well your favourite websites run in Servo!
Report successes in &lt;a href=&quot;https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341&quot;&gt;this Zulip thread&lt;/a&gt;, and failures &lt;a href=&quot;https://github.com/servo/servo/issues&quot;&gt;in our GitHub issues&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/twissept/blog/2026/07/31/june-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 implementing the more powerful version of &lt;strong&gt;‘attr()’&lt;/strong&gt; that can be used anywhere, not just in ‘content’, under &lt;code&gt;--pref layout­_css­_attr­_enabled&lt;/code&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/45041&quot;&gt;#45041&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45421&quot;&gt;#45421&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45495&quot;&gt;#45495&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45752&quot;&gt;#45752&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebGPU&lt;/strong&gt; support has improved, under &lt;code&gt;--pref dom­_webgpu­_enabled&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;implemented &lt;strong&gt;copy­External­Image­To­Texture()&lt;/strong&gt; on &lt;strong&gt;GPU­Queue&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/45646&quot;&gt;#45646&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implemented &lt;strong&gt;create­Query­Set()&lt;/strong&gt; on &lt;strong&gt;GPU­Device&lt;/strong&gt; and &lt;strong&gt;resolve­Query­Set()&lt;/strong&gt; on &lt;strong&gt;GPU­Command­Encoder&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/45644&quot;&gt;#45644&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implemented &lt;strong&gt;push­Debug­Group()&lt;/strong&gt;, &lt;strong&gt;pop­Debug­Group()&lt;/strong&gt;, and &lt;strong&gt;insert­Debug­Marker()&lt;/strong&gt; on &lt;strong&gt;GPU­Command­Encoder&lt;/strong&gt;, &lt;strong&gt;GPU­Compute­Pass­Encoder&lt;/strong&gt;, and &lt;strong&gt;GPU­Render­Pass­Encoder&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/45489&quot;&gt;#45489&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;more conformant &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/45300&quot;&gt;#45300&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;more conformant &lt;strong&gt;request­Adapter()&lt;/strong&gt; on &lt;strong&gt;GPU&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/45424&quot;&gt;#45424&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;more conformant &lt;strong&gt;secure context&lt;/strong&gt; enforcement (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45279&quot;&gt;#45279&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of the features above are enabled in servoshell’s &lt;a href=&quot;https://book.servo.org/design-documentation/experimental-features.html#experimental-web-platform-features&quot;&gt;experimental mode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve made more progress towards &lt;strong&gt;accessibility&lt;/strong&gt; support, 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/servo/servo/pull/45555&quot;&gt;#45555&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45554&quot;&gt;#45554&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44949&quot;&gt;#44949&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve started implementing visible and interactive &lt;strong&gt;text selection&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/46107&quot;&gt;#46107&lt;/a&gt;), one of the most long-awaited features of any web browser.
Stay tuned!&lt;/p&gt;
&lt;p&gt;We’ve also started working on &lt;strong&gt;Web Animations&lt;/strong&gt;, under &lt;code&gt;--pref dom­_web­_animations­_enabled&lt;/code&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/45522&quot;&gt;#45522&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45983&quot;&gt;#45983&lt;/a&gt;), as well as &lt;strong&gt;webkit­Relative­Path&lt;/strong&gt; on &lt;strong&gt;File&lt;/strong&gt;, under &lt;code&gt;--pref dom­_entries­_api­_enabled&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/45666&quot;&gt;#45666&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Rust doesn’t have a stable &lt;a href=&quot;https://en.wikipedia.org/wiki/Application_binary_interface&quot;&gt;ABI&lt;/a&gt;, so it has generally not been possible to embed Servo in another application without building Servo from source.
To make it possible, we’ve started designing a &lt;strong&gt;wrapper C API&lt;/strong&gt; that will let you consume Servo as a prebuilt shared library using the stable and ubiquitous C ABI (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44984&quot;&gt;#44984&lt;/a&gt;).
Eventually the idea is that we’ll create a wrapper Rust API around &lt;em&gt;that&lt;/em&gt; wrapper C API, so you can have both the ergonomics of Rust &lt;em&gt;and&lt;/em&gt; the build simplicity of C.&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/twissept/blog/2026/07/31/june-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;New in the &lt;a href=&quot;https://doc.servo.org/servo/&quot;&gt;&lt;strong&gt;Servo API&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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.rendering_context&quot;&gt;&lt;code&gt;rendering­_context&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/46047&quot;&gt;#46047&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Breaking changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;code&gt;send­_error&lt;/code&gt; has been removed (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45502&quot;&gt;#45502&lt;/a&gt;) – this method was always meant to be internal, and has become unused after we introduced the new Web­View- and Web­View­Delegate-based API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve improved the docs for Web­View, Web­View­Delegate, JS­Value, Alert­Dialog, Allow­Or­Deny­Request, Authentication­Response, Bluetooth­Device­Description, Confirm­Dialog, Console­Log­Level, Create­New­Web­View­Request, Embedder­Control, Embedder­Control­Response, File­Picker, Image, Java­Script­Error­Info, Navigation­Request, Permission­Request, Pixel­Format, Prompt­Dialog, Protocol­Handler­Registration, Protocol­Handler­Update­Registration, Scroll, Select­Element, Select­Element­Request, and Web­View­Vector (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45282&quot;&gt;#45282&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45467&quot;&gt;#45467&lt;/a&gt;).&lt;/p&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/twissept/blog/2026/07/31/june-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;In servoshell:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the &lt;strong&gt;Android&lt;/strong&gt; version now requires &lt;strong&gt;Android 13+&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/46104&quot;&gt;#46104&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the &lt;strong&gt;desktop&lt;/strong&gt; version now lets you &lt;strong&gt;drag and drop files&lt;/strong&gt; to open them (&lt;a href=&quot;https://github.com/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45454&quot;&gt;#45454&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the &lt;strong&gt;desktop&lt;/strong&gt; version now lets the &lt;strong&gt;tab bar scroll horizontally&lt;/strong&gt; if you have too many tabs open, but from one tab hoarder to another, maybe you should reconsider having so many tabs open (&lt;a href=&quot;https://github.com/Nylme&quot;&gt;@Nylme&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44884&quot;&gt;#44884&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the &lt;strong&gt;desktop&lt;/strong&gt; version enters fullscreen on the monitor containing the window, even if you’ve moved it to a different monitor (&lt;a href=&quot;https://github.com/rhit-kapilaar&quot;&gt;@rhit-kapilaar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45556&quot;&gt;#45556&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the &lt;strong&gt;desktop&lt;/strong&gt; UI is more performant, resizes more smoothly, and no longer gets stuck in hovered states (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45289&quot;&gt;#45289&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45456&quot;&gt;#45456&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45290&quot;&gt;#45290&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;select multiple&amp;gt;&lt;/strong&gt; should now be interactable on &lt;strong&gt;all desktop platforms&lt;/strong&gt; (&lt;a href=&quot;https://github.com/alexcat3&quot;&gt;@alexcat3&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45419&quot;&gt;#45419&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;localhost:&amp;lt;port&amp;gt;&lt;/code&gt; now implies &lt;code&gt;http://&lt;/code&gt; &lt;strong&gt;in the location bar&lt;/strong&gt; and &lt;strong&gt;on the command line&lt;/strong&gt;, rather than treating &lt;code&gt;localhost:&lt;/code&gt; as an unsupported URL scheme (&lt;a href=&quot;https://github.com/SteveSharonSam&quot;&gt;@SteveSharonSam&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45729&quot;&gt;#45729&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45832&quot;&gt;#45832&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When using the Firefox &lt;strong&gt;DevTools&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;in the &lt;strong&gt;Console&lt;/strong&gt; tab, &lt;strong&gt;uncaught exceptions&lt;/strong&gt; are reported correctly (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45549&quot;&gt;#45549&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;in the &lt;strong&gt;Console&lt;/strong&gt; and &lt;strong&gt;Debugger&lt;/strong&gt; tabs, you can now inspect the elements of &lt;strong&gt;nested arrays&lt;/strong&gt; and the entries of &lt;strong&gt;Map objects&lt;/strong&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/45435&quot;&gt;#45435&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45514&quot;&gt;#45514&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45767&quot;&gt;#45767&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;in the &lt;strong&gt;Debugger&lt;/strong&gt; tab, the &lt;strong&gt;Scopes&lt;/strong&gt; panel now shows any &lt;strong&gt;‘(uninitialized)’&lt;/strong&gt; variables, the value of &lt;code&gt;this&lt;/code&gt;, and the &lt;strong&gt;global scope&lt;/strong&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/servo/servo/pull/45824&quot;&gt;#45824&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45517&quot;&gt;#45517&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve fixed some build issues on &lt;strong&gt;riscv32&lt;/strong&gt;, &lt;strong&gt;riscv64&lt;/strong&gt;, and &lt;strong&gt;arm64&lt;/strong&gt; (&lt;a href=&quot;https://github.com/fxzjshm&quot;&gt;@fxzjshm&lt;/a&gt;, &lt;a href=&quot;https://github.com/saschanaz&quot;&gt;@saschanaz&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45285&quot;&gt;#45285&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45731&quot;&gt;#45731&lt;/a&gt;), and modernised servoshell for &lt;strong&gt;Android&lt;/strong&gt; to use Compose UI and Kotlin (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45923&quot;&gt;#45923&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45932&quot;&gt;#45932&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45941&quot;&gt;#45941&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45982&quot;&gt;#45982&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45985&quot;&gt;#45985&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46015&quot;&gt;#46015&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46035&quot;&gt;#46035&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46037&quot;&gt;#46037&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46046&quot;&gt;#46046&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46053&quot;&gt;#46053&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46061&quot;&gt;#46061&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46071&quot;&gt;#46071&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45641&quot;&gt;#45641&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45643&quot;&gt;#45643&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45650&quot;&gt;#45650&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45665&quot;&gt;#45665&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45671&quot;&gt;#45671&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45676&quot;&gt;#45676&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45679&quot;&gt;#45679&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45683&quot;&gt;#45683&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45712&quot;&gt;#45712&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45713&quot;&gt;#45713&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45734&quot;&gt;#45734&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45738&quot;&gt;#45738&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For developers of Servo itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mach try --help&lt;/code&gt; now lists all of the kinds of &lt;strong&gt;try jobs&lt;/strong&gt; you can run (&lt;a href=&quot;https://github.com/shubhamg13&quot;&gt;@shubhamg13&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45607&quot;&gt;#45607&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mach test-wpt --update-expectations&lt;/code&gt; lets you run &lt;strong&gt;Web Platform Tests&lt;/strong&gt; and &lt;a href=&quot;https://book.servo.org/contributing/testing.html#updating-web-platform-test-expectations&quot;&gt;&lt;strong&gt;update expectations&lt;/strong&gt;&lt;/a&gt; in a single 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/45521&quot;&gt;#45521&lt;/a&gt;), rather than having to run &lt;code&gt;mach test-wpt --log-raw &amp;lt;path&amp;gt;&lt;/code&gt; followed by &lt;code&gt;mach update-wpt &amp;lt;path&amp;gt;&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/twissept/blog/2026/07/31/june-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;To allow for more performant scrolling, &lt;strong&gt;‘wheel’ events&lt;/strong&gt; are no longer &lt;code&gt;.cancelable&lt;/code&gt; unless there are one or more non-&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#passive&quot;&gt;&lt;code&gt;passive&lt;/code&gt;&lt;/a&gt; event listeners (&lt;a href=&quot;https://github.com/kunalmohan&quot;&gt;@kunalmohan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45667&quot;&gt;#45667&lt;/a&gt;).
Note that like in Firefox, ‘wheel’ events are &lt;code&gt;passive&lt;/code&gt; by default.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;‘dotted’&lt;/strong&gt;, &lt;strong&gt;‘dashed’&lt;/strong&gt;, and &lt;strong&gt;‘wavy’ text decorations&lt;/strong&gt; are now continuous across element 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/45726&quot;&gt;#45726&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve improved the conformance of &lt;strong&gt;&amp;lt;dialog&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&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/45825&quot;&gt;#45825&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45761&quot;&gt;#45761&lt;/a&gt;), &lt;strong&gt;&amp;lt;iframe sandbox&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/cychronex-labs&quot;&gt;@cychronex-labs&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45880&quot;&gt;#45880&lt;/a&gt;), &lt;strong&gt;&amp;lt;input minlength&amp;gt;&lt;/strong&gt; and &lt;strong&gt;&amp;lt;input maxlength&amp;gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45705&quot;&gt;#45705&lt;/a&gt;), &lt;strong&gt;CSS gradients&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/43945&quot;&gt;#43945&lt;/a&gt;), &lt;strong&gt;‘font-style’&lt;/strong&gt; and &lt;strong&gt;‘unicode-range’&lt;/strong&gt; in &lt;strong&gt;‘&lt;a href=&quot;https://github.com/font-face&quot;&gt;@font-face&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/45821&quot;&gt;#45821&lt;/a&gt;), &lt;strong&gt;FontFaceSet&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/45390&quot;&gt;#45390&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45382&quot;&gt;#45382&lt;/a&gt;), &lt;strong&gt;HTML­Input­Element&lt;/strong&gt; (&lt;a href=&quot;https://github.com/steigeo&quot;&gt;@steigeo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45416&quot;&gt;#45416&lt;/a&gt;), &lt;strong&gt;Intersection­Observer&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/45655&quot;&gt;#45655&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45659&quot;&gt;#45659&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45680&quot;&gt;#45680&lt;/a&gt;), &lt;strong&gt;new Response()&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/45953&quot;&gt;#45953&lt;/a&gt;), &lt;strong&gt;URL.create­Object­URL()&lt;/strong&gt; and &lt;strong&gt;URL.revoke­Object­URL()&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/45182&quot;&gt;#45182&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45417&quot;&gt;#45417&lt;/a&gt;), and &lt;strong&gt;ECDSA&lt;/strong&gt; and &lt;strong&gt;Ed25519&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/45833&quot;&gt;#45833&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46017&quot;&gt;#46017&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed bugs related to &lt;strong&gt;&amp;lt;input hidden&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/45750&quot;&gt;#45750&lt;/a&gt;), &lt;strong&gt;‘animation-delay’&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/45013&quot;&gt;#45013&lt;/a&gt;), &lt;strong&gt;‘clip-path’&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/45468&quot;&gt;#45468&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45373&quot;&gt;#45373&lt;/a&gt;), &lt;strong&gt;‘tab-size’&lt;/strong&gt; (&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/45309&quot;&gt;#45309&lt;/a&gt;), &lt;strong&gt;‘width’&lt;/strong&gt; and &lt;strong&gt;‘height’&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/44627&quot;&gt;#44627&lt;/a&gt;), &lt;strong&gt;‘box-shadow: inset’&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/45620&quot;&gt;#45620&lt;/a&gt;), &lt;strong&gt;‘animation­iteration’ events&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/45990&quot;&gt;#45990&lt;/a&gt;), &lt;strong&gt;‘click’ 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/45751&quot;&gt;#45751&lt;/a&gt;), &lt;strong&gt;‘load’ 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/45883&quot;&gt;#45883&lt;/a&gt;), &lt;strong&gt;‘error’ events&lt;/strong&gt; in Worker global scopes (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45829&quot;&gt;#45829&lt;/a&gt;), and &lt;strong&gt;document­.get­Element­By­Id()&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/45433&quot;&gt;#45433&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;garbage-collection-safety&quot; tabindex=&quot;-1&quot;&gt;Garbage collection safety &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/twissept/blog/2026/07/31/june-in-servo/#garbage-collection-safety&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 use a &lt;a href=&quot;https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html&quot;&gt;&lt;strong&gt;RefCell&lt;/strong&gt;-based mechanism&lt;/a&gt; to store many of our DOM types in other DOM types, enforcing Rust’s “aliasing xor mutability” rule at runtime by panicking if the rule is violated.
But when garbage collection happens, we need to &lt;a href=&quot;https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html#method.borrow&quot;&gt;borrow()&lt;/a&gt; each DomRefCell to trace the references, and this is the source of many panic bugs.
To fix that whole class of bugs, we initially created &lt;strong&gt;CanGc&lt;/strong&gt;, a marker type that would annotate the code paths where GC can occur, in conjunction with custom static analysis (&lt;a href=&quot;https://github.com/jdm&quot;&gt;@jdm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/33140&quot;&gt;#33140&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;With the Rust type system we can do even better, if we flip that around and require any &lt;a href=&quot;https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html#method.borrow_mut&quot;&gt;borrow_mut()&lt;/a&gt; call to prove that GC can &lt;em&gt;not&lt;/em&gt; occur by passing a &lt;strong&gt;NoGC&lt;/strong&gt; marker value.
We can then require that a &lt;code&gt;&amp;amp;NoGC&lt;/code&gt; must be borrowed from a &lt;code&gt;&amp;amp;JSContext&lt;/code&gt; (which blocks GC) and not a &lt;code&gt;&amp;amp;mut JSContext&lt;/code&gt; (which allows GC), taking advantage of how Rust references work without needing any custom static analysis.&lt;/p&gt;
&lt;p&gt;We have a large codebase that needs to be migrated in parts, so for now we’ve created the new method &lt;a href=&quot;https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html#method.safe_borrow_mut&quot;&gt;safe­_borrow­_mut()&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/46050&quot;&gt;#46050&lt;/a&gt;).
We also need to update all of our script-related code to borrow our &lt;a href=&quot;https://doc.servo.org/script_bindings/import/base/struct.JSContext.html&quot;&gt;safe JSContext wrapper&lt;/a&gt;, rather than creating an owned JSContext on the spot.&lt;/p&gt;
&lt;p&gt;This continues our long-running effort to &lt;strong&gt;use the Rust type system&lt;/strong&gt; to make Servo’s integration with SpiderMonkey safer and more reliable (&lt;a href=&quot;https://github.com/Gae24&quot;&gt;@Gae24&lt;/a&gt;, &lt;a href=&quot;https://github.com/Keerti707&quot;&gt;@Keerti707&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/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/guptapiyush16&quot;&gt;@guptapiyush16&lt;/a&gt;, &lt;a href=&quot;https://github.com/ivomurrell&quot;&gt;@ivomurrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/kunalmohan&quot;&gt;@kunalmohan&lt;/a&gt;, &lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45230&quot;&gt;#45230&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45436&quot;&gt;#45436&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45503&quot;&gt;#45503&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45617&quot;&gt;#45617&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45711&quot;&gt;#45711&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45797&quot;&gt;#45797&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45800&quot;&gt;#45800&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45858&quot;&gt;#45858&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45884&quot;&gt;#45884&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45937&quot;&gt;#45937&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45902&quot;&gt;#45902&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45968&quot;&gt;#45968&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45977&quot;&gt;#45977&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45991&quot;&gt;#45991&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46003&quot;&gt;#46003&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46005&quot;&gt;#46005&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46084&quot;&gt;#46084&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45548&quot;&gt;#45548&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45552&quot;&gt;#45552&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45590&quot;&gt;#45590&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45909&quot;&gt;#45909&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45912&quot;&gt;#45912&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45943&quot;&gt;#45943&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46089&quot;&gt;#46089&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46117&quot;&gt;#46117&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46114&quot;&gt;#46114&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45320&quot;&gt;#45320&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45324&quot;&gt;#45324&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45328&quot;&gt;#45328&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45340&quot;&gt;#45340&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45381&quot;&gt;#45381&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45385&quot;&gt;#45385&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45410&quot;&gt;#45410&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45392&quot;&gt;#45392&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45409&quot;&gt;#45409&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45604&quot;&gt;#45604&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45616&quot;&gt;#45616&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45618&quot;&gt;#45618&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45627&quot;&gt;#45627&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45636&quot;&gt;#45636&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45662&quot;&gt;#45662&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45663&quot;&gt;#45663&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45675&quot;&gt;#45675&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45674&quot;&gt;#45674&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45677&quot;&gt;#45677&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45684&quot;&gt;#45684&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45735&quot;&gt;#45735&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45807&quot;&gt;#45807&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45810&quot;&gt;#45810&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45816&quot;&gt;#45816&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45818&quot;&gt;#45818&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45828&quot;&gt;#45828&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45838&quot;&gt;#45838&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45836&quot;&gt;#45836&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45837&quot;&gt;#45837&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45840&quot;&gt;#45840&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45841&quot;&gt;#45841&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45857&quot;&gt;#45857&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45859&quot;&gt;#45859&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45862&quot;&gt;#45862&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45875&quot;&gt;#45875&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45887&quot;&gt;#45887&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45931&quot;&gt;#45931&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45964&quot;&gt;#45964&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45935&quot;&gt;#45935&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45987&quot;&gt;#45987&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45988&quot;&gt;#45988&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46001&quot;&gt;#46001&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46040&quot;&gt;#46040&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46051&quot;&gt;#46051&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46057&quot;&gt;#46057&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46106&quot;&gt;#46106&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46125&quot;&gt;#46125&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45678&quot;&gt;#45678&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46002&quot;&gt;#46002&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45845&quot;&gt;#45845&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45645&quot;&gt;#45645&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45673&quot;&gt;#45673&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45259&quot;&gt;#45259&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45817&quot;&gt;#45817&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45822&quot;&gt;#45822&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45876&quot;&gt;#45876&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45877&quot;&gt;#45877&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45891&quot;&gt;#45891&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/twissept/blog/2026/07/31/june-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;&lt;strong&gt;NoGC&lt;/strong&gt; was designed to prevent dynamic borrow failures, but it also enables some performance optimisations!
If we can prove that garbage collection is impossible in some part of Servo, we can often &lt;strong&gt;avoid rooting JavaScript objects&lt;/strong&gt; when interacting with them within that region of code.
This has allowed us to reduce overheads by over 1% in the &lt;strong&gt;layout&lt;/strong&gt; process and in &lt;strong&gt;HTML­Collection&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/46092&quot;&gt;#46092&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45582&quot;&gt;#45582&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Our &lt;strong&gt;memory usage&lt;/strong&gt; has improved, with &lt;strong&gt;BoxFragment&lt;/strong&gt; now &lt;strong&gt;17% smaller&lt;/strong&gt; (288 → 240 bytes on amd64) and &lt;strong&gt;ShapeCacheEntry&lt;/strong&gt; now smaller too (&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/simonwuelker&quot;&gt;@simonwuelker&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45183&quot;&gt;#45183&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45496&quot;&gt;#45496&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve fixed some nasty &lt;strong&gt;memory leaks&lt;/strong&gt; when &lt;strong&gt;reloading&lt;/strong&gt; and in &lt;strong&gt;2D canvases&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Taym95&quot;&gt;@Taym95&lt;/a&gt;, &lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45455&quot;&gt;#45455&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45261&quot;&gt;#45261&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45414&quot;&gt;#45414&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Speaking of which, &lt;strong&gt;2D canvases&lt;/strong&gt; now use up to &lt;strong&gt;23% less power&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/45301&quot;&gt;#45301&lt;/a&gt;), and we now avoid rasterising the same SVG more than once (&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/servo/servo/pull/44805&quot;&gt;#44805&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Servo now &lt;strong&gt;decodes all images asynchronously&lt;/strong&gt; and &lt;strong&gt;fills image caches asynchronously&lt;/strong&gt;, leaving script threads (web content processes) more time for other work (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45542&quot;&gt;#45542&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44483&quot;&gt;#44483&lt;/a&gt;).
On top of that, we’ve improved &lt;strong&gt;incremental 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/servo/servo/pull/45411&quot;&gt;#45411&lt;/a&gt;) and reduced reflows in &lt;strong&gt;IntersectionObserver&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/45986&quot;&gt;#45986&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve started working on &lt;strong&gt;incremental updates&lt;/strong&gt; for the &lt;strong&gt;stacking context tree&lt;/strong&gt;, and as a side effect, we’ve made some layout-bound microbenchmarks up to 10% faster (&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/45208&quot;&gt;#45208&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also reduced allocations, copies, GC rooting steps, and other operations in many parts of Servo (&lt;a href=&quot;https://github.com/Narfinger&quot;&gt;@Narfinger&lt;/a&gt;, &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/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45506&quot;&gt;#45506&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45969&quot;&gt;#45969&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45940&quot;&gt;#45940&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45760&quot;&gt;#45760&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46090&quot;&gt;#46090&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45335&quot;&gt;#45335&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45413&quot;&gt;#45413&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45511&quot;&gt;#45511&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For several months, Frédéric (&lt;a href=&quot;https://github.com/fred-wang&quot;&gt;@fred-wang&lt;/a&gt;) has been &lt;a href=&quot;https://en.wikipedia.org/wiki/Fuzzing&quot;&gt;&lt;strong&gt;fuzzing&lt;/strong&gt;&lt;/a&gt; for Servo bugs, and thanks to his work we’ve fixed sixteen (16) &lt;strong&gt;crash bugs&lt;/strong&gt; in June, affecting &lt;strong&gt;&amp;lt;iframe&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;slot&amp;gt;&lt;/strong&gt;, &lt;strong&gt;&amp;lt;link onerror&amp;gt;&lt;/strong&gt;, &lt;strong&gt;‘animation’&lt;/strong&gt;, &lt;strong&gt;‘clip-path’&lt;/strong&gt;, &lt;strong&gt;‘content’&lt;/strong&gt;, &lt;strong&gt;‘rotate’&lt;/strong&gt;, &lt;strong&gt;‘transition’&lt;/strong&gt;, &lt;strong&gt;‘transform-style’&lt;/strong&gt;, &lt;strong&gt;‘display: contents’&lt;/strong&gt;, &lt;strong&gt;‘overflow: clip’&lt;/strong&gt;, &lt;strong&gt;CSS­Keyframes­Rule&lt;/strong&gt;, &lt;strong&gt;Font­Face&lt;/strong&gt;, &lt;strong&gt;stop() on Window&lt;/strong&gt;, &lt;strong&gt;document­.element­From­Point()&lt;/strong&gt;, and the &lt;strong&gt;DOM tree&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/fred-wang&quot;&gt;@fred-wang&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46031&quot;&gt;#46031&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46027&quot;&gt;#46027&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46054&quot;&gt;#46054&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46058&quot;&gt;#46058&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46016&quot;&gt;#46016&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46028&quot;&gt;#46028&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46033&quot;&gt;#46033&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45287&quot;&gt;#45287&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45951&quot;&gt;#45951&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45634&quot;&gt;#45634&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45629&quot;&gt;#45629&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46110&quot;&gt;#46110&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/46094&quot;&gt;#46094&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45799&quot;&gt;#45799&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45611&quot;&gt;#45611&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45682&quot;&gt;#45682&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45788&quot;&gt;#45788&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45612&quot;&gt;#45612&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45834&quot;&gt;#45834&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We’ve also fixed crash bugs related to &lt;strong&gt;IPC&lt;/strong&gt; failures, &lt;strong&gt;HTML­Input­Element&lt;/strong&gt;, &lt;strong&gt;Range&lt;/strong&gt;, the &lt;strong&gt;DevTools&lt;/strong&gt; Debugger tab, and when servoshell is built with &lt;code&gt;--features native-bluetooth&lt;/code&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/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/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45311&quot;&gt;#45311&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45619&quot;&gt;#45619&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45765&quot;&gt;#45765&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45513&quot;&gt;#45513&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45702&quot;&gt;#45702&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/twissept/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 (&lt;a href=&quot;https://github.com/Deepam02&quot;&gt;@Deepam02&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/44836&quot;&gt;#44836&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mark (&lt;a href=&quot;https://github.com/Mark-Boger&quot;&gt;@Mark-Boger&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45486&quot;&gt;#45486&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mr SheerLuck (&lt;a href=&quot;https://github.com/MrSheerluck&quot;&gt;@MrSheerluck&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45557&quot;&gt;#45557&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Psychpsyo (Cameron) (&lt;a href=&quot;https://github.com/Psychpsyo&quot;&gt;@Psychpsyo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45494&quot;&gt;#45494&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TusharSariya (&lt;a href=&quot;https://github.com/TusharSariya&quot;&gt;@TusharSariya&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/43663&quot;&gt;#43663&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Adam Sharif (&lt;a href=&quot;https://github.com/adamsharifc&quot;&gt;@adamsharifc&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45551&quot;&gt;#45551&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Akash Ravikumar (&lt;a href=&quot;https://github.com/ak4shravikumar&quot;&gt;@ak4shravikumar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45736&quot;&gt;#45736&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Sean Cunneen (&lt;a href=&quot;https://github.com/alexcat3&quot;&gt;@alexcat3&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45419&quot;&gt;#45419&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Abdul Wahab Melethil Shibu (&lt;a href=&quot;https://github.com/cychronex-labs&quot;&gt;@cychronex-labs&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45880&quot;&gt;#45880&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;darkdragon-001 (&lt;a href=&quot;https://github.com/darkdragon-001&quot;&gt;@darkdragon-001&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45267&quot;&gt;#45267&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Frédéric Wang Nélar (&lt;a href=&quot;https://github.com/fred-wang&quot;&gt;@fred-wang&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45834&quot;&gt;#45834&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fxzjshm (&lt;a href=&quot;https://github.com/fxzjshm&quot;&gt;@fxzjshm&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45285&quot;&gt;#45285&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Piyush Gupta (&lt;a href=&quot;https://github.com/guptapiyush16&quot;&gt;@guptapiyush16&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45845&quot;&gt;#45845&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ivo Murrell (&lt;a href=&quot;https://github.com/ivomurrell&quot;&gt;@ivomurrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45645&quot;&gt;#45645&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;rhit-kapilaar (&lt;a href=&quot;https://github.com/rhit-kapilaar&quot;&gt;@rhit-kapilaar&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45556&quot;&gt;#45556&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sahvx655-wq (&lt;a href=&quot;https://github.com/sahvx655-wq&quot;&gt;@sahvx655-wq&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45510&quot;&gt;#45510&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kagami Sascha Rosylight (&lt;a href=&quot;https://github.com/saschanaz&quot;&gt;@saschanaz&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45731&quot;&gt;#45731&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shangguanmachine-dot (&lt;a href=&quot;https://github.com/shangguanmachine-dot&quot;&gt;@shangguanmachine-dot&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45310&quot;&gt;#45310&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Glenn Skrzypczak (&lt;a href=&quot;https://github.com/skyz1&quot;&gt;@skyz1&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45471&quot;&gt;#45471&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Oskar Steiger (&lt;a href=&quot;https://github.com/steigeo&quot;&gt;@steigeo&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45416&quot;&gt;#45416&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Veyndan Stuart (&lt;a href=&quot;https://github.com/veyndan&quot;&gt;@veyndan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/45326&quot;&gt;#45326&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/twissept/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;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/twissept/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/twissept/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/twissept/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/twissept/blog/2026/06/30/may-in-servo/"/>
    <updated>2026-06-30T00:00:00Z</updated>
    <id>https://servo.org/twissept/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/twissept/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/twissept/img/blog/2026-06-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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, under &lt;code&gt;--pref accessibility_enabled&lt;/code&gt;.
This includes 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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/blog/2026/05/31/april-in-servo/"/>
    <updated>2026-05-31T00:00:00Z</updated>
    <id>https://servo.org/twissept/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/twissept/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/twissept/img/blog/2026-05-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/img/blog/2026-05-android.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/blog/2026/04/30/march-in-servo/"/>
    <updated>2026-04-30T00:00:00Z</updated>
    <id>https://servo.org/twissept/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/twissept/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/twissept/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/twissept/img/blog/2026-04-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/img/blog/2026-04-freebsd.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/img/blog/2026-04-debugger.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/blog/2026/04/13/servo-0.1.0-release/"/>
    <updated>2026-04-13T00:00:00Z</updated>
    <id>https://servo.org/twissept/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/twissept/blog/2026/03/31/february-in-servo/"/>
    <updated>2026-03-31T00:00:00Z</updated>
    <id>https://servo.org/twissept/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/twissept/img/blog/2026-03-diffie.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/img/blog/2026-03-preferences-page.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/img/blog/2026-03-config-page.png&quot;&gt;&lt;img src=&quot;https://servo.org/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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/twissept/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>
</feed>