diff --git a/config.ron b/config.ron
deleted file mode 100644
index 22c6441..0000000
--- a/config.ron
+++ /dev/null
@@ -1,5 +0,0 @@
-(
- lang: Some(De),
- feedback: true,
- theme: Some(Default),
-)
\ No newline at end of file
diff --git a/feeds/linmob.xml b/feeds/linmob.xml
deleted file mode 100644
index 0f56bf8..0000000
--- a/feeds/linmob.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- Liftoff News
- http://liftoff.msfc.nasa.gov/
- Liftoff to Space Exploration.
- en-us
- Tue, 10 Jun 2003 04:00:00 GMT
- Tue, 10 Jun 2003 09:41:01 GMT
- http://blogs.law.harvard.edu/tech/rss
- Weblog Editor 2.0
- editor@example.com
- webmaster@example.com
-
- Star City
- http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp
- How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's <a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm">Star City</a>.
- Tue, 03 Jun 2003 09:39:21 GMT
- http://liftoff.msfc.nasa.gov/2003/06/03.html#item573
-
-
- Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a <a href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm">partial eclipse of the Sun</a> on Saturday, May 31st.
- Fri, 30 May 2003 11:06:42 GMT
- http://liftoff.msfc.nasa.gov/2003/05/30.html#item572
-
-
- The Engine That Does More
- http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp
- Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.
- Tue, 27 May 2003 08:37:32 GMT
- http://liftoff.msfc.nasa.gov/2003/05/27.html#item571
-
-
- Astronauts' Dirty Laundry
- http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp
- Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.
- Tue, 20 May 2003 08:56:02 GMT
- http://liftoff.msfc.nasa.gov/2003/05/20.html#item570
-
-
-
-
-
diff --git a/feeds/servo.xml b/feeds/servo.xml
deleted file mode 100644
index 2edcf97..0000000
--- a/feeds/servo.xml
+++ /dev/null
@@ -1,1264 +0,0 @@
-
-
- Servo Blog
- All the entries in the Servo blog.
-
-
- 2025-03-10T00:00:00Z
- https://servo.org
-
- Servo Team
- info@servo.org
-
-
- This month in Servo: new elements, IME support, delegate API, and more!
-
- 2025-03-10T00:00:00Z
- https://servo.org/blog/2025/03/10/this-month-in-servo/
- <p>Servo now supports more HTML and CSS features:</p>
-<ul>
-<li>the <strong><details></strong> element (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35261">#35261</a>)</li>
-<li>the <strong><meter></strong> element (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35524">#35524</a>)</li>
-<li>the <strong><progress></strong> element (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35531">#35531</a>)</li>
-<li>the <strong>‘quotes’</strong> property (<a href="https://github.com/xiaochengh">@xiaochengh</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34770">#34770</a>, <a href="https://github.com/servo/servo/pull/35420">#35420</a>)</li>
-<li>the <strong>‘isolation’</strong> property (<a href="https://github.com/kkoyung">@kkoyung</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35552">#35552</a>)</li>
-<li><strong>‘overflow: clip’</strong> (<a href="https://github.com/longvatrong111">@longvatrong111</a>, <a href="https://github.com/servo/servo/pull/35103">#35103</a>)</li>
-<li><strong>‘overflow’</strong> property with two values (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35414">#35414</a>)</li>
-<li>the <strong>‘::slotted’</strong> selector (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35352">#35352</a>)</li>
-</ul>
-<figure>
-<p><a href="https://servo.org/img/blog/february-2025.png"><img src="https://servo.org/img/blog/february-2025.png" alt="servoshell showing new support for <details>, <meter>, and <progress> elements, plus layout support for <slot> elements" /></a></p>
-</figure>
-<p>Plus several new web API features:</p>
-<ul>
-<li><strong>contextmenu</strong> events (<a href="https://github.com/pewsheen">@pewsheen</a>, <a href="https://github.com/servo/servo/pull/35364">#35364</a>)</li>
-<li><strong>WritableStream</strong> (<a href="https://github.com/gterzian">@gterzian</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34844">#34844</a>)</li>
-<li><strong>ReadableStreamBYOBRequest</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/35074">#35074</a>)</li>
-<li>initial support for <strong>FontFace</strong> and its <strong>load()</strong> method (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35262">#35262</a>)</li>
-<li><strong>toBlob()</strong> and <strong>toDataURL()</strong> on <strong>WebGPU canvases</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/35237">#35237</a>)</li>
-<li><strong>bytes()</strong> on <strong>Request</strong>, <strong>Response</strong>, and <strong>Blob</strong> (<a href="https://github.com/shanehandley">@shanehandley</a>, <a href="https://github.com/yoseio">@yoseio</a>, <a href="https://github.com/gterzian">@gterzian</a>, <a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/35250">#35250</a>, <a href="https://github.com/servo/servo/pull/35151">#35151</a>)</li>
-<li><strong>href</strong>, <strong>origin</strong>, <strong>protocol</strong>, <strong>username</strong>, <strong>password</strong>, <strong>host</strong>, <strong>hostname</strong>, <strong>port</strong>, <strong>pathname</strong>, <strong>search</strong>, and <strong>hash</strong> properties on <strong>HTMLAreaElement</strong> (<a href="https://github.com/shanehandley">@shanehandley</a>, <a href="https://github.com/servo/servo/pull/35482">#35482</a>)</li>
-<li><strong>insertRule() with no argument</strong> on <strong>CSSGroupingRule</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35295">#35295</a>)</li>
-</ul>
-<p><strong><slot> elements</strong> are now fully supported including layout (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35220">#35220</a>, <a href="https://github.com/servo/servo/pull/35519">#35519</a>), and we’ve also landed support for the <strong>‘::slotted’</strong> selector (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35352">#35352</a>).
-<strong>Shadow roots</strong> are now <strong>supported in devtools</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35294">#35294</a>), and we’ve fixed some bugs related to shadow DOM trees (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35276">#35276</a>, <a href="https://github.com/servo/servo/pull/35338">#35338</a>), event handling (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35380">#35380</a>), and custom elements (<a href="https://github.com/maxtidev">@maxtidev</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/35382">#35382</a>).</p>
-<p>We’ve landed layout improvements around <strong>‘border-collapse’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35219">#35219</a>), <strong>‘align-content: normal’</strong> (<a href="https://github.com/rayguo17">@rayguo17</a>, <a href="https://github.com/servo/servo/pull/35178">#35178</a>), <strong>‘place-self’</strong> with <strong>‘position: absolute’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35208">#35208</a>), the <strong>intrinsic sizing keywords</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35413">#35413</a>, <a href="https://github.com/servo/servo/pull/35469">#35469</a>, <a href="https://github.com/servo/servo/pull/35471">#35471</a>, <a href="https://github.com/servo/servo/pull/35630">#35630</a>, <a href="https://github.com/servo/servo/pull/35642">#35642</a>, <a href="https://github.com/servo/servo/pull/35663">#35663</a>, <a href="https://github.com/servo/servo/pull/35652">#35652</a>, <a href="https://github.com/servo/servo/pull/35688">#35688</a>), and <strong>‘position: absolute’</strong> now works correctly in a <strong>‘position: relative’ grid item</strong> (<a href="https://github.com/stevennovaryo">@stevennovaryo</a>, <a href="https://github.com/servo/servo/pull/35014">#35014</a>).</p>
-<p>Input has also been improved, with <strong>better IME support</strong> (<a href="https://github.com/dklassic">@dklassic</a>, <a href="https://github.com/servo/servo/pull/35535">#35535</a>, <a href="https://github.com/servo/servo/pull/35623">#35623</a>) and several fixes to touch input (<a href="https://github.com/kongbai1996">@kongbai1996</a>, <a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/shubhamg13">@shubhamg13</a>, <a href="https://github.com/servo/servo/pull/35450">#35450</a>, <a href="https://github.com/servo/servo/pull/35031">#35031</a>, <a href="https://github.com/servo/servo/pull/35550">#35550</a>, <a href="https://github.com/servo/servo/pull/35537">#35537</a>, <a href="https://github.com/servo/servo/pull/35692">#35692</a>).</p>
-<h2 id="servo-the-browser-(servoshell)" tabindex="-1">Servo-the-browser (servoshell) <a class="header-anchor" href="https://servo.org/blog/2025/03/10/this-month-in-servo/#servo-the-browser-(servoshell)">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p><strong>Directory listings</strong> are now enabled for local files (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35317">#35317</a>).</p>
-<figure>
-<p><a href="https://servo.org/img/blog/2025-02-directory-listing.png"><img src="https://servo.org/img/blog/2025-02-directory-listing.png" alt="servoshell showing a local directory listing" /></a></p>
-</figure>
-<p>servoshell’s <strong>dialogs now use egui</strong> (<a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/servo/servo/pull/34823">#34823</a>, <a href="https://github.com/servo/servo/pull/35399">#35399</a>, <a href="https://github.com/servo/servo/pull/35464">#35464</a>, <a href="https://github.com/servo/servo/pull/35507">#35507</a>, <a href="https://github.com/servo/servo/pull/35564">#35564</a>, <a href="https://github.com/servo/servo/pull/35577">#35577</a>, <a href="https://github.com/servo/servo/pull/35657">#35657</a>, <a href="https://github.com/servo/servo/pull/35671">#35671</a>), rather than shelling out to a program like <code>zenity</code> (<a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/servo/servo/pull/35674">#35674</a>), making them more secure and no longer falling back to terminal input.</p>
-<figure>
-<p><a href="https://servo.org/img/blog/2025-02-egui-dialogs.png"><img src="https://servo.org/img/blog/2025-02-egui-dialogs.png" alt="egui-based dialogs for alert(), confirm(), prompt(), and HTTP authentication" /></a></p>
-</figure>
-<p>We’ve also fixed a bug when closing a tab other than the current one (<a href="https://github.com/pewsheen">@pewsheen</a>, <a href="https://github.com/servo/servo/pull/35569">#35569</a>).</p>
-<h2 id="servo-the-engine-(embedding)" tabindex="-1">Servo-the-engine (embedding) <a class="header-anchor" href="https://servo.org/blog/2025/03/10/this-month-in-servo/#servo-the-engine-(embedding)">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>We’ve simplified our embedding API by <strong>merging all input event delivery</strong> into <a href="https://doc.servo.org/servo/struct.WebView.html#method.notify_input_event"><code>WebView::notify_input_event</code></a> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35430">#35430</a>), making <strong>bluetooth optional</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35479">#35479</a>, <a href="https://github.com/servo/servo/pull/35590">#35590</a>), making the <strong>“background hang monitor” optional</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/35256">#35256</a>), and <strong>eliminating the need to depend on <code>webxr</code></strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35229">#35229</a>).
-We’ve also moved some servoshell-only options out of <a href="https://doc.servo.org/servo_config/opts/struct.Opts.html"><code>Opts</code></a> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35377">#35377</a>, <a href="https://github.com/servo/servo/pull/35407">#35407</a>), since they have no effect on Servo’s behaviour.</p>
-<p>We’ve landed our initial <strong>delegate-based API</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35196">#35196</a>, <a href="https://github.com/servo/servo/pull/35260">#35260</a>, <a href="https://github.com/servo/servo/pull/35297">#35297</a>, <a href="https://github.com/servo/servo/pull/35396">#35396</a>, <a href="https://github.com/servo/servo/pull/35400">#35400</a>, <a href="https://github.com/servo/servo/pull/35544">#35544</a>, <a href="https://github.com/servo/servo/pull/35579">#35579</a>, <a href="https://github.com/servo/servo/pull/35662">#35662</a>, <a href="https://github.com/servo/servo/pull/35672">#35672</a>), which replaces our old message-based API for integrating Servo with your app (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35284">#35284</a>, <a href="https://github.com/servo/servo/pull/35315">#35315</a>, <a href="https://github.com/servo/servo/pull/35366">#35366</a>).
-By implementing <a href="https://doc.servo.org/servo/trait.WebViewDelegate.html"><code>WebViewDelegate</code></a> and <a href="https://doc.servo.org/servo/trait.ServoDelegate.html"><code>ServoDelegate</code></a> and <a href="https://doc.servo.org/servo/struct.WebView.html#method.set_delegate">installing</a> <a href="https://doc.servo.org/servo/struct.Servo.html#method.set_delegate">them</a>, you can have Servo call back into your app’s logic with ease.</p>
-<p>We’ve simplified the <a href="https://doc.servo.org/servo/trait.RenderingContext.html"><code>RenderingContext</code></a> trait (<a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35251">#35251</a>, <a href="https://github.com/servo/servo/pull/35553">#35553</a>) and <strong>added three built-in <code>RenderingContext</code> impls</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35465">#35465</a>, <a href="https://github.com/servo/servo/pull/35501">#35501</a>), making it easier to set up a context Servo can render to:</p>
-<ul>
-<li><a href="https://doc.servo.org/servo/struct.WindowRenderingContext.html"><code>WindowRenderingContext</code></a> renders to a <strong>whole window</strong></li>
-<li><a href="https://doc.servo.org/servo/struct.OffscreenRenderingContext.html"><code>OffscreenRenderingContext</code></a> renders to <strong>part of a window</strong></li>
-<li><a href="https://doc.servo.org/servo/struct.SoftwareRenderingContext.html"><code>SoftwareRenderingContext</code></a> renders to an image, <strong>without hardware acceleration</strong></li>
-</ul>
-<p>We’ve heavily reworked and documented our <strong>webview rendering model</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35522">#35522</a>, <a href="https://github.com/servo/servo/pull/35621">#35621</a>), <strong>moved image output</strong> and <strong>shutdown logic</strong> out of the compositor (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/servo/servo/pull/35538">#35538</a>), and removed some complicated logic around synchronous repaints when a window is resized (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35283">#35283</a>, <a href="https://github.com/servo/servo/pull/35277">#35277</a>).
-These changes should make it a lot clearer how to get Servo’s webviews onto your display.</p>
-<p>One part of this model that we’re starting to move away from is the support for multiple webviews in one rendering context (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/servo/servo/pull/35536">#35536</a>).
-First landed in <a href="https://github.com/servo/servo/pull/31417">#31417</a>, this was an expedient way to add support for multiple webviews, but it imposed some serious limitations on how webviews could be interleaved with other app content, and the performance and security was inadequate.</p>
-<p>We’ve <strong>updated our <a href="https://github.com/servo/servo/blob/139774e6b55c297bc94f7fcb8c9bf5bb8c6a7474/components/servo/examples/winit_minimal.rs">winit_minimal example</a></strong> to take advantage of these changes (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35350">#35350</a>, <a href="https://github.com/servo/servo/pull/35686">#35686</a>), simplify it further (<a href="https://github.com/robertohuertasm">@robertohuertasm</a>, <a href="https://github.com/servo/servo/pull/35253">#35253</a>), and fix window resizing (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35691">#35691</a>).</p>
-<h2 id="perf-and-stability" tabindex="-1">Perf and stability <a class="header-anchor" href="https://servo.org/blog/2025/03/10/this-month-in-servo/#perf-and-stability">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>The compositor now <strong>notifies the embedder of new frames immediately</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35369">#35369</a>), not via the constellation thread.</p>
-<p>Servo’s typical <strong>memory usage has been reduced by over 1%</strong> thanks to Node object optimisations (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35592">#35592</a>, <a href="https://github.com/servo/servo/pull/35554">#35554</a>), and we’ve also improved our <a href="https://book.servo.org/hacking/profiling.html#memory-profiling">memory profiler</a> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35618">#35618</a>, <a href="https://github.com/servo/servo/pull/35607">#35607</a>).</p>
-<p>We’ve fixed a bug causing very high CPU usage on sites like <a href="http://wikipedia.org/">wikipedia.org</a> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35245">#35245</a>), as well as bugs affecting requestAnimationFrame (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35387">#35387</a>, <a href="https://github.com/servo/servo/pull/35435">#35435</a>).</p>
-<p>You can now configure our tracing-based profiler (<code>--features tracing</code>) with <code>servo --tracing-filter</code> instead of <code>SERVO_TRACING</code> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/35370">#35370</a>).</p>
-<p>We’ve continued <strong>reducing our use of <code>unsafe</code> in script</strong> (<a href="https://github.com/nscaife">@nscaife</a>, <a href="https://github.com/stephenmuss">@stephenmuss</a>, <a href="https://github.com/servo/servo/pull/35351">#35351</a>, <a href="https://github.com/servo/servo/pull/35360">#35360</a>, <a href="https://github.com/servo/servo/pull/35367">#35367</a>, <a href="https://github.com/servo/servo/pull/35411">#35411</a>), and <strong>moving parts of <code>script</code> to <code>script_bindings</code></strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/35279">#35279</a>, <a href="https://github.com/servo/servo/pull/35280">#35280</a>, <a href="https://github.com/servo/servo/pull/35292">#35292</a>, <a href="https://github.com/servo/servo/pull/35457">#35457</a>, <a href="https://github.com/servo/servo/pull/35459">#35459</a>, <a href="https://github.com/servo/servo/pull/35578">#35578</a>, <a href="https://github.com/servo/servo/pull/35620">#35620</a>).
-Breaking up our massive <code>script</code> crate is absolutely critical for reducing Servo’s build times.</p>
-<p>We’ve fixed crashes that happen when moving windows past the edge of your monitor (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35235">#35235</a>), when unpaired UTF-16 surrogates are sent to the DOM (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35381">#35381</a>), when focusing elements inside shadow roots (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35606">#35606</a>), and when calling getAsString() on a DataTransferItem (<a href="https://github.com/Gae24">@Gae24</a>, <a href="https://github.com/servo/servo/pull/35699">#35699</a>).
-We’ve also continued working on static analysis that will help catch crashes due to <a href="https://github.com/servo/servo/issues/33140">GC borrow hazards</a> (<a href="https://github.com/augustebaum">@augustebaum</a>, <a href="https://github.com/yerke">@yerke</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/Gae24">@Gae24</a>, <a href="https://github.com/servo/servo/pull/35541">#35541</a>, <a href="https://github.com/servo/servo/pull/35593">#35593</a>, <a href="https://github.com/servo/servo/pull/35565">#35565</a>, <a href="https://github.com/servo/servo/pull/35610">#35610</a>, <a href="https://github.com/servo/servo/pull/35591">#35591</a>, <a href="https://github.com/servo/servo/pull/35609">#35609</a>, <a href="https://github.com/servo/servo/pull/35601">#35601</a>, <a href="https://github.com/servo/servo/pull/35596">#35596</a>, <a href="https://github.com/servo/servo/pull/35595">#35595</a>, <a href="https://github.com/servo/servo/pull/35594">#35594</a>, <a href="https://github.com/servo/servo/pull/35597">#35597</a>, <a href="https://github.com/servo/servo/pull/35622">#35622</a>, <a href="https://github.com/servo/servo/pull/35604">#35604</a>, <a href="https://github.com/servo/servo/pull/35616">#35616</a>, <a href="https://github.com/servo/servo/pull/35605">#35605</a>, <a href="https://github.com/servo/servo/pull/35640">#35640</a>, <a href="https://github.com/servo/servo/pull/35647">#35647</a>, <a href="https://github.com/servo/servo/pull/35646">#35646</a>).</p>
-<h2 id="donations" tabindex="-1">Donations <a class="header-anchor" href="https://servo.org/blog/2025/03/10/this-month-in-servo/#donations">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Thanks again for your generous support!
-We are now receiving <strong>4363 USD/month</strong> (+13.7% over January) in recurring donations.
-This helps cover the cost of our <a href="https://ci0.servo.org/">self-hosted</a> <a href="https://ci1.servo.org/">CI</a> <a href="https://ci2.servo.org/">runners</a> and <a href="https://www.outreachy.org/">Outreachy</a> internships.</p>
-<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>21 GitHub users</strong> (+5 over January) that depend on Servo are sponsoring us there.
-If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
-<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
- <div style="position: relative; text-align: right;">
- <div style="position: absolute; margin-left: calc(100% * 4363 / 10000); padding-left: 0.5em;"><strong>4363</strong> USD/month</div>
- <div style="position: absolute; margin-left: calc(100% * 4363 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
- </div>
- <progress value="4363" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
-</div></figure>
-<p>As always, use of these funds will be decided transparently in the Technical Steering Committee.
-For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>
-<style>
- ._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;
- }
-</style>
-
-
-
- Servo Security Report: findings and solutions
-
- 2025-02-26T00:00:00Z
- https://servo.org/blog/2025/02/26/servo-security-report/
- <p>The Servo project has received several grants from <a href="https://nlnet.nl/"><strong>NLnet Foundation</strong></a>, and as part of these grants, NLnet offers different <a href="https://nlnet.nl/NGI0/services/">support services</a>. These services include security audits from <a href="https://radicallyopensecurity.com/"><strong>Radically Open Security</strong></a>.</p>
-<p>In one of our projects with NLnet, we were working on <a href="https://nlnet.nl/project/Servo/">adding support for <strong>CSS floats</strong> and <strong>tables</strong></a> in Servo. Once the project was completed, we reached out to Radically Open Security to run a security audit. The focus of the audit was in the code related to that project, so the main components investigated were the CSS code paths in the layout engine and Stylo. As part of this audit, four vulnerabilities were identified:</p>
-<table>
-<thead>
-<tr>
-<th>ID</th>
-<th>Type</th>
-<th>Description</th>
-<th><a href="http://www.pentest-standard.org/index.php/Reporting">Threat level</a></th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td><code>CLN-009</code></td>
-<td>Third-Party Library Vulnerability</td>
-<td>Servo uses an outdated version of the time crate that is vulnerable to a known issue.</td>
-<td>Moderate</td>
-</tr>
-<tr>
-<td><code>CLN-004</code></td>
-<td>Arithmetic underflow</td>
-<td>By calling methods on a TableBuilder object in a specific order, an integer underflow can be triggered, followed by an attempted out-of-bounds access, which is caught by Rust, resulting in a panic.</td>
-<td>Low</td>
-</tr>
-<tr>
-<td><code>CLN-002</code></td>
-<td>Arithmetic underflow</td>
-<td>An arithmetic underflow condition is currently impossible to trigger, but may become accessible as its surrounding logic evolves.</td>
-<td>N/A</td>
-</tr>
-<tr>
-<td><code>CLN-007</code></td>
-<td>Unguarded casting</td>
-<td>Casting from an unsigned platform pointer-width integer into a fixed-width signed integer may result in erroneous layouts.</td>
-<td>N/A</td>
-</tr>
-</tbody>
-</table>
-<p>If you want to know more details you can read the <a href="https://servo.org/files/ngie-servo-penetration-test-report-2024-1.0.pdf"><strong>full report</strong></a>.</p>
-<p>The first issue (<code>CLN-009</code>) was related to a known vulnerability in version 0.1 of the <code>time</code> crate that Servo depended on (<a href="https://rustsec.org/advisories/RUSTSEC-2020-0071"><code>RUSTSEC-2020-0071</code></a>). We had <a href="https://github.com/servo/servo/pulls?q=is%3Apr+merged%3A%3E%3D2023-10-26+in%3Atitle++%28+%22time%400.1%22+OR+%22legacy+time%22+OR+%22time+crate%22+OR+%22stop+using+time%22+OR+%22std%3A%3Atime%22+%29+">removed this in most of Servo</a>, but there was one remaining dependency in WebRender. We have since addressed this vulnerability by removing it from the version of WebRender used in Servo (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35325">#35325</a>), and we will also try to upstream our changes so that Firefox is unaffected.</p>
-<p>We have also fixed the second (<code>CLN-004</code>) and third (<code>CLN-002</code>) issues by making the affected code more robust (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34247">#34247</a>, <a href="https://github.com/servo/servo/pull/35437">#35437</a>), in the event web content can trigger them.</p>
-<p>The fourth issue (<code>CLN-007</code>) is not urgent, since the values are constrained elsewhere and it would otherwise only affect layout correctness and not security, but it’s worth fixing at some point too.</p>
-<p>Servo has long been highlighted for being <strong>a memory-safe and concurrency-safe web rendering engine</strong>, thanks to the guarantees provided by the Rust programming language, including its ownership system, borrow checker, and built-in data structures that enable safe concurrent programming. These features help prevent memory and concurrency vulnerabilities, such as use-after-free bugs and data races.</p>
-<p>We find it promising that this security audit, although smaller and of limited scope, <strong>identified no severe vulnerabilities</strong>, especially none of that nature, and that we were able to address any vulnerabilities identified. This was a positive experience for Servo and the web, and we’re keen to explore more security auditing for Servo in the future.</p>
-<p>Thanks to the folks at <a href="https://radicallyopensecurity.com/">Radically Open Security</a> for their work on this audit, and <a href="https://nlnet.nl/">NLnet Foundation</a> for continuously supporting the Servo project.</p>
-
-
-
- This month in Servo: new webview API, relative colors, canvas buffs, and more!
-
- 2025-02-19T00:00:00Z
- https://servo.org/blog/2025/02/19/this-month-in-servo/
- <p>Servo now supports several new web API features:</p>
-<ul>
-<li><strong>:host selector</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34870">#34870</a>)</li>
-<li><strong><slot> elements</strong> in the DOM (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35013">#35013</a>, <a href="https://github.com/servo/servo/pull/35177">#35177</a>, <a href="https://github.com/servo/servo/pull/35191">#35191</a>, <a href="https://github.com/servo/servo/pull/35221">#35221</a>, <a href="https://github.com/servo/servo/pull/35137">#35137</a>, <a href="https://github.com/servo/servo/pull/35222">#35222</a>), with layout support landing next month</li>
-<li><strong>Relative CSS colors</strong>, like <strong>color(from …)</strong> and <strong>rgb(from …)</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34897">#34897</a>)</li>
-<li><strong>ClipboardEvent</strong> (<a href="https://github.com/Gae24">@Gae24</a>, <a href="https://github.com/servo/servo/pull/33576">#33576</a>, <a href="https://github.com/servo/servo/pull/35146">#35146</a>), with <code>--pref dom_clipboardevent_enabled</code></li>
-<li>Detecting WGSL extensions via <strong>WGSLLanguageFeatures</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/34928">#34928</a>)</li>
-<li><strong>pointer_composite_access</strong> WGSL extension (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/35161">#35161</a>)</li>
-<li><strong>blitFramebuffer()</strong> on <strong>WebGL2RenderingContext</strong> (<a href="https://github.com/jdm">@jdm</a>, Istvan, <a href="https://github.com/servo/servo/pull/26389">#26389</a>)</li>
-<li><strong>media</strong> property on <strong>HTMLStyleElement</strong> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/35148">#35148</a>)</li>
-</ul>
-<p>We’ve landed a bunch of <strong>HTMLCanvasElement</strong> improvements:</p>
-<ul>
-<li><strong>toDataURL()</strong> now supports <strong>image/jpeg</strong> and <strong>image/webp</strong> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/34861">#34861</a>)</li>
-<li><strong>toBlob()</strong> is now supported (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/34938">#34938</a>)</li>
-<li><strong>transferControlToOffscreen()</strong> is now supported (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/34959">#34959</a>)</li>
-</ul>
-<figure style="display: flex; justify-content: center;">
- <a href="https://servo.org/img/blog/january-2025.png"><img src="https://servo.org/img/blog/january-2025.png" alt="servoshell nightly showing relative oklch() colors, canvas toDataURL() with image/jpeg and image/webp, canvas toBlob(), the WGSLLanguageFeatures API, and the DOM tree of a custom element with a <slot>" /></a>
-</figure>
-<p><strong>Streams</strong> are a lot more useful now, with <strong>ReadableStreamBYOBReader</strong> now supporting <strong>read()</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/35040">#35040</a>), <strong>cancel()</strong>, <strong>close()</strong>, and <strong>releaseLock()</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/34958">#34958</a>).</p>
-<p>Servo now <strong>passes <a href="https://wpt.servo.org/">40.6%</a></strong> (+7.5pp) of enabled <strong>Shadow DOM</strong> tests, thanks to our landing support for the <strong>:host selector</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34870">#34870</a>) and the <strong><slot> element</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/35013">#35013</a>, <a href="https://github.com/servo/servo/pull/35177">#35177</a>, <a href="https://github.com/servo/servo/pull/35191">#35191</a>, <a href="https://github.com/servo/servo/pull/35221">#35221</a>, <a href="https://github.com/servo/servo/pull/35137">#35137</a>, <a href="https://github.com/servo/servo/pull/35222">#35222</a>), plus improvements to event handling (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34788">#34788</a>, <a href="https://github.com/servo/servo/pull/34884">#34884</a>), script (<a href="https://github.com/willypuzzle">@willypuzzle</a>, <a href="https://github.com/servo/servo/pull/34787">#34787</a>), style (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/35198">#35198</a>, <a href="https://github.com/servo/servo/pull/35132">#35132</a>), and the DOM tree (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/34803">#34803</a>, <a href="https://github.com/servo/servo/pull/34834">#34834</a>, <a href="https://github.com/servo/servo/pull/34863">#34863</a>, <a href="https://github.com/servo/servo/pull/34909">#34909</a>, <a href="https://github.com/servo/servo/pull/35076">#35076</a>).</p>
-<p><strong>Table layout</strong> is significantly better now, particularly in ‘table-layout: fixed’ (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35170">#35170</a>), table sizing (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34889">#34889</a>, <a href="https://github.com/servo/servo/pull/34947">#34947</a>, <a href="https://github.com/servo/servo/pull/35167">#35167</a>), rowspan sizing (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35095">#35095</a>), interaction with floats (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/35207">#35207</a>), and ‘border-collapse’ layout (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34932">#34932</a>, <a href="https://github.com/servo/servo/pull/34908">#34908</a>, <a href="https://github.com/servo/servo/pull/35097">#35097</a>, <a href="https://github.com/servo/servo/pull/35122">#35122</a>, <a href="https://github.com/servo/servo/pull/35165">#35165</a>) and painting (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34933">#34933</a>, <a href="https://github.com/servo/servo/pull/35003">#35003</a>, <a href="https://github.com/servo/servo/pull/35100">#35100</a>, <a href="https://github.com/servo/servo/pull/35075">#35075</a>, <a href="https://github.com/servo/servo/pull/35129">#35129</a>, <a href="https://github.com/servo/servo/pull/35163">#35163</a>).</p>
-<p>As a result, Servo now <strong>passes <a href="https://wpt.servo.org/">90.2%</a></strong> (+11.5pp) of enabled <strong>CSS tables</strong> tests, and of the tests that are in CSS 2, we now <a href="https://wpt.fyi/results/css/CSS2/tables?sha=d46d9abdea&max-count=1&to=2025-02-01T00%3A00%3A00.000Z&product=servo&product=chrome&product=safari&product=firefox"><strong>pass more than Blink and WebKit!</strong></a>
-We literally stood on the shoulders of giants here, because this would not have been possible without <a href="https://github.com/servo/servo/blob/3122de08f3571a4026e825dd3ef6412cb37abfae/components/layout_2020/table/mod.rs#L8-L11">Blink’s</a> <a href="https://github.com/servo/servo/blob/3122de08f3571a4026e825dd3ef6412cb37abfae/components/layout_2020/table/layout.rs#L650-L654">robust</a> <a href="https://github.com/servo/servo/blob/3122de08f3571a4026e825dd3ef6412cb37abfae/components/layout_2020/table/layout.rs#L1246-L1248">table</a> <a href="https://github.com/servo/servo/blob/3122de08f3571a4026e825dd3ef6412cb37abfae/components/layout_2020/table/layout.rs#L1332-L1333">impl</a>.
-Despite their age, <a href="https://github.com/w3c/csswg-drafts/issues/9781">tables</a> <a href="https://github.com/w3c/csswg-drafts/issues/9916">are</a> <a href="https://github.com/w3c/csswg-drafts/issues/10132">surprisingly</a> <a href="https://github.com/w3c/csswg-drafts/issues/10133">underspecified</a>, <a href="https://github.com/w3c/csswg-drafts/issues/10881">so</a> <a href="https://github.com/w3c/csswg-drafts/issues/10885">we</a> <a href="https://github.com/w3c/csswg-drafts/issues/10937">also</a> <a href="https://github.com/w3c/csswg-drafts/issues/11171">needed</a> <a href="https://github.com/w3c/csswg-drafts/issues/11404">to</a> <a href="https://github.com/w3c/csswg-drafts/issues/11408">report</a> <a href="https://github.com/w3c/csswg-drafts/issues/11419">several</a> <a href="https://github.com/w3c/csswg-drafts/issues/11489">spec</a> <a href="https://github.com/w3c/csswg-drafts/issues/11504">issues</a> <a href="https://github.com/w3c/csswg-drafts/issues/11515">along</a> <a href="https://github.com/w3c/csswg-drafts/issues/11568">the</a> <a href="https://github.com/w3c/csswg-drafts/issues/11570">way</a> (<a href="https://github.com/Loirooriol">@Loirooriol</a>).</p>
-<h2 id="embedding" tabindex="-1">Embedding <a class="header-anchor" href="https://servo.org/blog/2025/02/19/this-month-in-servo/#embedding">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Servo aims to be an embeddable web engine, but so far it’s been a lot harder to embed Servo than it should be.</p>
-<p>For one, configuring and starting Servo is complicated.
-We found that getting Servo running at all, even without wiring up input or handling resizes correctly, took <strong>over 200 lines</strong> of Rust code (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35118">#35118</a>).
-Embedders (apps) could only control Servo by sending and receiving a variety of “messages” and “events”, and simple questions like “what’s the current URL?” were impossible to answer without keeping track of extra state in the app.</p>
-<p>Contrast this with <a href="https://webkitgtk.org/">WebKitGTK</a>, where you can write a minimal kiosk app with a fully-functional webview in <strong>under 50 lines</strong> of C.
-To close that gap, we’ve started <strong>reworking our embedding API</strong> towards something more idiomatic and ergonomic, starting with the concept embedders care about most: the <em>webview</em>.</p>
-<p>Our new webview API is controlled by calling methods on a <strong><a href="https://doc.servo.org/servo/struct.WebView.html">WebView</a> handle</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35119">#35119</a>, <a href="https://github.com/servo/servo/pull/35183">#35183</a>, <a href="https://github.com/servo/servo/pull/35192">#35192</a>), including navigation and user input.
-Handles will eventually represent the lifecycle of the webview itself; if you have one, the webview is valid, and if you drop them, the webview is destroyed.</p>
-<p>Servo needs to call into the embedder too, and here we’ve started replacing the old EmbedderMsg API with a <strong>webview delegate</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35211">#35211</a>), much like the delegates in <a href="https://developer.apple.com/documentation/webkit/wkuidelegate?language=objc">Apple’s WebKit API</a>.
-In Rust, a delegate is a <code>trait</code> that the embedder can install its own <code>impl</code> for.
-Stay tuned for more on this next month!</p>
-<p>Embedders can now <strong>intercept any request</strong>, not just navigation (<a href="https://github.com/zhuhaichao518">@zhuhaichao518</a>, <a href="https://github.com/servo/servo/pull/34961">#34961</a>), and you can now identify the webview that caused an <strong>HTTP credentials prompt</strong> (<a href="https://github.com/pewsheen">@pewsheen</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34808">#34808</a>).</p>
-<p>Other embedding improvements include:</p>
-<ul>
-<li>Adding a trait to allow for alternative rendering contexts that are better suited to certain applications (<a href="https://github.com/dklassic">@dklassic</a>, <a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/servo/servo/pull/35052">#35052</a>, <a href="https://github.com/servo/servo/pull/34813">#34813</a>, <a href="https://github.com/servo/servo/pull/34780">#34780</a>)</li>
-<li>Simplifying types used by consumers of libservo (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35156">#35156</a>)</li>
-<li>Making it easier to build Servo without crown (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/35055">#35055</a>)</li>
-</ul>
-<h2 id="other-changes" tabindex="-1">Other changes <a class="header-anchor" href="https://servo.org/blog/2025/02/19/this-month-in-servo/#other-changes">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>We’ve reworked Servo’s <strong>preferences system</strong>, making all prefs optional with reasonable defaults (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34966">#34966</a>, <a href="https://github.com/servo/servo/pull/34999">#34999</a>, <a href="https://github.com/servo/servo/pull/34994">#34994</a>).
-As a result:</p>
-<ul>
-<li><strong>The names of all preferences have changed</strong>; see the <a href="https://doc.servo.org/servo_config/prefs/struct.Preferences.html">Prefs docs</a> for a list</li>
-<li><strong>Embedders no longer need a <code>prefs.json</code></strong> resource to get Servo running</li>
-<li>Some debug options were converted to preferences (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34998">#34998</a>)</li>
-</ul>
-<p>Devtools now <strong>highlights console.log() arguments</strong> according to their types (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34810">#34810</a>).</p>
-<p>Servo’s networking is more efficient now, with the ability to <strong>cancel fetches for navigation</strong> that contain redirects (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34919">#34919</a>) and <strong>cancel fetches for <video> and <media></strong> when the document is unloaded (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34883">#34883</a>).
-Those changes also <strong>eliminate per-request IPC channels</strong> for navigation and cancellation respectively, and in the same vein, we’ve eliminated them for image loading too (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/35041">#35041</a>).</p>
-<p>We’ve continued <strong>splitting up our massive script crate</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34359">#34359</a>, <a href="https://github.com/servo/servo/pull/35157">#35157</a>, <a href="https://github.com/servo/servo/pull/35169">#35169</a>, <a href="https://github.com/servo/servo/pull/35172">#35172</a>), which will eventually make Servo much faster to build.</p>
-<p>A few crashes have been fixed, including when exiting Servo (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/34917">#34917</a>), when using the <a href="https://book.servo.org/hacking/profiling.html#memory-profiling">internal memory profiler</a> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/35058">#35058</a>), and when running ResizeObserver callbacks (<a href="https://github.com/willypuzzle">@willypuzzle</a>, <a href="https://github.com/servo/servo/pull/35168">#35168</a>).</p>
-<h2 id="for-developers" tabindex="-1">For developers <a class="header-anchor" href="https://servo.org/blog/2025/02/19/this-month-in-servo/#for-developers">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>We now run <strong>CI smoketests on OpenHarmony</strong> using a real device (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/35006">#35006</a>), increasing confidence in your changes beyond compile-time errors.</p>
-<p>We’ve also tripled our <strong>self-hosted CI runner capacity</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34983">#34983</a>, <a href="https://github.com/servo/servo/pull/35002">#35002</a>), making concurrent Windows and macOS builds possible without falling back to the much slower GitHub-hosted runners.</p>
-<p>Servo can’t yet run WebDriver-based tests on <a href="https://wpt.fyi/">wpt.fyi</a>, <a href="https://wpt.servo.org/">wpt.servo.org</a>, or CI, because the <code>servo</code> executor for the <a href="https://web-platform-tests.org/">Web Platform Tests</a> does not support testdriver.js.
-<code>servodriver</code> does, though, so we’ve started fixing test regressions with that executor with the goal of eventually switching to it (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34957">#34957</a>, <a href="https://github.com/servo/servo/pull/34997">#34997</a>).</p>
-<h2 id="donations" tabindex="-1">Donations <a class="header-anchor" href="https://servo.org/blog/2025/02/19/this-month-in-servo/#donations">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Thanks again for your generous support!
-We are now receiving <strong>3835 USD/month</strong> (−11.4% over December) in recurring donations.
-With this money, we’ve been able to expand our capacity for <a href="https://ci0.servo.org/">self-hosted</a> <a href="https://ci1.servo.org/">CI</a> <a href="https://ci2.servo.org/">runners</a> on Windows, Linux, and macOS builds, <strong>halving <code>mach try</code> build times</strong> from over an hour to under 30 minutes!</p>
-<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>21 GitHub users</strong> (+5 over December) that depend on Servo are sponsoring us there.
-If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
-<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
- <div style="position: relative; text-align: right;">
- <div style="position: absolute; margin-left: calc(100% * 3835 / 10000); padding-left: 0.5em;"><strong>3835</strong> USD/month</div>
- <div style="position: absolute; margin-left: calc(100% * 3835 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
- </div>
- <progress value="3835" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
-</div></figure>
-<p>As always, use of these funds will be decided transparently in the Technical Steering Committee.
-For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>
-<h2 id="conference-talks" tabindex="-1">Conference talks <a class="header-anchor" href="https://servo.org/blog/2025/02/19/this-month-in-servo/#conference-talks">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<ul>
-<li><a href="https://www.youtube.com/watch?v=s0MIHKv45C0"><strong>Why Build a New Browser Engine in Rust?</strong></a> (<a href="https://servo.org/slides/2025-01-21-barcelona-free-software/">slides</a>) — <a href="https://abandonedwig.info/">Martin Robinson</a> spoke about Servo’s unique benefits as a Rust-based browser and web engine, and how browser diversity can create a new renaissance for the web platform</li>
-</ul>
-<style>
- .content {
- container-type: inline-size;
- }
- ._paired_figure {
- margin: 1em 0;
- }
- @container (min-width: 55em) {
- ._paired_figure {
- display: grid;
- grid-template-columns: auto 33em;
- column-gap: 2em;
- row-gap: 1em;
- }
- ._paired_figure > ._text_before,
- ._paired_figure > ._text_after {
- flex: 1 1 20em;
- grid-column: 1 / 2;
- }
- ._paired_figure > figure:not(#specificity) {
- flex: 0 1 33em;
- grid-row: 1 / 3;
- grid-column: 2 / 3;
- margin: 0;
- }
- }
-
- ._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;
- }
-</style>
-
-
-
- Servo in 2024: stats, features and donations
-
- 2025-01-31T00:00:00Z
- https://servo.org/blog/2025/01/31/servo-in-2024/
- <!--
- TIP: `eleventyConfig.setServerOptions({domDiff: false})` for this post!
- Otherwise the charts will break when reloading your changes.
--->
-<p>Two years after the <a href="https://servo.org/blog/2023/01/16/servo-2023/">renewed activity</a> on the project we can confirm that Servo is fully back.</p>
-<p>If we ignore the bots, in 2024 we’ve had <strong>129 unique contributors</strong> (+143% over 54 last year), <strong>landing 1,771 pull requests</strong> (+163% over 673), and that’s just in <a href="https://github.com/servo/servo">our main repo</a>!</p>
-<p>Including bots, the total number of PRs merged goes up to <strong>2,674</strong> (+144% over 1094). From all this work, 26% of the PRs were made by Igalia, 40% by other contributors and the rest by the bots (34%). This shows how the Servo community has been growing and becoming more diverse with new actors participating actively in the project.</p>
-<p><canvas id="servoStats" style="min-height: 400px;"></canvas></p>
-<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
-<script>
- const ctx = document.getElementById("servoStats");
-
-
- new Chart(ctx, {
- type: "bar",
- data: {
- labels: ["2018", "2019", "2020", "2021", "2022", "2023", "2024"],
- datasets: [{
- label: "Merged PRs",
- data: [1188, 986, 669, 118, 65, 776, 1771],
- borderWidth: 2
- }, {
- label: "Unique contributors",
- data: [142, 141, 87, 37, 20, 54, 129],
- borderWidth: 2,
- type: "line",
- yAxisID: "y1"
- }, {
- label: "Average unique contributors per month",
- data: [27.33, 27.17, 14.75, 4.92, 2.83, 11.33, 26.33],
- borderWidth: 2,
- type: "line",
- yAxisID: "y1"
- }]
- },
- options: {
- responsive: true,
- maintainAspectRatio: false,
- scales: {
- y: {
- beginAtZero: true
- },
- y1: {
- position: "right",
- grid: {
- drawOnChartArea: false
- },
- }
- },
- plugins: {
- title: {
- display: true,
- text: "Servo Stats 2018 - 2024",
- font: {
- size: "20pt",
- }
- },
- subtitle: {
- display: true,
- text: "PRs left axis - Contributors right axis",
- },
- legend: {
- position: "bottom",
- }
- }
- }
- });
-</script>
-<figure class="_stats_table">
-<table style="margin-inline: auto;">
-<thead>
- <tr>
- <th></th>
- <th style="text-align:right">2018</th>
- <th style="text-align:right">2019</th>
- <th style="text-align:right">2020</th>
- <th style="text-align:right">2021</th>
- <th style="text-align:right">2022</th>
- <th style="text-align:right">2023</th>
- <th style="text-align:right">2024</th>
- </tr>
-</thead>
-<tbody>
- <tr>
- <td><strong>Merged PRs</strong></td>
- <td style="text-align:right">1,188</td>
- <td style="text-align:right">986</td>
- <td style="text-align:right">669</td>
- <td style="text-align:right">118</td>
- <td style="text-align:right">65</td>
- <td style="text-align:right">776</td>
- <td style="text-align:right">1,771</td>
- </tr>
- <tr>
- <td><strong>Unique contributors</strong></td>
- <td style="text-align:right">142</td>
- <td style="text-align:right">141</td>
- <td style="text-align:right">87</td>
- <td style="text-align:right">37</td>
- <td style="text-align:right">20</td>
- <td style="text-align:right">54</td>
- <td style="text-align:right">129</td>
- </tr>
- <tr>
- <td><strong>Average unique contributors per month</strong></td>
- <td style="text-align:right">27.33</td>
- <td style="text-align:right">27.17</td>
- <td style="text-align:right">14.75</td>
- <td style="text-align:right">4.92</td>
- <td style="text-align:right">2.83</td>
- <td style="text-align:right">11.33</td>
- <td style="text-align:right">26.33</td>
-</tr>
-</tbody>
-</table>
-</figure>
-<style>
- ._stats_table {
- overflow-x: auto;
- margin-block: 1em;
- }
- ._stats_table tr > *:nth-child(1) {
- /* Freeze the first cell of each row. */
- position: sticky;
- left: 0;
- /* Hide other cells that overlap when scrolling. */
- background:lch(91 8.22 196.44);
- z-index: 1;
- }
-</style>
-<p>Now let’s take a look to the data and chart above, which show the evolution since 2018 in number of merged PRs, unique contributors per year and average contributors per month (excluding bots). We can see <strong>the project is back to numbers of 2018 and 2019 when it was been developed in full speed</strong>!</p>
-<p>It’s worth noting that Servo popularity keeps growing, with many folks realizing there has been new activity on the project last year, and we have more and more people interested in the project.</p>
-<figure><a href="https://star-history.com/#servo/servo"><img src="https://servo.org/img/blog/2025-01-servo-github-stars.png" style="width: 60ch;" alt="Servo GitHub start history chart showing Servo not stopping going up since 2013, up to more than 25,000 today" /></a>
- <figcaption>Servo GitHub stars haven't stopped growing, surpassing now 25K threshold.</figcaption>
-</figure>
-<p>During 2024 Servo has been present in <strong>8 events with 9 talks</strong>: <a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2321-embedding-servo-in-rust-projects/">FOSDEM</a>, <a href="https://youtu.be/RdtlD_7JAs8">Open Source Summit North America</a>, <a href="https://servo.org/slides/2024-04-16-seattle-rust-user-group/">Seattle Rust user meetup</a>, <a href="https://www.youtube.com/watch?v=EA_1jxzR85M">GOSIM Europe</a>, <a href="https://www.youtube.com/watch?v=SamA5Oz-G5w">Global Software Technology Summit</a>, <a href="https://www.youtube.com/watch?v=NHa4LPpWRh8&t=1351s">Linux Foundation Europe Member Summit</a>, <a href="https://www.youtube.com/watch?v=gpz088cxDcI">GOSIM</a> <a href="https://www.youtube.com/watch?v=1c9sHaEXQak">China</a>, <a href="https://www.youtube.com/watch?v=fp5n7CSvALA">Ubuntu Summit</a>.</p>
-<p>If we focus on development there has been many things moving forward during the year. Servo main dependencies (SpiderMonkey, Stylo and WebRender) have been upgraded, the new layout engine has kept evolving adding support for floats, tables, flexbox, fonts, etc. By the end of 2024 <a href="https://staging.wpt.fyi/results/?sha=58c1148991&label=master&max-count=1&product=servo"><strong>Servo passes 1,515,229 WPT subtests (79%)</strong></a>. Many other new features have been under active development: WebGPU, Shadow DOM, ReadableStream, WebXR, … Servo now supports two new platforms: Android and OpenHarmony. And we have got the first experiments of applications using Servo as a web engine (like <a href="https://servo.org/blog/2024/01/19/embedding-update/">Tauri</a>, <a href="https://github.com/DioxusLabs/blitz">Blitz</a>, <a href="https://github.com/KDABLabs/cxx-qt-servo-webview">QtWebView</a>, <a href="https://github.com/mcclure/cuervo/tree/unstable_traversal_experiment">Cuervo</a>, <a href="https://github.com/versotile-org/verso/">Verso</a> and <a href="https://github.com/moto-browser/moto">Moto</a>).</p>
-<p>In 2024 we have <strong>raised 33,632.64 USD</strong> with <a href="https://servo.org/sponsorship/">donations via Open Collective and GitHub Sponsors</a> from <strong>500 different people and organizations</strong>. Thank you all for supporting us!</p>
-<p>With this money we have now 3 servers that provides self-hosted runners for Linux, macOS, and Windows reducing our build times <strong>from over an hour to under 30 minutes</strong>.</p>
-<p>Talking about the future, the Servo TSC has been discussing the <a href="https://github.com/servo/servo/wiki/Roadmap"><strong>roadmap for 2025</strong></a> which has been updated on the Servo’s wiki. We have many plans to keep Servo thriving with new features and improvements. Let’s hope for a great 2025!</p>
-
-
-
- This month in Servo: dark mode, keyword sizes, XPath, and more!
-
- 2025-01-10T00:00:00Z
- https://servo.org/blog/2025/01/10/this-month-in-servo/
- <p>Servo now supports <strong>dark mode</strong> (<a href="https://github.com/arthmis">@arthmis</a>, <a href="https://github.com/lazypassion">@lazypassion</a>, <a href="https://github.com/servo/servo/pull/34532">#34532</a>), respecting the platform dark mode in servoshell and <strong>‘prefers-color-scheme’</strong> (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/servo/servo/pull/34423">#34423</a>, <a href="https://github.com/servo/stylo/pull/93">stylo#93</a>) on Windows and macOS.</p>
-<figure>
- <div style="display: flex;">
- <a href="https://servo.org/img/blog/dark-mode-december-2024.png"><img src="https://servo.org/img/blog/dark-mode-december-2024.png" alt="servoshell in dark mode, rendering the MDN article for ‘prefers-color-scheme’ in dark mode, when Windows is set to dark mode" /></a>
- <a href="https://servo.org/img/blog/light-mode-december-2024.png"><img src="https://servo.org/img/blog/light-mode-december-2024.png" alt="servoshell in light mode, rendering the MDN article for ‘prefers-color-scheme’ in light mode, when Windows is set to light mode" /></a>
- </div>
- <figcaption><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme">MDN article for ‘prefers-color-scheme’</a> in dark mode (left) and light mode (right), with <code>--pref dom.resize_observer.enabled</code>.</figcaption>
-</figure>
-<p><strong>CSS transitions</strong> can now be triggered properly by script (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34486">#34486</a>), and we now support <strong>‘min-height’</strong> and <strong>‘max-height’</strong> on column flex containers (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34450">#34450</a>), <strong>‘min-content’</strong>, <strong>‘max-content’</strong>, <strong>‘fit-content’</strong>, and <strong>‘stretch’</strong> in block layout (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34641">#34641</a>, <a href="https://github.com/servo/servo/pull/34568">#34568</a>, <a href="https://github.com/servo/servo/pull/34695">#34695</a>), <strong>‘stretch’</strong> on replaced positioned elements (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34430">#34430</a>), as well as <strong>‘align-self: self-start’</strong>, <strong>‘self-end’</strong>, <strong>‘left’</strong>, and <strong>‘right’</strong> on positioned elements (<a href="https://github.com/taniishkaaa">@taniishkaaa</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34365">#34365</a>).</p>
-<p>Servo can now run <a href="https://discord.com/"><strong>Discord</strong></a> well enough to <a href="https://discord.com/login"><strong>log in</strong></a> and <strong>read messages</strong>, though you can’t send messages yet.
-To get this working, we landed some bare-bones AbortController support (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/syvb">@syvb</a>, <a href="https://github.com/servo/servo/pull/34519">#34519</a>) and a WebSocket fix (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34634">#34634</a>).
-Try it yourself with <code>--pref dom.svg.enabled --pref dom.intersection_observer.enabled --pref dom.abort_controller.enabled</code>!</p>
-<figure>
- <div style="display: flex;">
- <a href="https://servo.org/img/blog/discord-login-1-december-2024.png"><img src="https://servo.org/img/blog/discord-login-1-december-2024.png" alt="Discord login screen in Servo, showing form input and a QR code that never finishes loading" /></a>
- <a href="https://servo.org/img/blog/discord-login-2-december-2024.png"><img src="https://servo.org/img/blog/discord-login-2-december-2024.png" alt="Discord loading screen in Servo, after logging in" /></a>
- </div>
- <a href="https://servo.org/img/blog/discord-small-december-2024.png"><img src="https://servo.org/img/blog/discord-small-december-2024.png" alt="Discord channel screen in Servo, showing a few of Diffie’s messages and attachments" /></a>
-</figure>
-<p>We now support <strong>console.trace()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34629">#34629</a>), <strong>PointerEvent</strong> (<a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/servo/servo/pull/34437">#34437</a>), and the <strong>clonable</strong> property on <strong>ShadowRoot</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34514">#34514</a>).
-Shadow DOM support continues to improve (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34503">#34503</a>), including very basic <strong>Shadow DOM layout</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34701">#34701</a>) when enabled via <code>--pref dom.shadowdom.enabled</code>.</p>
-<p><code>script</code> underwent (and continues to undergo) major rework towards being <strong>more reliable</strong> and <strong>faster to build</strong>.
-We’ve landed better <strong>synchronisation for DOM tree mutations</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34505">#34505</a>) and continued work on <strong>splitting up the <code>script</code> crate</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34366">#34366</a>).
-We’ve moved our <strong>ReadableStream</strong> support into Servo, eliminating the maintenance burden of a downstream SpiderMonkey patch (<a href="https://github.com/gterzian">@gterzian</a>, <a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/34064">#34064</a>, <a href="https://github.com/servo/servo/pull/34675">#34675</a>).</p>
-<p>The web platform guarantees that same-origin frames and their parents can <strong>synchronously observe resizes</strong> and their effects.
-Many tests rely on this, and not doing this correctly made Servo’s test results much flakier than they could otherwise be.
-We’ve made very good progress towards fixing this (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34643">#34643</a>, <a href="https://github.com/servo/servo/pull/34656">#34656</a>, <a href="https://github.com/servo/servo/pull/34702">#34702</a>, <a href="https://github.com/servo/servo/pull/34609">#34609</a>), with correct resizing in all cases except when a same-origin frame is in another script thread, which is rare.</p>
-<p>We now support enough of <strong>XPath</strong> to get <a href="https://htmx.org/">htmx</a> working (<a href="https://github.com/vlindhol">@vlindhol</a>, <a href="https://github.com/servo/servo/pull/34463">#34463</a>), when enabled via <code>--pref dom.xpath.enabled</code>.</p>
-<figure>
- <a href="https://servo.org/img/blog/htmx-december-2024.png"><img src="https://servo.org/img/blog/htmx-december-2024.png" alt="htmx home page in Servo, with the hero banner thing now working (it relies on XPath)" /></a>
-</figure>
-<p>Servo’s performance continues to improve, with <strong>layout caching for flex columns</strong> delivering up to 12x speedup (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34461">#34461</a>), many <strong>unnecessary reflows now eliminated</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34558">#34558</a>, <a href="https://github.com/servo/servo/pull/34599">#34599</a>, <a href="https://github.com/servo/servo/pull/34576">#34576</a>, <a href="https://github.com/servo/servo/pull/34645">#34645</a>), <strong>reduced memory usage</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34563">#34563</a>, <a href="https://github.com/servo/servo/pull/34666">#34666</a>), faster rendering for pages with animations (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34489">#34489</a>), and timers now operating without IPC (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34581">#34581</a>).</p>
-<p><strong>servoshell nightlies are up to 20% smaller</strong> (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/servo/servo/pull/34340">#34340</a>), <strong>WebGPU is now optional</strong> at build time (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/servo/servo/pull/34444">#34444</a>), and <code>--features tracing</code> no longer enables <code>--features layout-2013</code> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34515">#34515</a>) for further binary size savings.
-You can also <strong>limit the size of</strong> several of Servo’s <strong>thread pools</strong> with <code>--pref threadpools.fallback_worker_num</code> and others (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34478">#34478</a>), which is especially useful on machines with many CPU cores.</p>
-<p>We’ve started laying the groundwork for full <strong>incremental layout</strong> in our new layout engine, starting with a general layout caching mechanism (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34507">#34507</a>, <a href="https://github.com/servo/servo/pull/34513">#34513</a>, <a href="https://github.com/servo/servo/pull/34530">#34530</a>, <a href="https://github.com/servo/servo/pull/34586">#34586</a>).
-This was lost in the switch to our new layout engine, and without it, every time a page changes, we have to rerun layout from scratch.
-As you can imagine, this is very, very expensive, and incremental layout is critical for performance on today’s highly dynamic web.</p>
-<aside class="_note">
-<p>We’ve mentioned layout caching a few times, including in past monthly updates, but most of the caching we’ve landed so far has been to save time <em>within</em> a single reflow.
-Incremental layout requires layout caching that <em>persists</em> across reflows, and algorithms to determine when to invalidate those cached results.</p>
-</aside>
-<h2 id="donations" tabindex="-1">Donations <a class="header-anchor" href="https://servo.org/blog/2025/01/10/this-month-in-servo/#donations">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Thanks again for your generous support!
-We are now receiving <strong>4329 USD/month</strong> (+0.8% over November) in recurring donations.
-With this money, we’ve been able to cover our web hosting and <a href="https://ci0.servo.org/">self-hosted CI runners</a> for Windows, Linux, and now macOS builds (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34868">#34868</a>), <strong>halving <code>mach try</code> build times</strong> from over an hour to under 30 minutes!
-Next month, we’ll be <a href="https://github.com/servo/project/issues/123">expanding our CI capacity further</a>, all made possible thanks to your help.</p>
-<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>sixteen GitHub users</strong> that depend on Servo are sponsoring us there.
-If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
-<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
- <div style="position: relative; text-align: right;">
- <div style="position: absolute; margin-left: calc(100% * 4329 / 10000); padding-left: 0.5em;"><strong>4329</strong> USD/month</div>
- <div style="position: absolute; margin-left: calc(100% * 4329 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
- </div>
- <progress value="4329" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
-</div></figure>
-<p>As always, use of these funds will be decided transparently in the Technical Steering Committee.
-For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>
-<style>
- /* guaranteed minimum width for first paragraph after a float */
- ._floatmin {
- display: block;
- width: 13em;
- overflow: hidden;
- }
- ._clear {
- clear: both;
- }
- ._clearl {
- clear: left;
- }
- ._clearr {
- clear: right;
- }
- ._none {
- display: none;
- }
- ._fig:not(#specificity) {
- width: 33em;
- max-width: 100%;
- margin: 1em auto;
- }
- ._fig > ._flex,
- ._figl > ._flex,
- ._figr > ._flex {
- display: flex;
- }
- ._fig table {
- text-align: initial;
- }
- ._fig figcaption._notes {
- text-align: left;
- width: max-content;
- max-width: 100%;
- }
- ._figl:not(#specificity),
- ._figr:not(#specificity) {
- margin: 0 1em 1em;
- }
- ._figl {
- float: left;
- max-width: 100%;
- }
- ._figr {
- float: right;
- max-width: 100%;
- }
- ._figl > figcaption,
- ._figr > figcaption,
- ._figl > iframe,
- ._figr > iframe,
- ._figl > video,
- ._figr > video,
- ._figl > a > img,
- ._figr > a > img,
- ._figl > ._flex,
- ._figr > ._flex {
- width: 21em;
- max-width: 100%;
- }
-
- .content {
- container-type: inline-size;
- }
- ._paired_figure {
- margin: 1em 0;
- }
- @container (min-width: 55em) {
- ._paired_figure {
- display: grid;
- grid-template-columns: auto 33em;
- column-gap: 2em;
- row-gap: 1em;
- }
- ._paired_figure > ._text_before,
- ._paired_figure > ._text_after {
- flex: 1 1 20em;
- grid-column: 1 / 2;
- }
- ._paired_figure > figure:not(#specificity) {
- flex: 0 1 33em;
- grid-row: 1 / 3;
- grid-column: 2 / 3;
- margin: 0;
- }
-
- ._text_after {
- grid-column: 1 / 3;
- }
- }
-
- ._runin {
- margin-bottom: 1em;
- }
- ._runin > p,
- ._runin > h2 {
- display: inline;
- }
- ._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;
- }
-</style>
-
-
-
- This month in Servo: :is(), :where(), grid layout, parallel flexbox, and more!
-
- 2024-12-09T00:00:00Z
- https://servo.org/blog/2024/12/09/this-month-in-servo/
- <figure><a href="https://servo.org/img/blog/november-2024.png"><img src="https://servo.org/img/blog/november-2024.png" alt="Servo nightly showing new support for CSS grid layout, when enabled via `layout.grid.enabled`" /></a></figure>
-<p>Servo now supports <strong>:is() and :where() selectors</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34066">#34066</a>), <strong>parallel layout for flexbox</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34132">#34132</a>), and experimentally, <strong>CSS grid layout</strong> (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/taniishkaa">@taniishkaa</a>, <a href="https://github.com/servo/servo/pull/32619">#32619</a>, <a href="https://github.com/servo/servo/pull/34352">#34352</a>, <a href="https://github.com/servo/servo/pull/34421">#34421</a>)!
-To try our new grid layout support, <a href="https://book.servo.org/running-servoshell.html">run Servo</a> with <code>--pref layout.grid.enabled</code>.</p>
-<p>We’ve added support for two key Shadow DOM interfaces, the <strong>shadowRoot property</strong> on Element (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34306">#34306</a>) and the <strong>innerHTML property on ShadowRoot</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34335">#34335</a>).</p>
-<p>We’ve also landed <strong>‘justify-self’</strong> on positioned elements (<a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/servo/servo/pull/34235">#34235</a>), form submission with <strong><input type=image></strong> (<a href="https://github.com/shanehandley">@shanehandley</a>, <a href="https://github.com/servo/servo/pull/34203">#34203</a>), <strong>DataTransfer</strong> (<a href="https://github.com/Gae24">@Gae24</a>, <a href="https://github.com/servo/servo/pull/34205">#34205</a>), the <strong>close()</strong> method on ImageBitmap (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34124">#34124</a>), plus several new <strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto">SubtleCrypto</a> API</strong> features:</p>
-<ul>
-<li>crypto.subtle.<strong>deriveKey()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34185">#34185</a>)</li>
-<li><strong>wrapKey()</strong> and <strong>unwrapKey()</strong> (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/34262">#34262</a>)</li>
-<li><strong>“HMAC”</strong> algorithm in <strong>generateKey()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34278">#34278</a>), <strong>sign()</strong>, <strong>verify()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34223">#34223</a>), and <strong>deriveKey(<code>"get key length"</code>)</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34230">#34230</a>)</li>
-<li><strong>“AES-GCM”</strong> algorithm in <strong>encrypt()</strong>, <strong>decrypt()</strong>, <strong>generateKey()</strong>, and <strong>importKey()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34269">#34269</a>)</li>
-<li><strong>“AES-KW”</strong> algorithm in <strong>generateKey()</strong>, <strong>importKey()</strong>, <strong>wrapKey()</strong>, and <strong>unwrapKey()</strong> (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/34262">#34262</a>)</li>
-<li><strong>“PBKDF2”</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34164">#34164</a>) and <strong>“HKDF”</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34200">#34200</a>) algorithms in <strong>deriveBits()</strong></li>
-</ul>
-<p>On OpenHarmony, we’ve landed <strong>keyboard input</strong> and the IME (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/34188">#34188</a>), <strong>touch fling gestures</strong> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33219">#33219</a>), and additional <strong>CJK fallback fonts</strong> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34410">#34410</a>).
-You can now build for OpenHarmony on a Windows machine (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34113">#34113</a>), and build errors have been improved (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34267">#34267</a>).</p>
-<h2 id="more-engine-changes" tabindex="-1">More engine changes <a class="header-anchor" href="https://servo.org/blog/2024/12/09/this-month-in-servo/#more-engine-changes">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>You can now <strong>scroll the viewport</strong> and scrollable elements <strong>with your pointer anywhere in the area</strong>, not just when hovering over actual content (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/34347">#34347</a>).
-<code>--unminify-js</code>, a very useful feature for <a href="https://book.servo.org/hacking/web-compat-bugs.html#diagnosing-js-errors">diagnosing Servo bugs in real websites</a>, now supports module scripts (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/34206">#34206</a>).</p>
-<p>We’ve fixed the behaviour of <strong>offsetLeft</strong> and <strong>offsetTop</strong> relative to <body> with ‘position: static’ (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/32761">#32761</a>), which also required spec changes (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/w3c/csswg-drafts/pull/10549">w3c/csswg-drafts#10549</a>).
-We’ve also fixed several layout bugs around:</p>
-<ul>
-<li><strong>‘object-fit’</strong> when ‘aspect-ratio’ is set (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34413">#34413</a>)</li>
-<li><strong>clientWidth</strong> and friends on floats and replaced inlines (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34083">#34083</a>)</li>
-<li><strong>‘align-items’</strong> and <strong>‘align-self: stretch’</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34162">#34162</a>)</li>
-<li><strong>main axis free space</strong> in flexbox (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34150">#34150</a>)</li>
-<li><strong>min-</strong> and <strong>max-content block sizes</strong> of replaced elements (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34284">#34284</a>)</li>
-<li>sizing of non-replaced positioned elements with <strong>‘place-self’</strong> (<a href="https://github.com/taniishkaa">@taniishkaa</a>, <a href="https://github.com/servo/servo/pull/34264">#34264</a>)</li>
-</ul>
-<p>The <strong>getClientRects()</strong> method on Element now correctly returns a DOMRectList (<a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/servo/servo/pull/34025">#34025</a>).</p>
-<p><strong>Stylo</strong> has been updated to 2024-11-01 (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34322">#34322</a>), and we’ve landed some changes to prepare our fork of Stylo for publishing releases on <a href="http://crates.io/">crates.io</a> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/servo/servo/pull/34332">#34332</a>, <a href="https://github.com/servo/servo/pull/34353">#34353</a>).
-We’ve also made more progress towards <strong>splitting up our massive <code>script</code> crate</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/34357">#34357</a>, <a href="https://github.com/servo/servo/pull/34356">#34356</a>, <a href="https://github.com/servo/servo/pull/34163">#34163</a>), which will eventually allow Servo to be built (and rebuilt) much faster.</p>
-<h2 id="performance-improvements" tabindex="-1">Performance improvements <a class="header-anchor" href="https://servo.org/blog/2024/12/09/this-month-in-servo/#performance-improvements">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>In addition to parallel layout for flexbox (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34132">#34132</a>), we’ve landed several other performance improvements:</p>
-<ul>
-<li>faster layout for <strong>‘column’ flex containers</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34346">#34346</a>)</li>
-<li>faster caching of intrinsic sizes (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34384">#34384</a>)</li>
-<li>caching of font template matches (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34325">#34325</a>)</li>
-<li>fixed warnings and memory leak when WebRender is running late (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/34305">#34305</a>)</li>
-</ul>
-<p>We’ve also landed some changes to reduce Servo’s binary size:</p>
-<ul>
-<li>legacy layout is no longer built by default (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34290">#34290</a>)</li>
-<li>Servo no longer depends on <code>sparkle</code>, only <code>glow</code> and <code>gleam</code> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33918">#33918</a>, <a href="https://github.com/servo/servo/pull/34292">#34292</a>)</li>
-<li>Servo can now be built without WebXR support (<a href="https://github.com/wusyong">@wusyong</a>, <a href="https://github.com/augustkline">@augustkline</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/34241">#34241</a>, <a href="https://github.com/servo/servo/pull/34348">#34348</a>)</li>
-<li>servoshell can now be built without WebXR on OpenHarmony and Android (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34242">#34242</a>), with more platforms to come</li>
-<li>plus some progress towards a build-time feature flag for WebGPU (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/servo/servo/pull/34415">#34415</a>)</li>
-</ul>
-<p>Servo’s <strong><a href="https://docs.rs/tracing/0.1.40/tracing/">tracing</a>-based profiling support</strong> (<code>--features tracing-perfetto</code> or <code>tracing-hitrace</code>) now supports <strong>filtering events</strong> via an environment variable (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34236">#34236</a>, <a href="https://github.com/servo/servo/pull/34256">#34256</a>), and no longer includes events from non-Servo crates by default (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34209">#34209</a>).
-Note that when the filter matches some span or event, it will also match all of its descendants for now, but this is a limitation we intend to fix.</p>
-<p>Most of the events supported by the old interval profiler have been <strong>ported to tracing</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34238">#34238</a>, <a href="https://github.com/servo/servo/pull/34337">#34337</a>).
-<strong>ScriptParseHTML</strong> and <strong>ScriptParseXML</strong> events no longer count the time spent doing layout and script while parsing, reducing them to more realistic times (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34273">#34273</a>), while <strong>ScriptEvaluate</strong> events now count the time spent running scripts in timers, DOM event listeners, and many other situations (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34286">#34286</a>), increasing them to more realistic times.</p>
-<p>We’ve added new tracing events for <strong>display list building</strong> (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/servo/servo/pull/34392">#34392</a>), <strong>flex layout</strong>, <strong>inline layout</strong>, and <strong>font loading</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/34392">#34392</a>).
-This will help us diagnose performance issues around things like caching and relayout for ‘stretch’ in flex layout, shaping text runs, and font template creation.</p>
-<h2 id="for-developers" tabindex="-1">For developers <a class="header-anchor" href="https://servo.org/blog/2024/12/09/this-month-in-servo/#for-developers">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Hacking on Servo is now easier, with our <strong>new <code>--profile medium</code> build mode</strong> in Cargo (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/34035">#34035</a>).
-<code>medium</code> is more optimised than <code>debug</code>, but unlike <code>release</code>, it supports debuggers, line numbers in backtraces, and incremental builds.</p>
-<p>Servo <strong>now uses <a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners">CODEOWNERS</a></strong> to list reviewers that are experts in <a href="https://github.com/servo/servo/blob/3515b83a95cb65da30c1e3988f7a47f79fd7b9bd/.github/CODEOWNERS">parts of our main repo</a>.
-This should make it much easier to find reviewers that know how to review your code, and helps us maximise the quality of our code reviews by allowing reviewers to specialise.</p>
-<h2 id="donations" tabindex="-1">Donations <a class="header-anchor" href="https://servo.org/blog/2024/12/09/this-month-in-servo/#donations">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Thanks again for your generous support!
-We are now receiving <strong>4291 USD/month</strong> (+2.1% over October) in recurring donations.
-<strong>We are no longer accepting donations on LFX</strong> — if you were donating there, please move your recurring donations to <a href="https://github.com/sponsors/servo">GitHub</a> or <a href="https://opencollective.com/servo">Open Collective</a>.</p>
-<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>fifteen GitHub users</strong> that depend on Servo are sponsoring us there.
-If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
-<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
- <div style="position: relative; text-align: right;">
- <div style="position: absolute; margin-left: calc(100% * 4291 / 10000); padding-left: 0.5em;"><strong>4291</strong> USD/month</div>
- <div style="position: absolute; margin-left: calc(100% * 4291 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
- </div>
- <progress value="4291" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
-</div></figure>
-<p>With this money, we’ve been able to cover our web hosting and self-hosted CI runners for Windows and Linux builds.
-When the time comes, we’ll also be able to afford macOS runners and perf bots, as well as additional Outreachy interns next year!
-As always, use of these funds will be decided transparently in the Technical Steering Committee.
-For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>
-<h2 id="conferences-and-blogs" tabindex="-1">Conferences and blogs <a class="header-anchor" href="https://servo.org/blog/2024/12/09/this-month-in-servo/#conferences-and-blogs">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<ul>
-<li><a href="https://blogs.igalia.com/mrego/servo-revival-2023-2024/"><strong>Servo Revival: 2023-2024</strong></a> — Manuel Rego wrote about Igalia’s role in getting Servo back to life, and now thriving, over the past two years</li>
-<li><a href="https://www.youtube.com/watch?v=gpz088cxDcI"><strong>Porting Servo to OpenHarmony</strong></a> — Jonathan Schwender spoke at <a href="https://lfeumembersummit24.sched.com/event/1hUAF">GOSIM China 2024</a> about the work we’ve done towards supporting OpenHarmony in Servo</li>
-<li><a href="https://www.youtube.com/watch?v=1c9sHaEXQak"><strong>Taming concurrency with (in)-formal methods in Servo</strong></a> — Gregory Terzian spoke at <a href="https://lfeumembersummit24.sched.com/event/1hUAF">GOSIM China 2024</a> about using <a href="https://en.wikipedia.org/wiki/TLA%2B">TLA+</a> to help us correctly implement concurrent algorithms like the HTML event loop in Servo</li>
-</ul>
-<style>
- /* guaranteed minimum width for first paragraph after a float */
- ._floatmin {
- display: block;
- width: 13em;
- overflow: hidden;
- }
- ._none {
- display: none;
- }
- ._fig:not(#specificity) {
- width: 33em;
- max-width: 100%;
- margin: 1em auto;
- }
- ._fig > ._flex {
- display: flex;
- }
- ._fig table {
- text-align: initial;
- }
- ._fig figcaption._notes {
- text-align: left;
- width: max-content;
- max-width: 100%;
- }
- ._figl:not(#specificity),
- ._figr:not(#specificity) {
- margin: 0 1em 1em;
- }
- ._figl {
- float: left;
- max-width: 100%;
- }
- ._figr {
- float: right;
- max-width: 100%;
- }
- ._figl > figcaption,
- ._figr > figcaption,
- ._figl > iframe,
- ._figr > iframe,
- ._figl > video,
- ._figr > video,
- ._figl > a > img,
- ._figr > a > img {
- width: 21em;
- max-width: 100%;
- }
- ._runin {
- margin-bottom: 1em;
- }
- ._runin > p,
- ._runin > h2 {
- display: inline;
- }
- ._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;
- }
-</style>
-
-
-
- Behind the code: an interview with msub2
-
- 2024-11-12T00:00:00Z
- https://servo.org/blog/2024/11/12/behind-the-code-msub2/
- <p>Behind the Code is a new series of interviews with the contributors who help propel Servo forward. Ever wondered why people
-choose to work on web browsers, or how they get started? We invite you to look beyond the project’s pull requests and issue
-reports, and get to know the humans who make it happen.</p>
-<hr />
-<h2 id="msub2" tabindex="-1"><img src="https://avatars.githubusercontent.com/u/70986246?v=4" width="60" /> <a href="https://github.com/msub2">msub2</a> <a class="header-anchor" href="https://servo.org/blog/2024/11/12/behind-the-code-msub2/#msub2">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Some representative contributions:</p>
-<ul>
-<li><a href="https://github.com/servo/webxr/pull/243">OpenXR: Separate graphics handling from main OpenXR code</a></li>
-<li><a href="https://github.com/servo/webxr/pull/229">Surface supported interaction profiles from OpenXR runtime</a></li>
-<li><a href="https://github.com/servo/webxr/pull/224">Support OpenXR runtimes that do not support fovMutable</a></li>
-<li><a href="https://github.com/servo/servo/pull/33628">crypto: Begin SubtleCrypto implementation</a></li>
-<li><a href="https://github.com/servo/servo/pull/33508">bindings: Allow Guard to take multiple conditions, check for SecureContext in ConstructorEnabled</a></li>
-<li><a href="https://github.com/servo/servo/pull/31200">Implement non-XR Gamepad discovery and input</a></li>
-</ul>
-<h3 id="tell-us-about-yourself!" tabindex="-1">Tell us about yourself! <a class="header-anchor" href="https://servo.org/blog/2024/11/12/behind-the-code-msub2/#tell-us-about-yourself!">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h3>
-<p>My name is Daniel, though I more commonly go by my online handle “msub2”. I’m something of a generalist, but my primary interests
-are developing for the web, XR, and games. I created and run the <a href="https://discord.gg/webxr">WebXR Discord</a>, which has members from both the Immersive Web Working
-Group and the Meta Browser team, among others. In my free time (when I’m not working, doing Servo things, or tending to my other
-programming projects) I’m typically watching videos from YouTube/Dropout/Nebula/etc and playing video games.</p>
-<h3 id="why-did-you-start-contributing-to-servo%3F" tabindex="-1">Why did you start contributing to Servo? <a class="header-anchor" href="https://servo.org/blog/2024/11/12/behind-the-code-msub2/#why-did-you-start-contributing-to-servo%3F">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h3>
-<p>A confluence of interests, to put it simply. I was just starting to really get into Rust, having built a CHIP-8 emulator and an
-NES emulator to get my hands dirty, but I also had prior experience contributing to other browser projects like Chromium and Gecko.
-I was also eyeing Servo’s WebXR implementation (which I had submitted a couple small fixes for last year) as I could see there was
-still plenty of work that could be done there. To get started though, I looked for an adjacent area that I could work on to get
-familiar with the main Servo codebase, which led to my first contribution being support for non-XR gamepads!</p>
-<h3 id="what-was-challenging-about-your-first-contribution%3F" tabindex="-1">What was challenging about your first contribution? <a class="header-anchor" href="https://servo.org/blog/2024/11/12/behind-the-code-msub2/#what-was-challenging-about-your-first-contribution%3F">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h3>
-<p>I’d say the most challenging part of my first contribution was twofold: the first was just getting oriented with how data flows
-in and out of Servo via the embedding API and the second was understanding how DOM structs, methods, and codegen all worked together
-in the script crate. Servo is a big project, but luckily I got lots of good help and feedback as I was working through it, which
-definitely made things easier. Looking at existing examples in the codebase of the things I was trying to do got me the rest of the
-way there I’d say.</p>
-<h3 id="what-do-you-like-about-contributing-to-the-project%3F-what-do-you-get-out-of-it%3F" tabindex="-1">What do you like about contributing to the project? What do you get out of it? <a class="header-anchor" href="https://servo.org/blog/2024/11/12/behind-the-code-msub2/#what-do-you-like-about-contributing-to-the-project%3F-what-do-you-get-out-of-it%3F">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h3>
-<p>The thing I like most about Servo (and perhaps the web platform as an extension) is the amount of interesting problems that there
-are to solve when it comes to implementing/supporting all of its different features. While most of my contributions so far have been
-focused around Gamepad and WebXR, recently I’ve been working to help implement SubtleCrypto alongside another community member, which
-has been really interesting! In addition to the satisfaction I get just from being able to solve interesting problems, I also rather
-enjoy the feeling of contributing to a large, communal, open-source project.</p>
-<h3 id="any-final-thoughts-you%E2%80%99d-like-to-share%3F" tabindex="-1">Any final thoughts you’d like to share? <a class="header-anchor" href="https://servo.org/blog/2024/11/12/behind-the-code-msub2/#any-final-thoughts-you%E2%80%99d-like-to-share%3F">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h3>
-<p>I’d encourage anyone who’s intrigued by the idea of contributing to Servo to give it a shot! The recent waves of attention for projects
-like Verso and Ladybird have shown that there is an appetite for new browsers and browser engines, and with Servo’s history it just
-feels right that it should finally be able to rise to a more prominent status in the ecosystem.</p>
-
-
-
- This month in Servo: faster fonts, fetches, and flexbox!
-
- 2024-11-08T00:00:00Z
- https://servo.org/blog/2024/11/08/this-month-in-servo/
- <p>Servo now supports <strong>‘mix-blend-mode: plus-lighter’</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34057">#34057</a>) and <strong>‘transition-behavior: allow-discrete’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33991">#33991</a>), including in the ‘transition’ shorthand (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34005">#34005</a>), along with the <a href="https://w3c.github.io/webappsec-fetch-metadata/">fetch metadata request headers</a> <strong>‘Sec-Fetch-Site’</strong>, <strong>‘Sec-Fetch-Mode’</strong>, <strong>‘Sec-Fetch-User’</strong>, and <strong>‘Sec-Fetch-Dest’</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33830">#33830</a>).</p>
-<figure><a href="https://servo.org/img/blog/october-2024-narrow.png"><img src="https://servo.org/img/blog/october-2024-narrow.png" alt="Servo nightly showing new support for non-ASCII characters in <img srcset>, ‘transition-behavior: allow-discrete’, ‘mix-blend-mode: plus-lighter’, and ‘width: stretch’" /></a></figure>
-<p>We now have partial support for the CSS size keywords <strong>‘min-content’</strong>, <strong>‘max-content’</strong>, <strong>‘fit-content’</strong>, and <strong>‘stretch’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33558">#33558</a>, <a href="https://github.com/servo/servo/pull/33659">#33659</a>, <a href="https://github.com/servo/servo/pull/33854">#33854</a>, <a href="https://github.com/servo/servo/pull/33951">#33951</a>), including in floats (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33666">#33666</a>), atomic inlines (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33737">#33737</a>), and elements with ‘position: absolute’ or ‘fixed’ (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33950">#33950</a>).</p>
-<p>We’re implementing the <strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto">SubtleCrypto</a> API</strong>, starting with full support for <strong>crypto.subtle.digest()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/34034">#34034</a>), partial support for <strong>generateKey()</strong> with AES-CBC and AES-CTR (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/33628">#33628</a>, <a href="https://github.com/servo/servo/pull/33963">#33963</a>), and partial support for <strong>encrypt()</strong>, and <strong>decrypt()</strong> with AES-CBC (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/33795">#33795</a>).</p>
-<h2 id="more-engine-changes" tabindex="-1">More engine changes <a class="header-anchor" href="https://servo.org/blog/2024/11/08/this-month-in-servo/#more-engine-changes">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Servo’s architecture is improving, with a new cross-process compositor API that <strong>reduces memory copy overhead for video</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/crbrz">@crbrz</a>, <a href="https://github.com/servo/servo/pull/33619">#33619</a>, <a href="https://github.com/servo/servo/pull/33660">#33660</a>, <a href="https://github.com/servo/servo/pull/33817">#33817</a>).
-We’ve also started phasing out our old OpenGL bindings (<a href="https://github.com/servo/gleam">gleam</a> and <a href="https://github.com/servo/sparkle">sparkle</a>) in favour of <a href="https://crates.io/crates/glow">glow</a>, which should reduce Servo’s complexity and binary size (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/surfman/pull/318">surfman#318</a>, <a href="https://github.com/servo/webxr/pull/248">webxr#248</a>, <a href="https://github.com/servo/servo/pull/33538">#33538</a>, <a href="https://github.com/servo/servo/pull/33910">#33910</a>, <a href="https://github.com/servo/servo/pull/33911">#33911</a>).</p>
-<p>We’ve updated to <strong>Stylo 2024-10-04</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33767">#33767</a>) and <a href="https://github.com/gfx-rs/wgpu/releases/tag/v23.0.0"><strong>wgpu 23</strong></a> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/34073">#34073</a>, <a href="https://github.com/servo/servo/pull/33819">#33819</a>, <a href="https://github.com/servo/servo/pull/33635">#33635</a>).
-The new version of wgpu includes several patches from <a href="https://github.com/sagudev">@sagudev</a>, adding <strong>support for <code>const_assert</code></strong>, as well as <strong>accessing <code>const</code> arrays with runtime index values</strong>.
-We’ve also reworked WebGPU canvas presentation to ensure that we never use old buffers by mistake (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33613">#33613</a>).</p>
-<p>We’ve also landed a bunch of improvements to our DOM geometry APIs, with DOMMatrix now <strong>supporting toString()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33792">#33792</a>) and <strong>updating <code>is2D</code> on mutation</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33796">#33796</a>), support for <strong>DOMRect.fromRect()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33798">#33798</a>), and getBounds() on DOMQuad now <strong>handling NaN correctly</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33794">#33794</a>).</p>
-<p>We now correctly handle <strong>non-ASCII characters in <img srcset></strong> (<a href="https://github.com/evuez">@evuez</a>, <a href="https://github.com/servo/servo/pull/33873">#33873</a>), correctly handle <strong>data: URLs</strong> in more situations (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/33500">#33500</a>), and no longer throw an uncaught exception when pages try to use IntersectionObserver (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33989">#33989</a>).</p>
-<p>Outreachy contributors are doing great work in Servo again, helping us land many of this month’s improvements to GC static analysis (<a href="https://github.com/taniishkaa">@taniishkaa</a>, <a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/jahielkomu">@jahielkomu</a>, <a href="https://github.com/wulanseruniati">@wulanseruniati</a>, <a href="https://github.com/lauwwulan">@lauwwulan</a>, <a href="https://github.com/servo/servo/pull/33692">#33692</a>, <a href="https://github.com/servo/servo/pull/33706">#33706</a>, <a href="https://github.com/servo/servo/pull/33800">#33800</a>, <a href="https://github.com/servo/servo/pull/33774">#33774</a>, <a href="https://github.com/servo/servo/pull/33816">#33816</a>, <a href="https://github.com/servo/servo/pull/33808">#33808</a>, <a href="https://github.com/servo/servo/pull/33827">#33827</a>, <a href="https://github.com/servo/servo/pull/33822">#33822</a>, <a href="https://github.com/servo/servo/pull/33820">#33820</a>, <a href="https://github.com/servo/servo/pull/33828">#33828</a>, <a href="https://github.com/servo/servo/pull/33852">#33852</a>, <a href="https://github.com/servo/servo/pull/33843">#33843</a>, <a href="https://github.com/servo/servo/pull/33836">#33836</a>, <a href="https://github.com/servo/servo/pull/33865">#33865</a>, <a href="https://github.com/servo/servo/pull/33862">#33862</a>, <a href="https://github.com/servo/servo/pull/33891">#33891</a>, <a href="https://github.com/servo/servo/pull/33888">#33888</a>, <a href="https://github.com/servo/servo/pull/33880">#33880</a>, <a href="https://github.com/servo/servo/pull/33902">#33902</a>, <a href="https://github.com/servo/servo/pull/33892">#33892</a>, <a href="https://github.com/servo/servo/pull/33893">#33893</a>, <a href="https://github.com/servo/servo/pull/33895">#33895</a>, <a href="https://github.com/servo/servo/pull/33931">#33931</a>, <a href="https://github.com/servo/servo/pull/33924">#33924</a>, <a href="https://github.com/servo/servo/pull/33917">#33917</a>, <a href="https://github.com/servo/servo/pull/33921">#33921</a>, <a href="https://github.com/servo/servo/pull/33958">#33958</a>, <a href="https://github.com/servo/servo/pull/33920">#33920</a>, <a href="https://github.com/servo/servo/pull/33973">#33973</a>, <a href="https://github.com/servo/servo/pull/33960">#33960</a>, <a href="https://github.com/servo/servo/pull/33928">#33928</a>, <a href="https://github.com/servo/servo/pull/33985">#33985</a>, <a href="https://github.com/servo/servo/pull/33984">#33984</a>, <a href="https://github.com/servo/servo/pull/33978">#33978</a>, <a href="https://github.com/servo/servo/pull/33975">#33975</a>, <a href="https://github.com/servo/servo/pull/34003">#34003</a>, <a href="https://github.com/servo/servo/pull/34002">#34002</a>) and code health (<a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/DileepReddyP">@DileepReddyP</a>, <a href="https://github.com/taniishkaa">@taniishkaa</a>, <a href="https://github.com/mercybassey">@mercybassey</a>, <a href="https://github.com/jahielkomu">@jahielkomu</a>, <a href="https://github.com/cashall-0">@cashall-0</a>, <a href="https://github.com/tony-nyagah">@tony-nyagah</a>, <a href="https://github.com/lwz23">@lwz23</a>, <a href="https://github.com/Noble14477">@Noble14477</a>, <a href="https://github.com/servo/servo/pull/33959">#33959</a>, <a href="https://github.com/servo/servo/pull/33713">#33713</a>, <a href="https://github.com/servo/servo/pull/33804">#33804</a>, <a href="https://github.com/servo/servo/pull/33618">#33618</a>, <a href="https://github.com/servo/servo/pull/33625">#33625</a>, <a href="https://github.com/servo/servo/pull/33631">#33631</a>, <a href="https://github.com/servo/servo/pull/33632">#33632</a>, <a href="https://github.com/servo/servo/pull/33633">#33633</a>, <a href="https://github.com/servo/servo/pull/33643">#33643</a>, <a href="https://github.com/servo/servo/pull/33643">#33643</a>, <a href="https://github.com/servo/servo/pull/33646">#33646</a>, <a href="https://github.com/servo/servo/pull/33648">#33648</a>, <a href="https://github.com/servo/servo/pull/33653">#33653</a>, <a href="https://github.com/servo/servo/pull/33664">#33664</a>, <a href="https://github.com/servo/servo/pull/33685">#33685</a>, <a href="https://github.com/servo/servo/pull/33686">#33686</a>, <a href="https://github.com/servo/servo/pull/33689">#33689</a>, <a href="https://github.com/servo/servo/pull/33686">#33686</a>, <a href="https://github.com/servo/servo/pull/33690">#33690</a>, <a href="https://github.com/servo/servo/pull/33705">#33705</a>, <a href="https://github.com/servo/servo/pull/33707">#33707</a>, <a href="https://github.com/servo/servo/pull/33724">#33724</a>, <a href="https://github.com/servo/servo/pull/33727">#33727</a>, <a href="https://github.com/servo/servo/pull/33728">#33728</a>, <a href="https://github.com/servo/servo/pull/33729">#33729</a>, <a href="https://github.com/servo/servo/pull/33730">#33730</a>, <a href="https://github.com/servo/servo/pull/33740">#33740</a>, <a href="https://github.com/servo/servo/pull/33744">#33744</a>, <a href="https://github.com/servo/servo/pull/33757">#33757</a>, <a href="https://github.com/servo/servo/pull/33771">#33771</a>, <a href="https://github.com/servo/servo/pull/33757">#33757</a>, <a href="https://github.com/servo/servo/pull/33782">#33782</a>, <a href="https://github.com/servo/servo/pull/33790">#33790</a>, <a href="https://github.com/servo/servo/pull/33809">#33809</a>, <a href="https://github.com/servo/servo/pull/33818">#33818</a>, <a href="https://github.com/servo/servo/pull/33821">#33821</a>, <a href="https://github.com/servo/servo/pull/33835">#33835</a>, <a href="https://github.com/servo/servo/pull/33840">#33840</a>, <a href="https://github.com/servo/servo/pull/33853">#33853</a>, <a href="https://github.com/servo/servo/pull/33849">#33849</a>, <a href="https://github.com/servo/servo/pull/33860">#33860</a>, <a href="https://github.com/servo/servo/pull/33878">#33878</a>, <a href="https://github.com/servo/servo/pull/33881">#33881</a>, <a href="https://github.com/servo/servo/pull/33894">#33894</a>, <a href="https://github.com/servo/servo/pull/33935">#33935</a>, <a href="https://github.com/servo/servo/pull/33936">#33936</a>, <a href="https://github.com/servo/servo/pull/33943">#33943</a>).</p>
-<h2 id="performance-improvements" tabindex="-1">Performance improvements <a class="header-anchor" href="https://servo.org/blog/2024/11/08/this-month-in-servo/#performance-improvements">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Our font system is faster now, with <strong>reduced latency</strong> when loading system fonts (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33638">#33638</a>), layout <strong>no longer blocking on sending font data</strong> to WebRender (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33600">#33600</a>), and <strong>memory mapped system fonts</strong> on macOS and FreeType platforms like Linux (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/33747">#33747</a>).</p>
-<p>Servo now has a <strong>dedicated fetch thread</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33863">#33863</a>).
-This greatly reduces the number of IPC channels we create for individual requests, and should fix crashes related to file descriptor exhaustion on some platforms.
-<strong>Brotli-compressed responses</strong> are also handled more efficiently, such that we run the parser with up to 8 KiB of decompressed data at a time, rather than only 10 bytes of compressed data at a time (<a href="https://github.com/crbrz">@crbrz</a>, <a href="https://github.com/servo/servo/pull/33611">#33611</a>).</p>
-<p><strong>Flexbox layout now uses caching</strong> to avoid doing unnecessary work (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33964">#33964</a>, <a href="https://github.com/servo/servo/pull/33967">#33967</a>), and now has experimental <strong><a href="https://docs.rs/tracing/0.1.40/tracing/">tracing</a>-based profiling support</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33647">#33647</a>), which in turn no longer spams RUST_LOG=info when not enabled (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/33845">#33845</a>).
-We’ve also landed optimisations in table layout (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33575">#33575</a>) and in our layout engine as a whole (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33806">#33806</a>).</p>
-<p>Work continues on making our massive <code>script</code> crate build faster, with <strong>improved incremental builds</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33502">#33502</a>) and further patches towards <strong>splitting <code>script</code> into smaller crates</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/33627">#33627</a>, <a href="https://github.com/servo/servo/pull/33665">#33665</a>).</p>
-<p>We’ve also fixed several crashes, including when initiating a WebXR session on macOS (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/33962">#33962</a>), when laying out replaced elements (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/34006">#34006</a>), when running JavaScript modules (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/33938">#33938</a>), and in many situations when garbage collection occurs (<a href="https://github.com/chickenleaf">@chickenleaf</a>, <a href="https://github.com/taniishkaa">@taniishkaa</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/33857">#33857</a>, <a href="https://github.com/servo/servo/pull/33875">#33875</a>, <a href="https://github.com/servo/servo/pull/33904">#33904</a>, <a href="https://github.com/servo/servo/pull/33929">#33929</a>, <a href="https://github.com/servo/servo/pull/33942">#33942</a>, <a href="https://github.com/servo/servo/pull/33976">#33976</a>, <a href="https://github.com/servo/servo/pull/34019">#34019</a>, <a href="https://github.com/servo/servo/pull/34020">#34020</a>, <a href="https://github.com/servo/servo/pull/33965">#33965</a>, <a href="https://github.com/servo/servo/pull/33937">#33937</a>).</p>
-<h2 id="servoshell%2C-embedding%2C-and-devtools" tabindex="-1">servoshell, embedding, and devtools <a class="header-anchor" href="https://servo.org/blog/2024/11/08/this-month-in-servo/#servoshell%2C-embedding%2C-and-devtools">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p><strong><a href="https://book.servo.org/hacking/using-devtools.html">Devtools</a> support</strong> (<code>--devtools 6080</code>) is now compatible with Firefox 131+ (<a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/servo/servo/pull/33661">#33661</a>), and no longer lists iframes as if they were inspectable tabs (<a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/servo/servo/pull/34032">#34032</a>).</p>
-<p><a href="https://book.servo.org/running-servoshell.html">Servo-the-browser</a> now <strong>avoids unnecessary redraws</strong> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/34008">#34008</a>), massively reducing its CPU usage, and no longer scrolls too slowly on HiDPI systems (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/servo/servo/pull/34063">#34063</a>).
-We now <strong>update the location bar when redirects happen</strong> (<a href="https://github.com/rwakulszowa">@rwakulszowa</a>, <a href="https://github.com/servo/servo/pull/34004">#34004</a>), and these updates are sent to all embedders of Servo, not just servoshell.</p>
-<p>We’ve added a <strong>new <code>--unminify-css</code> option</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/33919">#33919</a>), allowing you to dump the CSS used by a page <a href="https://book.servo.org/hacking/web-compat-bugs.html#diagnosing-js-errors">like you can for JavaScript</a>.
-This will pave the way for allowing you to modify that CSS for debugging site compat issues, which is not yet implemented.</p>
-<p>We’ve also added a <strong>new <code>--screen-size</code> option</strong> that can help with testing mobile websites (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/34038">#34038</a>), renaming the old <code>--resolution</code> option to <code>--window-size</code>, and we’ve <strong>removed <code>--no-minibrowser</code> mode</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/33677">#33677</a>).</p>
-<p>We now publish <strong>nightly builds for OpenHarmony</strong> on <a href="http://servo.org/">servo.org</a> (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/33801">#33801</a>).
-When running servoshell on OpenHarmony, we now display toasts when pages load or panic (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/33621">#33621</a>), and you can now pass certain Servo options via <code>hdc shell aa start</code> or a test app (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/33588">#33588</a>).</p>
-<h2 id="donations" tabindex="-1">Donations <a class="header-anchor" href="https://servo.org/blog/2024/11/08/this-month-in-servo/#donations">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Thanks again for your generous support!
-We are now receiving <strong>4201 USD/month</strong> (+1.3% over September) in recurring donations.
-<strong>We are no longer accepting donations on LFX</strong> — if you were donating there, please move your recurring donations to <a href="https://github.com/sponsors/servo">GitHub</a> or <a href="https://opencollective.com/servo">Open Collective</a>.</p>
-<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>ten GitHub users</strong> that depend on Servo are sponsoring us there.
-If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
-<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
- <div style="position: relative; text-align: right;">
- <div style="position: absolute; margin-left: calc(100% * 4201 / 10000); padding-left: 0.5em;"><strong>4201</strong> USD/month</div>
- <div style="position: absolute; margin-left: calc(100% * 4201 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
- </div>
- <progress value="4201" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
-</div></figure>
-<p>With this money, we’ve been able to pay for a <strong>second Outreachy intern</strong> in this upcoming round, plus our web hosting and self-hosted CI runners for Windows and Linux builds.
-When the time comes, we’ll also be able to afford macOS runners and perf bots!
-As always, use of these funds will be decided transparently in the Technical Steering Committee.
-For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>
-<h2 id="conference-talks" tabindex="-1">Conference talks <a class="header-anchor" href="https://servo.org/blog/2024/11/08/this-month-in-servo/#conference-talks">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<ul>
-<li><a href="https://www.youtube.com/watch?v=NHa4LPpWRh8&t=1365s"><strong>Servo project update</strong></a> — Manuel Rego spoke at the <a href="https://lfeumembersummit24.sched.com/event/1hUAF">LF Europe Member Summit</a> about the status and long-term vision of the Servo project</li>
-<li><a href="https://www.youtube.com/live/LPCg0NcQICQ?t=1089s"><strong>Servo: Building a Browser Rendering Engine in Rust</strong></a> (<a href="https://servo.org/slides/2024-10-25-ubuntu-summit/">slides</a>) — Rakhi Sharma spoke at the <a href="https://events.canonical.com/event/51/contributions/516/">Ubuntu Summit</a> about Servo’s recent work in embedding, layout, and benchmarking</li>
-</ul>
-<style>
- /* guaranteed minimum width for first paragraph after a float */
- ._floatmin {
- display: block;
- width: 13em;
- overflow: hidden;
- }
- ._none {
- display: none;
- }
- ._fig:not(#specificity) {
- width: 33em;
- max-width: 100%;
- margin: 1em auto;
- }
- ._fig > ._flex {
- display: flex;
- }
- ._fig table {
- text-align: initial;
- }
- ._fig figcaption._notes {
- text-align: left;
- width: max-content;
- max-width: 100%;
- }
- ._figl:not(#specificity),
- ._figr:not(#specificity) {
- margin: 0 1em 1em;
- }
- ._figl {
- float: left;
- max-width: 100%;
- }
- ._figr {
- float: right;
- max-width: 100%;
- }
- ._figl > figcaption,
- ._figr > figcaption,
- ._figl > iframe,
- ._figr > iframe,
- ._figl > video,
- ._figr > video,
- ._figl > a > img,
- ._figr > a > img {
- width: 21em;
- max-width: 100%;
- }
- ._runin {
- margin-bottom: 1em;
- }
- ._runin > p,
- ._runin > h2 {
- display: inline;
- }
- ._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;
- }
-</style>
-
-
-
- This month in Servo: Android nightlies, right-to-left, WebGPU, and more!
-
- 2024-10-03T00:00:00Z
- https://servo.org/blog/2024/10/03/this-month-in-servo/
- <p>Servo has had several new features land in our nightly builds over the last month:</p>
-<ul>
-<li>as of 2024-09-10, we now support <strong><ul type></strong> and <strong><ul compact></strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33303">#33303</a>)</li>
-<li>as of 2024-09-10, we now support <strong>console.timeLog()</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33377">#33377</a>)</li>
-<li>as of 2024-09-10, we now support the <strong>encodeInto() method on TextEncoder</strong> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33360">#33360</a>)</li>
-<li>as of 2024-09-10, we now support <strong><link rel=prefetch></strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33345">#33345</a>)</li>
-<li>as of 2024-09-12, we now support <strong>right-to-left languages</strong>, except for floats (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/servo/servo/pull/33375">#33375</a>)</li>
-<li>as of 2024-09-14, we now support <strong>‘table-layout: fixed’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33384">#33384</a>, <a href="https://github.com/servo/servo/pull/33442">#33442</a>)</li>
-<li>as of 2024-09-17, we now support the <strong>‘reset’ event on XRReferenceSpace</strong> properties (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/33460">#33460</a>)</li>
-<li>as of 2024-09-19, we now support the <strong>‘object-fit’</strong> and <strong>‘object-position’</strong> properties (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33479">#33479</a>)</li>
-<li>as of 2024-09-19, <strong>Crypto.getRandomValues()</strong> can now take <strong>BigInt64Array</strong> or <strong>BigUint64Array</strong> (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/33485">#33485</a>)</li>
-<li>as of 2024-09-25, we now support <strong>‘innerText’</strong> and <strong>‘outerText’ on HTMLElement</strong> (<a href="https://github.com/Melchizedek6809">@Melchizedek6809</a>, <a href="https://github.com/shanehandley">@shanehandley</a>, <a href="https://github.com/servo/servo/pull/33312">#33312</a>)</li>
-</ul>
-<figure><a href="https://servo.org/img/blog/september-2024.png"><img src="https://servo.org/img/blog/september-2024.png" alt="Servo nightly showing new support for <ul type>, right-to-left layout, ‘table-layout: fixed’, ‘object-fit’, ‘object-position’, crypto.getRandomValues(BigInt64Array) and (BigUint64Array), and innerText and outerText" /></a></figure>
-<p>Servo’s flexbox support continues to mature, with support for <strong>‘align-self: normal’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33314">#33314</a>), plus corrections to <strong>cross-axis percent units</strong> in descendants (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33242">#33242</a>), <strong>automatic minimum sizes</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33248">#33248</a>, <a href="https://github.com/servo/servo/pull/33256">#33256</a>), <strong>replaced flex items</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33263">#33263</a>), <strong>baseline alignment</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33347">#33347</a>), and <strong>absolute descendants</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33346">#33346</a>).</p>
-<p>Our table layout has improved, with support for <strong>width</strong> and <strong>height presentational attributes</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33405">#33405</a>, <a href="https://github.com/servo/servo/pull/33425">#33425</a>), as well as better handling of <strong>‘border-collapse’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33452">#33452</a>) and <strong>extra <col> and <colgroup> columns</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33451">#33451</a>).</p>
-<p>We’ve also started working on the intrinsic sizing keywords <strong>‘min-content’</strong>, <strong>‘max-content’</strong>, <strong>‘fit-content’</strong>, and <strong>‘stretch’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33492">#33492</a>).
-Before we can support them, though, we needed to land patches to calculate intrinsic sizes, including for <strong>percent units</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33204">#33204</a>), <strong>aspect ratios</strong> of replaced elements (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33240">#33240</a>), <strong>column flex containers</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33299">#33299</a>), and <strong>‘white-space’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/33343">#33343</a>).</p>
-<p>We’ve also worked on our <strong>WebGPU support</strong>, with support for <strong>pipeline-overridable constants</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33291">#33291</a>), and major rework to <strong>GPUBuffer</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33154">#33154</a>) and our <strong>canvas presentation</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33387">#33387</a>).
-As a result, <strong>GPUCanvasContext</strong> now properly supports (re)configuration and resize on <strong>GPUCanvasContext</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33521">#33521</a>), presentation is now faster, and both are now more conformant with the spec.</p>
-<h2 id="performance-and-reliability" tabindex="-1">Performance and reliability <a class="header-anchor" href="https://servo.org/blog/2024/10/03/this-month-in-servo/#performance-and-reliability">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Servo now <strong>sends font data over shared memory</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/33530">#33530</a>), saving a huge amount of time over sending font data over IPC channels.</p>
-<p>We now debounce resize events for <strong>faster window resizing</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33297">#33297</a>), limit <strong>document title updates</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/33287">#33287</a>), and use DirectWrite kerning info for <strong>faster text shaping on Windows</strong> (<a href="https://github.com/crbrz">@crbrz</a>, <a href="https://github.com/servo/servo/pull/33123">#33123</a>).</p>
-<p>Servo has a new kind of <strong>experimental profiling support</strong> that can send profiling data to <a href="https://ui.perfetto.dev/">Perfetto</a> (on all platforms) and <a href="https://github.com/openharmony/hiviewdfx_hitrace">HiTrace</a> (on OpenHarmony) via <a href="https://tracing.rs/"><code>tracing</code></a> (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/33188">#33188</a>, <a href="https://github.com/servo/servo/pull/33301">#33301</a>, <a href="https://github.com/servo/servo/pull/33324">#33324</a>), and we’ve instrumented Servo with this in several places (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/33189">#33189</a>, <a href="https://github.com/servo/servo/pull/33417">#33417</a>, <a href="https://github.com/servo/servo/pull/33436">#33436</a>).
-This is in addition to Servo’s existing <a href="https://book.servo.org/hacking/profiling.html#generating-timelines">HTML-trace-based profiling support</a>.</p>
-<p>We’ve also added a new <code>profiling</code> Cargo profile that builds Servo with the recommended settings for profiling (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/33432">#33432</a>).
-For more details on building Servo for profiling, benchmarking, and other perf-related use cases, check out our updated <a href="https://book.servo.org/hacking/building-servo.html#build-profiles">Building Servo</a> chapter (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/book/pull/22">book#22</a>).</p>
-<h2 id="build-times" tabindex="-1">Build times <a class="header-anchor" href="https://servo.org/blog/2024/10/03/this-month-in-servo/#build-times">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>The first patch towards <a href="https://github.com/servo/servo/issues/1799"><strong>splitting up our massive <code>script</code> crate</strong></a> has landed (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33169">#33169</a>), over ten years since that issue was first opened.</p>
-<p><code>script</code> is the heart of the Servo rendering engine — it contains the HTML event loop plus all of our DOM APIs and their bindings to SpiderMonkey, and the script thread drives the page lifecycle from parsing to style to layout.
-<code>script</code> is also a monolith, with over 170 000 lines of hand-written Rust plus another 520 000 lines of generated Rust, and it has long dominated Servo’s build times to the point of being unwieldy, so it’s very exciting to see that we may be able to change this.</p>
-<p>Contributors to Servo can now enjoy faster <strong>self-hosted CI runners</strong> for our <strong>Linux builds</strong> (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33321">#33321</a>, <a href="https://github.com/servo/servo/pull/33389">#33389</a>), cutting a typical <strong>Linux-only build</strong> from over half an hour to <strong>under 8 minutes</strong>, and a typical <strong><a href="https://book.servo.org/contributing.html#running-tests-in-pull-requests">T-full</a> try job</strong> from over an hour to <strong>under 42 minutes</strong>.</p>
-<p>We’ve now started exploring self-hosted macOS runners (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/ci-runners/pull/3">ci-runners#3</a>), and in the meantime we’ve landed several fixes for self-hosted build failures (<a href="https://github.com/delan">@delan</a>, <a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/33283">#33283</a>, <a href="https://github.com/servo/servo/pull/33308">#33308</a>, <a href="https://github.com/servo/servo/pull/33315">#33315</a>, <a href="https://github.com/servo/servo/pull/33373">#33373</a>, <a href="https://github.com/servo/servo/pull/33471">#33471</a>, <a href="https://github.com/servo/servo/pull/33596">#33596</a>).</p>
-<figure class="_figl"><a href="https://servo.org/img/blog/servoshell-tabs-september-2024.png"><img src="https://servo.org/img/blog/servoshell-tabs-september-2024.png" alt="servoshell on desktop with improved tabbed browsing UI" /></a></figure>
-<figure class="_figl" style="clear: left;"><a href="https://servo.org/img/blog/servoshell-android-september-2024.png"><img src="https://servo.org/img/blog/servoshell-android-september-2024.png" alt="servoshell on Android with new navigation UI" /></a></figure>
-<h2 id="beyond-the-engine" tabindex="-1"><span class="_floatmin"></span>Beyond the engine <a class="header-anchor" href="https://servo.org/blog/2024/10/03/this-month-in-servo/#beyond-the-engine">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>You can now <strong>download <a href="https://book.servo.org/running-servoshell.html">the Servo browser</a> for Android</strong> on <a href="https://servo.org/">servo.org</a> (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/33435">#33435</a>)!
-servoshell now <strong>supports gamepads by default</strong> (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/33466">#33466</a>), <strong>builds for OpenHarmony</strong> (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/33295">#33295</a>), and has <strong>better navigation on Android</strong> (<a href="https://github.com/msub2">@msub2</a>, <a href="https://github.com/servo/servo/pull/33294">#33294</a>).</p>
-<p><strong>Tabbed browsing</strong> on desktop platforms has become a lot more polished, with visible <strong>close and new tab buttons</strong> (<a href="https://github.com/Melchizedek6809">@Melchizedek6809</a>, <a href="https://github.com/servo/servo/pull/33244">#33244</a>), <strong>key bindings for switching tabs</strong> (<a href="https://github.com/Melchizedek6809">@Melchizedek6809</a>, <a href="https://github.com/servo/servo/pull/33319">#33319</a>), as well as better handling of <strong>empty tab titles</strong> (<a href="https://github.com/Melchizedek6809">@Melchizedek6809</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33354">#33354</a>, <a href="https://github.com/servo/servo/pull/33391">#33391</a>) and the <strong>location bar</strong> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/33316">#33316</a>).</p>
-<p>We’ve also fixed <strong>several HiDPI bugs</strong> in servoshell (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/33529">#33529</a>), as well as <strong>keyboard input</strong> and scrolling on Windows (<a href="https://github.com/crbrz">@crbrz</a>, <a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/33225">#33225</a>, <a href="https://github.com/servo/servo/pull/33252">#33252</a>).</p>
-<h2 id="donations" tabindex="-1">Donations <a class="header-anchor" href="https://servo.org/blog/2024/10/03/this-month-in-servo/#donations">
- <span class="icon hashlink"><i class="fas fa-link"></i></span>
- </a></h2>
-<p>Thanks again for your generous support!
-We are now receiving <strong>4147 USD/month</strong> (+34.7% over August) in recurring donations.
-This includes donations from <strong>12 people</strong> on LFX, but we will stop accepting donations there soon — <strong>please move your recurring donations to <a href="https://github.com/sponsors/servo">GitHub</a> or <a href="https://opencollective.com/servo">Open Collective</a></strong>.</p>
-<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>eleven GitHub users</strong> that depend on Servo are sponsoring us there.
-If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
-<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
- <div style="position: relative; text-align: right;">
- <div style="position: absolute; margin-left: calc(100% * 4147 / 10000); padding-left: 0.5em;"><strong>4147</strong> USD/month</div>
- <div style="position: absolute; margin-left: calc(100% * 4147 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
- <div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
- </div>
- <progress value="4147" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
-</div></figure>
-<p>With this money, we’ve been able to pay for our web hosting and self-hosted CI runners for Windows and Linux builds, and when the time comes, we’ll be able to afford macOS runners, perf bots, and maybe even an Outreachy intern or two!
-As always, use of these funds will be decided transparently in the Technical Steering Committee.
-For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>
-<style>
- /* guaranteed minimum width for first paragraph after a float */
- ._floatmin {
- display: block;
- width: 13em;
- overflow: hidden;
- }
- ._none {
- display: none;
- }
- ._fig:not(#specificity) {
- width: 33em;
- max-width: 100%;
- margin: 1em auto;
- }
- ._fig > ._flex {
- display: flex;
- }
- ._fig table {
- text-align: initial;
- }
- ._fig figcaption._notes {
- text-align: left;
- width: max-content;
- max-width: 100%;
- }
- ._figl:not(#specificity),
- ._figr:not(#specificity) {
- margin: 0 1em 1em;
- }
- ._figl {
- float: left;
- max-width: 100%;
- }
- ._figr {
- float: right;
- max-width: 100%;
- }
- ._figl > figcaption,
- ._figr > figcaption,
- ._figl > iframe,
- ._figr > iframe,
- ._figl > video,
- ._figr > video,
- ._figl > a > img,
- ._figr > a > img {
- width: 21em;
- max-width: 100%;
- }
- ._runin {
- margin-bottom: 1em;
- }
- ._runin > p,
- ._runin > h2 {
- display: inline;
- }
- ._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;
- }
-</style>
-
-
-
- Reviving the devtools support in Servo
-
- 2024-09-20T00:00:00Z
- https://servo.org/blog/2024/09/20/devtools/
- <figure><a href="https://servo.org/img/blog/devtools-inspector.png"><img src="https://servo.org/img/blog/devtools-inspector.png" alt="On the left, it shows the DOM inspector with the tree view, CSS list and computed properties views. On the right is servoshell with servo.org opened." /></a>
-<figcaption>The HTML and CSS inspector is able to display the DOM elements and their attributes and CSS properties.</figcaption></figure>
-<p><span class="_floatmin"></span>Servo has been working on improving our <a href="https://firefox-source-docs.mozilla.org/devtools-user">Firefox devtools</a> support as part of the <a href="https://www.outreachy.org/">Outreachy</a> internship program since June, and we’re thrilled to share significant progress.</p>
-<p>Devtools are a set of <strong>browser web developer tools</strong> that allows you to examine, edit, and debug HTML, CSS, and JavaScript.
-Servo leverages existing work from the Firefox devtools to inspect its own websites, employing the same open protocol that is used for connecting to other Firefox instances.</p>
-<p>While relying on a third party API allows us to offer this functionality without building it from scratch, it doesn’t come without downsides.
-Back in June last year, with the release of Firefox 110, changes to the protocol <strong>broke our previous implementation</strong>.
-The core issue was that the message structure sent between Servo and Firefox for the devtools functionality had changed.</p>
-<p>To address this, we first updated an existing patch to fix the connection and list the webviews running in Servo (<a href="https://github.com/fabricedesre">@fabricedesre</a>, <a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/32475">#32475</a>).
-We also had to update the structure of some <a href="https://firefox-source-docs.mozilla.org/devtools/backend/actor-hierarchy.html">actors</a> (pieces of code that respond to messages sent by Firefox with relevant information), since they changed significantly (<a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/servo/servo/pull/32509">#32509</a>).</p>
-<p>One of the main challenges was figuring out the messages we needed to send back to Firefox.
-The <a href="https://searchfox.org/mozilla-central/source/devtools/server/actors">source code</a> for their devtools implementation is very well commented and proved to be invaluable.
-However, it was also helpful to see the actual messages being sent.
-While Servo can show the ones it sends and receives, <strong>debugging another instance of Firefox</strong> to observe its messages was very useful.
-To facilitate this, we made a helper script (<a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/servo/servo/pull/32684">#32684</a>) using <a href="https://www.wireshark.org/">Wireshark</a> to inspect the connection between the devtools client and server, allowing us to view the contents of each packet and search through them.</p>
-<p><strong>Support for the console</strong> was fixed, enabling the execution of JavaScript code directly in Servo’s webviews and displaying any warnings or errors that the page emits (<a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/32727">#32727</a>).</p>
-<figure><a href="https://servo.org/img/blog/devtools-console.png"><img src="https://servo.org/img/blog/devtools-console.png" alt="Developer JavaScript console that shows commands and their results" /></a>
-<figcaption>The JavaScript developer console now displays page logs.
-It can also run commands.</figcaption></figure>
-<p><span class="_floatmin"></span>Finally, the most significant changes involved the <strong>DOM inspector</strong>.
-Tighter integration with Servo’s script module was required to retrieve the properties of each element.
-Viewing CSS styles was particularly challenging, since they can come from many places, including the <code>style</code> attribute, a stylesheet, or from ancestors, but <a href="https://github.com/emilio">@emilio</a> had great insight into where to look.
-As a result, it’s now possible to view the HTML tree, and add, remove, or modify any attribute or CSS property (<a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/32655">#32655</a>, <a href="https://github.com/servo/servo/pull/32884">#32884</a>, <a href="https://github.com/servo/servo/pull/32888">#32888</a>, <a href="https://github.com/servo/servo/pull/33025">#33025</a>).</p>
-<p>There is still work to be done.
-Some valuable features like the Network and Storage tabs are still not functional, and parts of the DOM inspector are still barebones.
-For example, now that flexbox is enabled by default (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/33186">#33186</a>), it would be a good idea to support it in the Layout panel.
-We’re working on <strong>developer documentation</strong> that will be available in the <a href="https://book.servo.org/">Servo book</a> to make future contributions easier.</p>
-<p>That said, the <strong>Console</strong> and <strong>Inspector</strong> support has largely landed, and you can enable them with the <code>--devtools</code> flag in servoshell.
-For a step-by-step guide on how to use Servo’s devtools, check out the new <a href="https://book.servo.org/hacking/using-devtools.html">devtools chapter</a> in the Servo book.
-We’d love to hear your feedback on how these work and what additional features you’d find helpful in your workflow.</p>
-<p>Many thanks to <a href="https://github.com/eerii">@eerii</a> and Outreachy for the internship that made this possible!</p>
-<style>
- /* guaranteed minimum width for first paragraph after a float */
- ._floatmin {
- display: block;
- width: 13em;
- overflow: hidden;
- }
- ._none {
- display: none;
- }
- ._fig:not(#specificity) {
- width: 33em;
- max-width: 100%;
- margin: 1em auto;
- }
- ._fig > ._flex {
- display: flex;
- }
- ._fig table {
- text-align: initial;
- }
- ._fig figcaption._notes {
- text-align: left;
- width: max-content;
- max-width: 100%;
- }
- ._figl:not(#specificity),
- ._figr:not(#specificity) {
- margin: 0 1em 1em;
- }
- ._figl {
- float: left;
- max-width: 100%;
- }
- ._figr {
- float: right;
- clear: right;
- max-width: 100%;
- }
- ._figl > figcaption,
- ._figr > figcaption,
- ._figl > iframe,
- ._figr > iframe,
- ._figl > video,
- ._figr > video,
- ._figl > a > img,
- ._figr > a > img {
- width: 33em;
- max-width: 100%;
- }
- ._runin {
- margin-bottom: 1em;
- }
- ._runin > p,
- ._runin > h2 {
- display: inline;
- }
- ._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;
- }
-</style>
-
-
-
\ No newline at end of file
diff --git a/feeds/feed.xml b/xmls/linmob.xml
similarity index 100%
rename from feeds/feed.xml
rename to xmls/linmob.xml