diff --git a/_posts/2025-12-15-november-in-servo.md b/_posts/2025-12-15-november-in-servo.md new file mode 100644 index 000000000..53dc281a2 --- /dev/null +++ b/_posts/2025-12-15-november-in-servo.md @@ -0,0 +1,135 @@ +--- +layout: post +tags: blog +title: "November in Servo: monthly releases, context menus, parallel CSS parsing, and more!" +date: 2025-12-15 +summary: All of these updates are in Servo 0.0.3. +categories: +--- + +Landing in [**Servo 0.0.3**](https://github.com/servo/servo/releases/tag/v0.0.3) and our November nightly builds, we now have **context menus** for links, images, and other web content ([@atbrakhi](https://github.com/atbrakhi), [@mrobinson](https://github.com/mrobinson), [#40434](https://github.com/servo/servo/pull/40434), [#40501](https://github.com/servo/servo/pull/40501)), **vsync on Android** ([@mrobinson](https://github.com/mrobinson), [#40306](https://github.com/servo/servo/pull/40306)), **light mode** for the **new tab page** ([@arihant2math](https://github.com/arihant2math), [#40272](https://github.com/servo/servo/pull/40272)), plus several web platform features: + +- **<video controls>** ([@rayguo17](https://github.com/rayguo17), [#40578](https://github.com/servo/servo/pull/40578)) +- **<use>** in SVG ([@WaterWhisperer](https://github.com/WaterWhisperer), [#40684](https://github.com/servo/servo/pull/40684)) +- ☢️ **‘font-optical-sizing’** ([@simonwuelker](https://github.com/simonwuelker), [#40829](https://github.com/servo/servo/pull/40829), [#40861](https://github.com/servo/servo/pull/40861), [#40884](https://github.com/servo/servo/pull/40884)) +- **‘brotli’** in **CompressionStream** and **DecompressionStream** ([@Taym95](https://github.com/Taym95), [#40842](https://github.com/servo/servo/pull/40842)) +- **‘display-p3-linear’** in CSS **color()** and **color-mix()** ([@Loirooriol](https://github.com/Loirooriol), [#40525](https://github.com/servo/servo/pull/40525)) +- **calc()** now works in **grid layout** ([@nicoburns](https://github.com/nicoburns), [#34846](https://github.com/servo/servo/pull/34846)) +- **ResizeObserver** is now enabled by default ([@jdm](https://github.com/jdm), [#40378](https://github.com/servo/servo/pull/40378)) + +
+ Servo 0.0.3 showing new support for <use> in SVG, <details name>, and context menus +
+ +**Font variations** are now applied in **‘font-weight’** and **‘font-stretch’** ([@simonwuelker](https://github.com/simonwuelker), [#40867](https://github.com/servo/servo/pull/40867)), fixing a rendering issue in the [Web Engines Hackfest website](https://webengineshackfest.org). + +[@kkoyung](https://github.com/kkoyung) has landed some huge improvements in the [**SubtleCrypto API**](https://w3c.github.io/webcrypto/), including some of the more [modern algorithms in this WICG draft](https://wicg.github.io/webcrypto-modern-algos/), and a fix for constant-time base64 ([@kkoyung](https://github.com/kkoyung), [#40334](https://github.com/servo/servo/pull/40334)). +We now have full support for **SHA3-256**, **SHA3-384**, **SHA3-512** ([@kkoyung](https://github.com/kkoyung), [#40765](https://github.com/servo/servo/pull/40765)), **cSHAKE128**, **cSHAKE256** ([@kkoyung](https://github.com/kkoyung), [#40832](https://github.com/servo/servo/pull/40832)), **Argon2d**, **Argon2i**, **Argon2id**, **ChaCha20-Poly1305**, **ECDH**, **ECDSA**, and **X25519**: + +
+ +| Algorithm | deriveBits | exportKey | generateKey | importKey | sign | verify | +|---|---|---|---|---|---|---| +| Argon2d | [#40936](https://github.com/servo/servo/pull/40936) | n/a | n/a | [#40932](https://github.com/servo/servo/pull/40932) | n/a | n/a | +| Argon2i | [#40936](https://github.com/servo/servo/pull/40936) | n/a | n/a | [#40932](https://github.com/servo/servo/pull/40932) | n/a | n/a | +| Argon2id | [#40936](https://github.com/servo/servo/pull/40936) | n/a | n/a | [#40932](https://github.com/servo/servo/pull/40932) | n/a | n/a | +| ChaCha20-Poly1305 | n/a | [#40948](https://github.com/servo/servo/pull/40948) | n/a | [#40948](https://github.com/servo/servo/pull/40948) | n/a | n/a | +| ECDH | [#40333](https://github.com/servo/servo/pull/40333) | [#40298](https://github.com/servo/servo/pull/40298) | [#40305](https://github.com/servo/servo/pull/40305) | [#40253](https://github.com/servo/servo/pull/40253) | n/a | n/a | +| ECDSA | n/a | [#40536](https://github.com/servo/servo/pull/40536) | [#40553](https://github.com/servo/servo/pull/40553) | [#40523](https://github.com/servo/servo/pull/40523) | [#40591](https://github.com/servo/servo/pull/40591) | [#40557](https://github.com/servo/servo/pull/40557) | +| X25519 | [#40497](https://github.com/servo/servo/pull/40497) | [#40421](https://github.com/servo/servo/pull/40421) | [#40480](https://github.com/servo/servo/pull/40480) | [#40398](https://github.com/servo/servo/pull/40398) | n/a | n/a | +
+ +**<details>** now fires **‘toggle’** events ([@lukewarlow](https://github.com/lukewarlow), [#40271](https://github.com/servo/servo/pull/40271)), and **<details name>** is now exclusive, like radio buttons ([@simonwuelker](https://github.com/simonwuelker), [#40314](https://github.com/servo/servo/pull/40314)). +**InputEvent**, which represents **‘input’** and **‘beforeinput’** events, now has **composed**, **data**, **isComposing**, and **inputType** properties ([@excitablesnowball](https://github.com/excitablesnowball), [#39989](https://github.com/servo/servo/pull/39989)). + +## Embedding API + +**Each webview** can now now have its **own rendering context** ([@mrobinson](https://github.com/mrobinson), [@mukilan](https://github.com/mukilan), [#40794](https://github.com/servo/servo/pull/40794), [#40738](https://github.com/servo/servo/pull/40738), [#40721](https://github.com/servo/servo/pull/40721), [#40594](https://github.com/servo/servo/pull/40594), [#40923](https://github.com/servo/servo/pull/40923)). +This effectively enables full support for **multiple windows**, and we’ve started incorporating that into servoshell ([@mrobinson](https://github.com/mrobinson), [@mukilan](https://github.com/mukilan), [#40883](https://github.com/servo/servo/pull/40883)). + +Our previously unused **context menu API** has been replaced with a new, more effective API that includes actions for links, images, and other web content ([@mrobinson](https://github.com/mrobinson), [@atbrakhi](https://github.com/atbrakhi), [#40402](https://github.com/servo/servo/pull/40402), [#40501](https://github.com/servo/servo/pull/40501), [#40607](https://github.com/servo/servo/pull/40607)). +For more details, see the docs for **[ContextMenu](https://doc.servo.org/servo/struct.ContextMenu.html)**, [EmbedderControl::ContextMenu](https://doc.servo.org/servo/enum.EmbedderControl.html#variant.ContextMenu), and [WebViewDelegate::show_embedder_control()](https://doc.servo.org/servo/trait.WebViewDelegate.html#method.show_embedder_control). + +[**WebView**](https://doc.servo.org/servo/struct.WebView.html) now has [**can_go_back()**](https://doc.servo.org/servo/struct.WebView.html#method.can_go_back) and [**can_go_forward()**](https://doc.servo.org/servo/struct.WebView.html#method.can_go_forward) methods, and servoshell now uses those to disable the back and forward buttons ([@mrobinson](https://github.com/mrobinson), [#40598](https://github.com/servo/servo/pull/40598)). + +Having introduced our new [**RefreshDriver**](https://doc.servo.org/servo/trait.RefreshDriver.html) API in October, we’ve now **removed [Servo](https://doc.servo.org/servo/struct.Servo.html)::animating()** ([@mrobinson](https://github.com/mrobinson), [#40799](https://github.com/servo/servo/pull/40799)) and **[ServoDelegate](https://doc.servo.org/servo/trait.ServoDelegate.html)::notify_animating_changed()** ([@mrobinson](https://github.com/mrobinson), [#40886](https://github.com/servo/servo/pull/40886)), and similarly cleaned up the obsolete and inefficient “animating” state in servoshell ([@mrobinson](https://github.com/mrobinson), [#40715](https://github.com/servo/servo/pull/40715)). + +We’ve moved virtually all of the useful items in the Servo API to the root of the `servo` library crate ([@mrobinson](https://github.com/mrobinson), [#40951](https://github.com/servo/servo/pull/40951)). +This is a **breaking change**, but we expect that it will greatly simplify embedding Servo, and it means you can even write `use servo::*;` in a pinch. + +When running Servo without a custom [**ClipboardDelegate**](https://doc.servo.org/servo/clipboard_delegate/trait.ClipboardDelegate.html), we normally use the system clipboard by default. +But if there’s no system clipboard, we now have a built-in **fallback clipboard** ([@mrobinson](https://github.com/mrobinson), [#40408](https://github.com/servo/servo/pull/40408)), rather than having no clipboard at all. +Note that the fallback clipboard is very limited, as it can only store text and does not work across processes. + +## Performance and stability + +Servo now **parses CSS in parallel** with script and layout ([@mrobinson](https://github.com/mrobinson), [@vimpunk](https://github.com/vimpunk), [#40639](https://github.com/servo/servo/pull/40639), [#40556](https://github.com/servo/servo/pull/40556)), and can now measure [**Largest Contentful Paint**](https://web.dev/articles/lcp) in PerformanceObserver as well as in our internal profiling tools ([@shubhamg13](https://github.com/shubhamg13), [@boluochoufeng](https://github.com/boluochoufeng), [#39714](https://github.com/servo/servo/pull/39714), [#39384](https://github.com/servo/servo/pull/39384)). + +**Just-in-time compilation** (JIT) is now **optional** ([@jschwe](https://github.com/jschwe), [#37972](https://github.com/servo/servo/pull/37972)), which can be useful in situations where generating native code is forbidden by policy or unwanted for other reasons. + +We’ve improved the performance of incremental layout ([@Loirooriol](https://github.com/Loirooriol), [@mrobinson](https://github.com/mrobinson), [#40795](https://github.com/servo/servo/pull/40795), [#40797](https://github.com/servo/servo/pull/40797)), touch input ([@kongbai1996](https://github.com/kongbai1996), [#40637](https://github.com/servo/servo/pull/40637)), animated GIF rendering ([@mrobinson](https://github.com/mrobinson), [#40158](https://github.com/servo/servo/pull/40158)), the prefs subsystem ([@webbeef](https://github.com/webbeef), [#40775](https://github.com/servo/servo/pull/40775)), and parseFromString() on DOMParser ([@webbeef](https://github.com/webbeef), [#40742](https://github.com/servo/servo/pull/40742)). +We also use fewer IPC resources when internal profiling features are disabled ([@lumiscosity](https://github.com/lumiscosity), [#40823](https://github.com/servo/servo/pull/40823)). + +We’ve fixed a bug causing **nytimes.com** to hang ([@jdm](https://github.com/jdm), [#40811](https://github.com/servo/servo/pull/40811)), as well as fixing crashes in **[Speedometer 3.0](https://www.browserbench.org/Speedometer3.0/)** and **[3.1](https://www.browserbench.org/Speedometer3.1/)** ([@Narfinger](https://github.com/Narfinger), [#40459](https://github.com/servo/servo/pull/40459)), grid layout ([@nicoburns](https://github.com/nicoburns), [#40821](https://github.com/servo/servo/pull/40821)), the fonts subsystem ([@simonwuelker](https://github.com/simonwuelker), [#40913](https://github.com/servo/servo/pull/40913)), XPath ([@simonwuelker](https://github.com/simonwuelker), [#40411](https://github.com/servo/servo/pull/40411)), ReadableStream ([@Taym95](https://github.com/Taym95), [#40911](https://github.com/servo/servo/pull/40911)), AudioContext ([@Taym95](https://github.com/Taym95), [#40729](https://github.com/servo/servo/pull/40729)), and when exiting Servo ([@mrobinson](https://github.com/mrobinson), [#40933](https://github.com/servo/servo/pull/40933)). + +## Donations + +Thanks again for your generous support! +We are now receiving **6433 USD/month** (+11.8% over October) in recurring donations. +This helps us cover the cost of our **[speedy](https://ci0.servo.org) [CI](https://ci1.servo.org) [and](https://ci2.servo.org) [benchmarking](https://ci3.servo.org) [servers](https://ci4.servo.org)**, one of our latest **[Outreachy interns](https://www.outreachy.org/alums/2025-06/#:~:text=Servo)**, and funding **[maintainer work]({{ '/blog/2025/09/17/your-donations-at-work-funding-jdm/' | url }})** that helps more people contribute to Servo. + +Servo is also on [thanks.dev](https://thanks.dev), and already **28 GitHub users** (same as October) that depend on Servo are sponsoring us there. +If you use Servo libraries like [url](https://crates.io/crates/url/reverse_dependencies), [html5ever](https://crates.io/crates/html5ever/reverse_dependencies), [selectors](https://crates.io/crates/selectors/reverse_dependencies), or [cssparser](https://crates.io/crates/cssparser/reverse_dependencies), signing up for [thanks.dev](https://thanks.dev) could be a good way for you (or your employer) to give back to the community. + +We now have [**sponsorship tiers**]({{ '/blog/2025/11/21/sponsorship-tiers/' | url }}) that allow you or your organisation to donate to the Servo project with public acknowlegement of your support. +A big thanks from Servo to our newest Bronze Sponsors: **Jenny & Phil Porada**, **Josh Aas**, **LambdaTest**, and **Sandwich**! +If you’re interested in this kind of sponsorship, please contact us at [join@servo.org](mailto:join@servo.org). + +
+
+
6433 USD/month
+
+
+
10000
+
+ +
+ +Use of donations is decided transparently via the Technical Steering Committee’s public **[funding request process](https://github.com/servo/project/blob/main/FUNDING_REQUEST.md)**, and active proposals are tracked in [servo/project#187](https://github.com/servo/project/issues/187). +For more details, head to our [Sponsorship page]({{ '/sponsorship/' | url }}). + + + + diff --git a/assets/img/blog/2025-12-diffie.png b/assets/img/blog/2025-12-diffie.png new file mode 100644 index 000000000..465067aea Binary files /dev/null and b/assets/img/blog/2025-12-diffie.png differ