# servo 0.4.0 - Product: servo (https://whatsnew.fyi/product/servo) - Vendor: servo - Date: 2026-07-31 - Version: 0.4.0 - Original notes: https://github.com/servo/servo/releases/tag/0.4.0 - Permalink: https://whatsnew.fyi/product/servo/releases/0.4.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Implement console.dir - **added** — Implement Unrooted Inclusive Ancestor iterator in script - **added** — Introduce PreviewId in devtools to get previews - **added** — Enable legacy touch events event handler - **added** — Introduce Promise::reject_error_with_cx - **added** — Introduce Promise::{resolve,reject}_native_with_cx - **added** — Implement muted errors - **changed** — Use SecureContext on namespaces in webgpu - **changed** — Upgrade surfman to 0.12.2 - **changed** — Rewrite the StackingContextTree to be sparse - **changed** — Rely on egui to know when widgets are animating in servoshell - **changed** — Rename *Image* to *Texel* in webgpu - **changed** — Forward all mouse motion events to egui in servoshell - **changed** — Generate new blob URL per createObjectURL call - **changed** — Propagate wake lock type in permission requests - **fixed** — Fix UA stylesheet for input type=radio - **fixed** — Root unbound nodes until next reflow is finished - **fixed** — Fix an image cache leak on reloads - **fixed** — Fix response panic on closed channel in canvas - **fixed** — Do not rasterize SVG images for the same size multiple times See our [June blog post](https://servo.org/blog/2026/07/31/june-in-servo/) for a curated overview of the changes in this release. ##### Trying out the Servo Tech Demo [troubleshooting guide]: https://servo.org/download/#troubleshooting ###### Linux If you see an error `loading shared libraries` when starting servo on Linux, please refer to the [troubleshooting guide]. ###### HarmonyOS Please note that the `servo-aarch64-linux-ohos.hap` attached here is signed for OpenHarmony, not HarmonyOS. For HarmonyOS self-signing is currently required - You can download the `servo-aarch64-linux-ohos.so` shared library and use DevEco Studio to follow the instructions in the ArkTS [Servo Demo repository](https://github.com/jschwe/ServoDemo) ##### What's Changed Please check out our [June blog post](https://servo.org/blog/2026/07/31/june-in-servo/) to get a curated overview over the recent changes.
Generated Release notes ##### What's Changed * deps: Bump `sha3` to 0.12 by @kkoyung in https://github.com/servo/servo/pull/45280 * webgpu: Use SecureContext on namespaces by @sagudev in https://github.com/servo/servo/pull/45279 * layout: fix UA stylesheet for `` by @RichardTjokroutomo in https://github.com/servo/servo/pull/44627 * Implement console.dir by @Taym95 in https://github.com/servo/servo/pull/45109 * layout: Root unbound nodes until next reflow is finished. by @alice in https://github.com/servo/servo/pull/44949 * layout: Avoid extra work when there is no strong BiDi content by @mrobinson in https://github.com/servo/servo/pull/45007 * libservo: Add documentation for more public types. by @mukilan in https://github.com/servo/servo/pull/45282 * script: Implement Unrooted Inclusive Ancestor iterator by @Narfinger in https://github.com/servo/servo/pull/44906 * devtools: introduce `PreviewId` in order to get previews by @atbrakhi in https://github.com/servo/servo/pull/45139 * deps: Upgrade surfman to `0.12.2` by @mrobinson in https://github.com/servo/servo/pull/45286 * webgpu: `interface` -> `namespace` to reduce webidl diff by @sagudev in https://github.com/servo/servo/pull/45284 * layout: Rewrite the StackingContextTree to be sparse by @mrobinson in https://github.com/servo/servo/pull/45208 * layout: Preserve active `display: contents` when handling anonymous table parts by @Loirooriol in https://github.com/servo/servo/pull/45287 * net: Fix an image cache leak on reloads by @jschwe in https://github.com/servo/servo/pull/45261 * ci: Fix etc/ci/scenario Python types by @janeoa in https://github.com/servo/servo/pull/45204 * servoshell: Rely on egui to know when widgets are animating by @mrobinson in https://github.com/servo/servo/pull/45289 * tests: Fix warning about unused variable in webview tests by @jschwe in https://github.com/servo/servo/pull/45291 * webgpu: rename `*Image*` -> `*Texel*` by @sagudev in https://github.com/servo/servo/pull/45292 * script_bindings: Move more of the constructor into non-generated code by @Narfinger in https://github.com/servo/servo/pull/44948 * servo: In `test_preferences_change` more thoroughly test setting `grid-column` by @Loirooriol in https://github.com/servo/servo/pull/45293 * deps: Bump `ml-dsa` to 0.1 by @kkoyung in https://github.com/servo/servo/pull/45294 * fonts: Remove redundant `hardcoded_font_families` for ohos by @RichardTjokroutomo in https://github.com/servo/servo/pull/45296 * webgpu: Reshuffle and split encoder mixins, remove some unused dictionaries in webidl by @sagudev in https://github.com/servo/servo/pull/45298 * script: Enable legacy touch events event handler by @stevennovaryo in https://github.com/servo/servo/pull/45049 * Fix building on RISC-V by @fxzjshm in https://github.com/servo/servo/pull/45285 * net: Do not rasterize SVG images for the same size multiple times by @Narfinger in https://github.com/servo/servo/pull/44805 * layout: tab-size applies to inline elements, n _[Truncated at 4000 characters — full notes: https://github.com/servo/servo/releases/tag/0.4.0]_