Download Latest Version servo-x86_64-windows-msvc.exe (143.2 MB)
Email in envelope

Get an email when there's a new version of Servo

Home / v0.5.0
Name Modified Size InfoDownloads / Week
Parent folder
servo-aarch64-apple-darwin.dmg.sha256 2026-08-28 107 Bytes
servo-aarch64-apple-darwin.dmg 2026-08-28 115.0 MB
servo-x86_64-apple-darwin.dmg.sha256 2026-08-28 96 Bytes
servo-x86_64-apple-darwin.dmg 2026-08-28 118.4 MB
README.md 2026-08-15 48.3 kB
v0.5.0 source code.tar.gz 2026-08-15 169.1 MB
v0.5.0 source code.zip 2026-08-15 295.5 MB
servo-aarch64-linux-ohos.hap.sha256 2026-08-13 94 Bytes
servo-aarch64-linux-ohos.hap 2026-08-13 99.9 MB
servo-aarch64-linux-ohos.so.sha256 2026-08-13 93 Bytes
servo-x86_64-windows-msvc.zip.sha256 2026-08-13 95 Bytes
servo-aarch64-android.aar.sha256 2026-08-13 91 Bytes
servo-x86_64-linux-gnu.tar.gz.sha256 2026-08-13 95 Bytes
servo-aarch64-android.aar 2026-08-13 41.0 MB
servo-x86_64-linux-gnu.tar.gz 2026-08-13 50.0 MB
servo-aarch64-linux-ohos.so 2026-08-13 122.7 MB
servo-x86_64-windows-msvc.zip 2026-08-13 104.0 MB
servo-aarch64-android.apk.sha256 2026-08-13 91 Bytes
servo-aarch64-linux-gnu.tar.gz.sha256 2026-08-13 96 Bytes
servo-x86_64-windows-msvc.exe.sha256 2026-08-13 95 Bytes
servo-aarch64-linux-gnu.tar.gz 2026-08-13 49.1 MB
servo-aarch64-android.apk 2026-08-13 121.0 MB
servo-x86_64-windows-msvc.exe 2026-08-13 115.4 MB
servo-v0.5.0-src-vendored.tar.gz 2026-08-13 378.8 MB
Totals: 24 Items   1.8 GB 0

See our July blog post for a curated overview of the changes in this release.

Trying out the Servo Tech Demo

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

What's Changed

Please check out our July blog post to get a curated overview over the recent changes.

Generated Release notes ## What's Changed * android: Convert refresh button on large screen to Compose UI by @veyndan in https://github.com/servo/servo/pull/46085 * script: Implement importKey and exportKey operation of Ed448 by @kkoyung in https://github.com/servo/servo/pull/46141 * net: Avoid creating empty cookie map entries on cookie deletion by @arayaryoma in https://github.com/servo/servo/pull/46124 * script: Store unminified data: URL scripts under a generated file name by @officialasishkumar in https://github.com/servo/servo/pull/45119 * android: Set AR and RANLIB by @jschwe in https://github.com/servo/servo/pull/46128 * android: Determine default config dir and lower minSdk by @jschwe in https://github.com/servo/servo/pull/46142 * script: Define scoped document set for CustomElementRegistry by @shubhamg13 in https://github.com/servo/servo/pull/46073 * script: Switch reporting_observer_list to store Dom instead of DomRoot by @cychronex-labs in https://github.com/servo/servo/pull/46139 * script: Remove `GlobalScope::get_cx()` by @TimvdLippe in https://github.com/servo/servo/pull/46147 * script: Use range boundary point position algorithm by @SimonSapin in https://github.com/servo/servo/pull/46126 * script: Remove `ScriptThread::get_cx()` by @TimvdLippe in https://github.com/servo/servo/pull/46150 * script: Remove SafeJSContext by @TimvdLippe in https://github.com/servo/servo/pull/46151 * Upgrade to Stylo with touch action property by @nicoburns in https://github.com/servo/servo/pull/46159 * script: Pass &mut JSContext to get_in_memory_bytes by @kunalmohan in https://github.com/servo/servo/pull/46166 * script: Migrate `dom/media` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46156 * layout: Refactor accessibility tree child node update logic by @alice in https://github.com/servo/servo/pull/45971 * dependabot: Group wgpu and only allow patch updates by @sagudev in https://github.com/servo/servo/pull/46177 * deny: Allow some `quick-xml` advistories by @mrobinson in https://github.com/servo/servo/pull/46192 * android: Set explicit panic hook by @jschwe in https://github.com/servo/servo/pull/46157 * net: Catch panics in `resvg::render` with `catch_unwind`. by @mukilan in https://github.com/servo/servo/pull/46185 * script/net: Drop `ModuleFetchClient` in favour of `RequestClient` by @Gae24 in https://github.com/servo/servo/pull/46163 * devtools: keep object actor identity stable across grips by @atbrakhi in https://github.com/servo/servo/pull/46201 * script: Make `IframeCollection::set_viewport_details` resilient to missing `<iframe>`s by @mrobinson in https://github.com/servo/servo/pull/46194 * script: Implement sign, verify and generateKey operations of Ed448 by @kkoyung in https://github.com/servo/servo/pull/46180 * script: Remove `FromJSValConvertible::from_jsval` by @Gae24 in https://github.com/servo/servo/pull/46191 * mach: Use git diff-tree to extract WPT changes in the export script by @jschwe in https://github.com/servo/servo/pull/46227 * script: Remove dead code in document module by @yezhizhen in https://github.com/servo/servo/pull/46228 * android: Convert navigation bar to Compose UI by @veyndan in https://github.com/servo/servo/pull/46164 * mach: Add necessary space between command-line arguments `windows.py` and handle GStreamer failed installation by @dDostalker in https://github.com/servo/servo/pull/46181 * script: Remove dead code from `HTMLCanvasElement` & `CanvasRenderingContext2D` by @yezhizhen in https://github.com/servo/servo/pull/46225 * mach: Add debugmozjs support to the try-parser by @jschwe in https://github.com/servo/servo/pull/46222 * layout: Make accessibility tree an actual tree. by @alice in https://github.com/servo/servo/pull/45798 * libservo: Add crate level documentation by @mukilan in https://github.com/servo/servo/pull/46193 * webgpu: Support `GPUExternalTexture` by @sagudev in https://github.com/servo/servo/pull/45873 * script: Update `<select>` shadow tree after call to setValue by @simonwuelker in https://github.com/servo/servo/pull/46230 * script: Remove clippy lint by refactoring code and using FxHashSet for intermediate hashset by @Narfinger in https://github.com/servo/servo/pull/46238 * script: Do not trigger restyles on light tree children not in the flat tree by @mrobinson in https://github.com/servo/servo/pull/46188 * script: JSContextify serviceworker by @Narfinger in https://github.com/servo/servo/pull/46243 * script: JSContextify fetch, elementinteral/servointernal and webrtc by @Narfinger in https://github.com/servo/servo/pull/46248 * layout: Explicitly collect `Vec` in `table/layout.rs` to avoid clippy exception by @Narfinger in https://github.com/servo/servo/pull/46239 * android: Replace `dispatchAction` with regular functions by @veyndan in https://github.com/servo/servo/pull/46253 * mach: Fix confusing servo_binary arg on android / ohos by @jschwe in https://github.com/servo/servo/pull/46198 * script: Migrate `dom/webvtt` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46254 * Update stylo (enable scrollbar-color/scrollbar-width behind a pref for the servo engine) by @UMCEKO in https://github.com/servo/servo/pull/46256 * layout: Do not create widgets for elements with the `content` property by @mrobinson in https://github.com/servo/servo/pull/46249 * script: Pass `&mut JSContext` to conversions by @TimvdLippe in https://github.com/servo/servo/pull/46229 * script: Remove dead code in module `node` by @yezhizhen in https://github.com/servo/servo/pull/46260 * script: Do not clone nodes into a live document for SVG's `<use>` by @mrobinson in https://github.com/servo/servo/pull/46261 * script: Use `safe_to_jsval` where possible by @TimvdLippe in https://github.com/servo/servo/pull/46262 * net: Gracefully handle Servo crashes in the `FetchThread` by @mrobinson in https://github.com/servo/servo/pull/46264 * script: Do not crash with delete command when cursor is at start of the editing host by @TimvdLippe in https://github.com/servo/servo/pull/46265 * script: JSContextify `get_cssom_stylesheet` by @lumiscosity in https://github.com/servo/servo/pull/46267 * script: Migrate `dom/debugger` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46268 * script: Clean up and fully migrate `dom/geometry` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46269 * script: JSContextify `dom/node/nodelist.rs` by @lumiscosity in https://github.com/servo/servo/pull/46270 * stylo: Don't traverse text nodes by @simonwuelker in https://github.com/servo/servo/pull/46272 * Upgrade num-bigint from v0.4.7 (yanked) to v0.4.8 by @Loirooriol in https://github.com/servo/servo/pull/46275 * android: Convert toolbar buttons on large screens to Compose UI by @veyndan in https://github.com/servo/servo/pull/46257 * dom_struct: Stop expecting dead code; script: Remove dead code in servoparser & pointerevent by @yezhizhen in https://github.com/servo/servo/pull/46278 * CI: Install shellcheck dependency for test-scripts by @cychronex-labs in https://github.com/servo/servo/pull/46276 * script: Migrate `dom/workers` and `dom/permissions` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46284 * script: Migrate `dom/document` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46285 * script: Do not clone script data unnecessarily by @Narfinger in https://github.com/servo/servo/pull/46072 * script: Do not panic on WebGL command errors in debug mode by @mrobinson in https://github.com/servo/servo/pull/46282 * script: Enable serviceworker flag for CSP tests by @TimvdLippe in https://github.com/servo/servo/pull/46279 * android: Remove unused resources by @veyndan in https://github.com/servo/servo/pull/46287 * script: Refactor GL_POINT_SPRITE / GL_PROGRAM_POINT_SIZE into a helper function by @mrobinson in https://github.com/servo/servo/pull/46283 * deps: Bump ecdsa to 0.17 and p256 to 0.14 by @kkoyung in https://github.com/servo/servo/pull/46299 * android: Redownload all Material drawables by @veyndan in https://github.com/servo/servo/pull/46290 * android: Add CI smoketest by @jschwe in https://github.com/servo/servo/pull/46158 * mach: Remove support for installing dependencies via Chocolately by @dpaoliello in https://github.com/servo/servo/pull/42372 * script: Don't store `DomRoot` inside `Performance` interfaces by @Gae24 in https://github.com/servo/servo/pull/46301 * script: Avoid creating a `Trusted<Document>` during GC by @jschwe in https://github.com/servo/servo/pull/46255 * script: JSContextify credentialsmanager and formdata by @Narfinger in https://github.com/servo/servo/pull/46246 * net: Expose thread-local bool to suppress custom panic hook. by @mukilan in https://github.com/servo/servo/pull/46226 * android: Support Android 10 and unify API-level definition by @jschwe in https://github.com/servo/servo/pull/46308 * layout: Clear fragments and caches under layout roots after failed layout root layout by @mrobinson in https://github.com/servo/servo/pull/46127 * layout: Fix `<textarea>` selection hit testing for 2+ words per line by @SimonSapin in https://github.com/servo/servo/pull/46309 * script: JSContextify fontface, WebGPU, formdata by @Narfinger in https://github.com/servo/servo/pull/46310 * layout: Clear laid out fragments of descendants when `content` is replaced by @Loirooriol in https://github.com/servo/servo/pull/46314 * android: Remove setting to show if screen is redrawing by @veyndan in https://github.com/servo/servo/pull/46311 * mach: Fix flaky fail in test-scripts by @jschwe in https://github.com/servo/servo/pull/46315 * script: Disable incremental garbage collection by @mrobinson in https://github.com/servo/servo/pull/46316 * script: Relax lifetime requirements on UnrootedIterators by @Narfinger in https://github.com/servo/servo/pull/46143 * deps: Update crossbeam-epoch from 0.9.18 to 0.9.20 (RUSTSEC-2026-0204) by @Loirooriol in https://github.com/servo/servo/pull/46324 * script: Migrate `dom/performance` to `&mut JSContext` by @lumiscosity in https://github.com/servo/servo/pull/46318 * net: Fix heuristic cache behavior to require revalidation by default by @arayaryoma in https://github.com/servo/servo/pull/46307 * script: Remove some unnecessary JSContext arguments. by @jdm in https://github.com/servo/servo/pull/46330 * script: Move MutationObserver and VisualViewport to JSContext by @Narfinger in https://github.com/servo/servo/pull/46312 * script: Align `Node::Insert` according to Specs by @shubhamg13 in https://github.com/servo/servo/pull/46328 * android: Remove usage of Fragments by @veyndan in https://github.com/servo/servo/pull/46317 * script: Implement fetching request for track elements by @TimvdLippe in https://github.com/servo/servo/pull/46289 * script: Move html elements into documentmetadata by @TimvdLippe in https://github.com/servo/servo/pull/46331 * script: Implement importKey and exportKey operation of X448 by @kkoyung in https://github.com/servo/servo/pull/46334 * layout: Incrementally update accessibility tree based on DOM changes by @alice in https://github.com/servo/servo/pull/45578 * script: Finish JSContextify, remove CanGc and CanGc reflect methods by @Narfinger in https://github.com/servo/servo/pull/46333 * script: Ignore non-activatable `<area>` elements when clicking a image by @simonwuelker in https://github.com/servo/servo/pull/46341 * ci: Remove unneeded install step by @jschwe in https://github.com/servo/servo/pull/46342 * wpt: Wait for document.fonts.ready in empty-text-baseline-001/002.html by @simonwuelker in https://github.com/servo/servo/pull/46344 * script: Immediately root permissions descriptor objects by @Narfinger in https://github.com/servo/servo/pull/46195 * android: Replace `ConstraintLayout` with `LinearLayout` by @veyndan in https://github.com/servo/servo/pull/46345 * script: Throw meaningful exception for Element.matches. by @jdm in https://github.com/servo/servo/pull/46352 * Upgrade Stylo to 2026-07-01 by @Loirooriol in https://github.com/servo/servo/pull/46129 * layout: Don't shrink static position rect in `HoistedAbsolutelyPositionedBox::layout` when aligning with containing block by @simonwuelker in https://github.com/servo/servo/pull/46358 * Upgrade to Stylo with scroll-behavior props gated at runtime by @nicoburns in https://github.com/servo/servo/pull/46357 * script: Implement deriveBits and generateKey operations of X448 by @kkoyung in https://github.com/servo/servo/pull/46376 * script: Remove cx argument from macros by @TimvdLippe in https://github.com/servo/servo/pull/46375 * Replace `RefCell<bool / u32 / usize>` with `Cell` by @SimonSapin in https://github.com/servo/servo/pull/46377 * script: Fix crash when assigning invalid values to adoptedStylesheets by @TimvdLippe in https://github.com/servo/servo/pull/46373 * script: Cleanup codegen after JSContext migration by @TimvdLippe in https://github.com/servo/servo/pull/46374 * script: Implement `KeyframeEffect::{getKeyframes/setKeyframes}` by @simonwuelker in https://github.com/servo/servo/pull/46118 * script: Fix some potential borrow hazards by @Narfinger in https://github.com/servo/servo/pull/46381 * android: Convert progress indicator to Compose UI by @veyndan in https://github.com/servo/servo/pull/46353 * Unpin some crypto dependencies by @atouchet in https://github.com/servo/servo/pull/46401 * script: Implement getPublicKey operations of Ed448 and X448 by @kkoyung in https://github.com/servo/servo/pull/46402 * layout: Use `Vec::clear()` instead of `Vec::truncate(0)` in `table/construct.rs` by @Narfinger in https://github.com/servo/servo/pull/46408 * ci: Remove vello compilation check from Windows by @yezhizhen in https://github.com/servo/servo/pull/46409 * url: Add a fast path for matching about:blank against non about: URLs. by @jdm in https://github.com/servo/servo/pull/46411 * layout: Use the `Stylist` to get list of `@font-face` rules by @simonwuelker in https://github.com/servo/servo/pull/46271 * script: Consolidate Window-specific request client logic. by @jdm in https://github.com/servo/servo/pull/46412 * net: Support stale-while-revalidate directive by @arayaryoma in https://github.com/servo/servo/pull/46060 * script: Don't store rooted values inside `ElementInternals` and `FormData` by @Gae24 in https://github.com/servo/servo/pull/46349 * script: Add unrooted variant of `MessageSource` by @Gae24 in https://github.com/servo/servo/pull/46419 * script: Fix Borrow Hazards in ByteTeeUnderlyingSource by @Narfinger in https://github.com/servo/servo/pull/46384 * servoshell: Align console behavior for shell and double‑click launches by @yezhizhen in https://github.com/servo/servo/pull/43010 * script: Convert `DomRoot` usages to `Dom` inside event types by @Gae24 in https://github.com/servo/servo/pull/46418 * script: Update shadow tree after an <option> element is picked to update visuals of <select> element by @rhit-kapilaar in https://github.com/servo/servo/pull/46386 * script: Migrate some calls from `DomRefCell::borrow_mut` to `safe_borrow_mut(cx.no_gc())` by @simonwuelker in https://github.com/servo/servo/pull/46435 * net/script: Allow Content-Length header to inform buffers downstream by @Narfinger in https://github.com/servo/servo/pull/45758 * fonts: Properly resolve conflicts between `@font-face` rules by @simonwuelker in https://github.com/servo/servo/pull/46436 * script: Reduce unnecessary rooting in `ScriptWindowProxies::insert` by @yezhizhen in https://github.com/servo/servo/pull/46430 * layout: Properly account for nested PBM of ancestor inline boxes for floats inside inline boxes by @Loirooriol in https://github.com/servo/servo/pull/46407 * layout: add support for box-decoration-break by @Psychpsyo in https://github.com/servo/servo/pull/45492 * script: Have `SVGSVGElement` store `Uuid` directly instead of the `String` representation of a `Uuid` by @Narfinger in https://github.com/servo/servo/pull/46438 * script: avoid `DomRoot` inside `IDBIndex`, `GPUCompilationMessage` and `XRInputSource` by @Gae24 in https://github.com/servo/servo/pull/46420 * webgpu: Update to wgpu v30 by @sagudev in https://github.com/servo/servo/pull/46178 * Script: Enable SVG presentation attributes with updated stylo dependency by @mu-mostafa98 in https://github.com/servo/servo/pull/45405 * script: Reduce rooting in Headers, Response, Request, FetchContext by @yezhizhen in https://github.com/servo/servo/pull/46446 * script: Support font in <text> in svg by @yodalee in https://github.com/servo/servo/pull/45979 * script: Fix Web Audio borrow hazards by @Taym95 in https://github.com/servo/servo/pull/46452 * deny: Ignore `rustybuzz` unmaintained by @yezhizhen in https://github.com/servo/servo/pull/46457 * fonts-traits: Don't implement Eq for FontTemplateDescriptor by @Loirooriol in https://github.com/servo/servo/pull/46453 * script: Use safe typed array slice APIs. by @jdm in https://github.com/servo/servo/pull/46416 * base: Improve documentation for GenericOneshot channel by @Narfinger in https://github.com/servo/servo/pull/42116 * tracing: Implement instrument_all macro by @Narfinger in https://github.com/servo/servo/pull/42578 * canvas: Enable multithreading in vello_cpu & workaround panic (improve 27% FPS , 7% power efficiency) by @yezhizhen in https://github.com/servo/servo/pull/46410 * deps: Update freetype and harfbuzz by @jschwe in https://github.com/servo/servo/pull/46233 * deps: Update mozangle by @jschwe in https://github.com/servo/servo/pull/46455 * script: Don't always allocate `NodeRareData` when accessing `WeakRangeVec` by @mrobinson in https://github.com/servo/servo/pull/46440 * fonts: Fix unused_mut warning on ohos by @jschwe in https://github.com/servo/servo/pull/46473 * script_bindings: Pass cx to Setlike/Maplike/Iterable methods by @simonwuelker in https://github.com/servo/servo/pull/46472 * servoshell: Flip width and height to correct order by @janeoa in https://github.com/servo/servo/pull/46477 * ci: Pin versions for install-action to avoid breakage by @jschwe in https://github.com/servo/servo/pull/46492 * script: Store `DocumentLoader::blocking_loads` in a `HashSet` instead of a `Vec` by @Narfinger in https://github.com/servo/servo/pull/45974 * fonts: Always bundle freetype on android and ohos by @jschwe in https://github.com/servo/servo/pull/46480 * script: Flush author fonts when accessing document.fonts by @simonwuelker in https://github.com/servo/servo/pull/46495 * layout: Avoid extra tree walks when removing accessibility nodes. by @alice in https://github.com/servo/servo/pull/46348 * script: Reduce rooting in various places by @yezhizhen in https://github.com/servo/servo/pull/46498 * script_bindings: Use `PhantomData` in `UnrootedDom` and implement `Debug` and `Clone` by @mrobinson in https://github.com/servo/servo/pull/46499 * script: Require rooted handles in HeapBufferSource::new by @Taym95 in https://github.com/servo/servo/pull/46462 * webcrypto: Add error messages for `webcrypto` crate. by @eachra-bawn in https://github.com/servo/servo/pull/46478 * webgpu: Support `GPUTextureUsage::TRANSIENT_ATTACHMENT` and `GPUCanvasContext::getConfiguration` by @sagudev in https://github.com/servo/servo/pull/46286 * layout/script/fonts: Implement size_hint for iterator if easy by @Narfinger in https://github.com/servo/servo/pull/46437 * servoshell: Call `RenderingContext::resize` when a window is resized synchronously after `Window::request_inner_size` by @janeoa in https://github.com/servo/servo/pull/46475 * script: Bump to mozjs with safe APIs by @Gae24 in https://github.com/servo/servo/pull/46461 * layout: Account for nested inline boxes when adjusting floats in RTL inline layout by @Loirooriol in https://github.com/servo/servo/pull/46500 * script_bindings: Remove the `LayoutFromRaw` trait by @mrobinson in https://github.com/servo/servo/pull/46506 * layout: Remove some unnecessary mut by @Narfinger in https://github.com/servo/servo/pull/46496 * webgpu: Proper cleanup in GPUBuffer by @sagudev in https://github.com/servo/servo/pull/46415 * script: WeakReferenceable as Rc-ed dom_struct by @sagudev in https://github.com/servo/servo/pull/42311 * script: Centralize `get_buffer_source_copy/slice` logic by @shubhamg13 in https://github.com/servo/servo/pull/46069 * android: Remove needless key interceptors in `MainActivity` by @veyndan in https://github.com/servo/servo/pull/46355 * script: Populate `document.fonts` with web fonts from CSS by @simonwuelker in https://github.com/servo/servo/pull/46509 * script: Align `lookup_custom_element_definition` according to specs by @shubhamg13 in https://github.com/servo/servo/pull/46179 * ci: Fix broken windows self-hosted builds by @jschwe in https://github.com/servo/servo/pull/46533 * script: Mechanically migrate to `reflect_dom_object_with_proto` by @TimvdLippe in https://github.com/servo/servo/pull/46529 * ci: Disable macOS's C API job on push to 'main'. by @mukilan in https://github.com/servo/servo/pull/45703 * net: Handle brotli/zstd decode failures as `DecompressionError` by @arayaryoma in https://github.com/servo/servo/pull/46508 * script: Implement table-related TODO of the delete command by @Psychpsyo in https://github.com/servo/servo/pull/46539 * fonts: Deduplicate web font requests to the same URL by @simonwuelker in https://github.com/servo/servo/pull/46526 * script: Reduce rooting in Stream by @yezhizhen in https://github.com/servo/servo/pull/46548 * Use `fontsan` with `wuff`-backed (pure rust) WOFF decoding by @nicoburns in https://github.com/servo/servo/pull/46439 * net: Parse proxy auth by @Narfinger in https://github.com/servo/servo/pull/46521 * layout: Adjust the static position of abspos inside float in inline layout by @Loirooriol in https://github.com/servo/servo/pull/46505 * script: Remove duplicate `LargestContentfulPaint` in `Bindings.conf` by @shubhamg13 in https://github.com/servo/servo/pull/46552 * script: Always reset document.fonts.ready after starting to load web fonts by @simonwuelker in https://github.com/servo/servo/pull/46541 * script: Remove Borrow Hazard in HTMLImageElement:react_to_environment_changes_sync_step by @Narfinger in https://github.com/servo/servo/pull/46405 * fonts: Small optimization in WebFont download handler by @Narfinger in https://github.com/servo/servo/pull/46528 * script: Switch GetClientRect and dirty_all_nodes to use unrooted iterators by @Narfinger in https://github.com/servo/servo/pull/46144 * net: Do not return svg rasterization if requested size is zero width/height by @Narfinger in https://github.com/servo/servo/pull/46199 * script: Poll gamepad events in a seperate thread by @log101 in https://github.com/servo/servo/pull/44792 * layout: Treat `<button>` as a widget by @Loirooriol in https://github.com/servo/servo/pull/46536 * script: Initialize descriptor fields of css-connected FontFace objects by @simonwuelker in https://github.com/servo/servo/pull/46537 * script: Use `as_slice_safe` for `get_buffer_source_slice` by @shubhamg13 in https://github.com/servo/servo/pull/46550 * layout: Add statistics for accessibility updates. by @alice in https://github.com/servo/servo/pull/46385 * script: Remove `Document::switch_the_fontfaceset_to_loading_if_needed` by @simonwuelker in https://github.com/servo/servo/pull/46557 * script: Implement insertimage command by @Psychpsyo in https://github.com/servo/servo/pull/46538 * deps: Upgrade rusqlite, sea-query and sea-query-rusqlite by @Narfinger in https://github.com/servo/servo/pull/46559 * layout: Minor optimization in flex layout by @Narfinger in https://github.com/servo/servo/pull/46563 * script: Make `bp_position` comply more closely to the specification by @mrobinson in https://github.com/servo/servo/pull/46532 * layout: Trace `reflow_goal` parameter in `Layout::handle_reflow` by @jschwe in https://github.com/servo/servo/pull/46554 * android: Convert omnibox to Compose UI by @veyndan in https://github.com/servo/servo/pull/46565 * Script: Create DOM element types for SVG shapes, gradients, and structural elements by @mu-mostafa98 in https://github.com/servo/servo/pull/46558 * servo: Allow registering the `WebXrRegistry` after `Servo` handle creation by @Narfinger in https://github.com/servo/servo/pull/46494 * webgpu: Split GPUAdapterInfo into separate crate by @Narfinger in https://github.com/servo/servo/pull/46111 * script: Mechanically migrate more to `reflect_dom_object_with_proto` by @TimvdLippe in https://github.com/servo/servo/pull/46584 * script: Implement importKey and exportKey operation of KMAC by @kkoyung in https://github.com/servo/servo/pull/46583 * mach/uv: Switch from native-tls to system-certs by @Narfinger in https://github.com/servo/servo/pull/45024 * script: Move more into script_webgpu crate by @Narfinger in https://github.com/servo/servo/pull/46534 * script: Port FontFace to use `reflect_dom_object_with_proto` by @TimvdLippe in https://github.com/servo/servo/pull/46585 * fonts+layout: Support `font-variant-alternates` by @simonwuelker in https://github.com/servo/servo/pull/45308 * layout: Avoid potential n² comparisons when updating children of accessibility nodes by @alice in https://github.com/servo/servo/pull/46530 * webxr: Properly destroy layer `Surface`s if removal happens between `begin_frame` and `end_frame` by @mrobinson in https://github.com/servo/servo/pull/46588 * Upgrade to WiX 7 by @dpaoliello in https://github.com/servo/servo/pull/46208 * Use subfont when setting harfbuzz font funcs by @nicoburns in https://github.com/servo/servo/pull/46560 * script: Move textcontrol and related structs into `dom/html/form_controls` by @TimvdLippe in https://github.com/servo/servo/pull/46332 * script: Mechanically migrate more to `reflect_dom_object_with_proto` by @TimvdLippe in https://github.com/servo/servo/pull/46593 * script: Implement IDBIndex.name attribute. by @skyz1 in https://github.com/servo/servo/pull/45512 * script: Optimize element::has_class() by @Narfinger in https://github.com/servo/servo/pull/46594 * script: Implement inserthorizontalrule command by @Psychpsyo in https://github.com/servo/servo/pull/46597 * script: Dirty old parents during `moveBy` by @mrobinson in https://github.com/servo/servo/pull/46599 * script: Reduce rooting in serialization of `DOMQuad` by @yezhizhen in https://github.com/servo/servo/pull/46598 * script: Ensure event handlers on adopted elements check the owner document. by @jdm in https://github.com/servo/servo/pull/46596 * paint: Fix a race condition in the WebGL image handler by @mrobinson in https://github.com/servo/servo/pull/46601 * script: Don't store rooted values inside `ControlElement` by @Gae24 in https://github.com/servo/servo/pull/46460 * script: Implement generateKey and get key length operations of KMAC by @kkoyung in https://github.com/servo/servo/pull/46606 * script: Allow calling get_buffer_source_copy with members of webidl unions. by @jdm in https://github.com/servo/servo/pull/46605 * script: Mark document tree as dirty when web fonts are removed by @simonwuelker in https://github.com/servo/servo/pull/46568 * android: Extract omnibox into own function by @veyndan in https://github.com/servo/servo/pull/46609 * script: Halt "update the rendering" for `Document` if rAF blocks rendering by @mrobinson in https://github.com/servo/servo/pull/46604 * script: Make iframe resizes immediately observable in child. by @jschwe in https://github.com/servo/servo/pull/46587 * script: Parse vtt payload for track elements by @TimvdLippe in https://github.com/servo/servo/pull/46383 * script: Decrement running count of loading fonts only after marking document tree as dirty by @simonwuelker in https://github.com/servo/servo/pull/46586 * layout: clamp rather than panicking when converting out of range value to 16bit integer for Taffy by @nicoburns in https://github.com/servo/servo/pull/46119 * script: Replace deprecated as_mut_slice with as_mut_slice_safe by @log101 in https://github.com/servo/servo/pull/46614 * android: Convert toolbar on large screens to Compose UI by @veyndan in https://github.com/servo/servo/pull/46612 * layout: Remove outdated comment. by @jdm in https://github.com/servo/servo/pull/46620 * script: Implement sign and verify operations of KMAC by @kkoyung in https://github.com/servo/servo/pull/46622 * layout: Implement block-axis centering for buttons by @Loirooriol in https://github.com/servo/servo/pull/46590 * script: Store microtasks as `Box<dyn MicroTaskRunnable>` by @sagudev in https://github.com/servo/servo/pull/46607 * script: Remove unused net dependency. by @jdm in https://github.com/servo/servo/pull/46623 * webvtt: Remove interior mutability from the parser by @simonwuelker in https://github.com/servo/servo/pull/46630 * indexeddb: Move handling of `SyncOperation::Abort` to a method by @mrobinson in https://github.com/servo/servo/pull/46629 * script: Remove unnecessary rooting & conversion in `htmlmediaelement.rs` by @yezhizhen in https://github.com/servo/servo/pull/46632 * indexeddb: Always consider `versionupgrade` events to be exclusive by @mrobinson in https://github.com/servo/servo/pull/46610 * script: Handle CSS-connected font faces in `FontFaceSet::{Add, Delete}` by @simonwuelker in https://github.com/servo/servo/pull/46634 * script: don't store a `Window` inside `RefreshRedirectDue` by @Gae24 in https://github.com/servo/servo/pull/46633 * fonts: Support `font-language-override` by @simonwuelker in https://github.com/servo/servo/pull/46618 * layout: Improvements to a11y update counters, and some extra tests by @alice in https://github.com/servo/servo/pull/46589 * layout: Don't use safe alignment for abspos children of flex containers by @simonwuelker in https://github.com/servo/servo/pull/46637 * script: Don't store rooted values inside `ElementsFilter` and microtasks by @Gae24 in https://github.com/servo/servo/pull/46638 * script: Close open IndexedDB databases when tearing down a `Document` by @mrobinson in https://github.com/servo/servo/pull/46636 * script: Move htmlinputelement into `script/dom/html/form_controls` by @TimvdLippe in https://github.com/servo/servo/pull/46653 * android: Convert toolbar on small screens to Compose UI by @veyndan in https://github.com/servo/servo/pull/46626 * script: replace deprecated as_slice method with as_slice_safe method by @log101 in https://github.com/servo/servo/pull/46654 * script: Implement forwarddelete command by @Psychpsyo in https://github.com/servo/servo/pull/46608 * script: Reduce rooting in `useractivation.rs` by @yezhizhen in https://github.com/servo/servo/pull/46656 * script: Do not panic when getting contents of detached array buffers. by @jdm in https://github.com/servo/servo/pull/46504 * script: Move more files to script_webgpu crate by @Narfinger in https://github.com/servo/servo/pull/46657 * layout: Avoid setting FragmentFlags for HTML elements on pseudo-elements by @Loirooriol in https://github.com/servo/servo/pull/46640 * net: Fix CSP trailing-dot host WPT resolution by @Taym95 in https://github.com/servo/servo/pull/46121 * script: Use NoGC for note_dirty_descendants by @Narfinger in https://github.com/servo/servo/pull/46659 * android: Upgrade all dependencies by @veyndan in https://github.com/servo/servo/pull/46666 * net: Store original response for preload requests. by @jdm in https://github.com/servo/servo/pull/46668 * image-rs: Remove unneeded `avif` feature by @jschwe in https://github.com/servo/servo/pull/46661 * android: Convert main activity to Compose UI by @veyndan in https://github.com/servo/servo/pull/46663 * layout: Improve paralelization and memory consumption in `InitialFlexBoxLayout::new` by @Narfinger in https://github.com/servo/servo/pull/46595 * net: Allow starting the `FetchThread` asynchronously by @mrobinson in https://github.com/servo/servo/pull/46682 * script: Reduce GC-rooting in `NodeList` by @SimonSapin in https://github.com/servo/servo/pull/46664 * serviceworkers: initial plumbing into storage endpoint for service worker caches by @gterzian in https://github.com/servo/servo/pull/46247 * android: Remove usage of appcompat by @veyndan in https://github.com/servo/servo/pull/46694 * script: Don't store rooted values inside `XPathResultValue` by @Gae24 in https://github.com/servo/servo/pull/46690 * script: Address borrow hazard in DocumentEventHandler::handle_touch_event by @jdm in https://github.com/servo/servo/pull/46693 * indexeddb: Handle schema changes asynchronously by @mrobinson in https://github.com/servo/servo/pull/46615 * script: Account for nested rules when parsing selectors for CSSOM by @simonwuelker in https://github.com/servo/servo/pull/46687 * android: Remove View-based Material library by @veyndan in https://github.com/servo/servo/pull/46700 * script: Remove temporary root in `fn is_element_in_view` by @yezhizhen in https://github.com/servo/servo/pull/46678 * script: Replace raw pointer comparison with `==` for DOM identity comparison by @yezhizhen in https://github.com/servo/servo/pull/46718 * tidy: Limit number of allowed Error::[something](None) uses in script crates. by @jdm in https://github.com/servo/servo/pull/46699 * ci: Disable choco / WiX installation on self-hosted runners by @mrobinson in https://github.com/servo/servo/pull/46724 * ci: Enable `allow-unsafe-pr-checkout` for WPT runs by @mrobinson in https://github.com/servo/servo/pull/46721 * Update quick-xml and remove a couple of RUSTSEC ignored advisories by @atouchet in https://github.com/servo/servo/pull/46737 * android: Move dependencies to version catalog by @veyndan in https://github.com/servo/servo/pull/46727 * Fix adopted stylesheet borrow hazard by @SharanRP in https://github.com/servo/servo/pull/46684 * layout: Accessibility code cleanups by @alice in https://github.com/servo/servo/pull/46691 * stylo: Also update `AnimationState::Paused` in `Animation::update_from_other` if delay changes by @mrobinson in https://github.com/servo/servo/pull/46689 * Use `ci-runners/actions/checkout` consistently by @mrobinson in https://github.com/servo/servo/pull/46725 * script/layout: Add initial support for visible selections by @mrobinson in https://github.com/servo/servo/pull/46698 * script: Invalidate shadow root stylesheets after assigning to `adoptedStyleSheets` property by @simonwuelker in https://github.com/servo/servo/pull/46738 * script: Implement a readonly version of `CSSFontFeatureValuesRule` by @simonwuelker in https://github.com/servo/servo/pull/46728 * script: Implement `Touch::new` by @yezhizhen in https://github.com/servo/servo/pull/46741 * base: Rework UTF-8/16/32 offset/length wrapper types by @SimonSapin in https://github.com/servo/servo/pull/46742 * media: Add cycle detection in WebAudio graphs by @Taym95 in https://github.com/servo/servo/pull/46451 * script: Implement `Animation.effect`, `AnimationEffect.getTiming()`, `AnimationEffect.getComputedTiming()` and `AnimationEffect.updateTiming()` by @simonwuelker in https://github.com/servo/servo/pull/46677 * android: Move plugins to version catalog by @veyndan in https://github.com/servo/servo/pull/46746 * script: Avoid uncollectible cycles from IntersectionObserver.root by @apoorvapendse in https://github.com/servo/servo/pull/46739 * script: remove rooted variant of `MessageSource` by @Gae24 in https://github.com/servo/servo/pull/46745 * android: Add back icon in toolbar to settings and history by @veyndan in https://github.com/servo/servo/pull/46747 * Implement text-decoration-thickness by @nicoburns in https://github.com/servo/servo/pull/46592 * script: Use AtomicRefCell for layout-borrowed data in SVGSVGElement. by @jdm in https://github.com/servo/servo/pull/46757 * script: Use AtomicRefCell for CustomStateSet internal set. by @jdm in https://github.com/servo/servo/pull/46758 * script: Restrict borrow scope in XRTest::DisconnectAllDevices by @amittenak47 in https://github.com/servo/servo/pull/46743 * script: Don't store rooted values inside `TransformerType` by @Gae24 in https://github.com/servo/servo/pull/46726 * layout: Simplify the way that document selection is handled in traversals by @mrobinson in https://github.com/servo/servo/pull/46762 * script: Use AtomicRefCell for text node contents. by @jdm in https://github.com/servo/servo/pull/46756 * android: Remove `GfxCallbacks` as never invoked by @veyndan in https://github.com/servo/servo/pull/46765 * android: Fix back navigation when `ServoView` displayed by @veyndan in https://github.com/servo/servo/pull/46766 * Update rand crates by @atouchet in https://github.com/servo/servo/pull/46767 * ci: Fix ohos bencher error by reverting to `actions/checkout` by @yezhizhen in https://github.com/servo/servo/pull/46768 * android: Replace deprecated `onBackPressed` by @veyndan in https://github.com/servo/servo/pull/46769 * android: Stop using hungarian notation by @veyndan in https://github.com/servo/servo/pull/46772 * android: Make `JNIServo` hidden to library consumers by @veyndan in https://github.com/servo/servo/pull/46771 * layout: Expand comment for BoxTreeString. by @jdm in https://github.com/servo/servo/pull/46778 * android: Let `Servo` and `ServoView` take any type of `Context` by @veyndan in https://github.com/servo/servo/pull/46779 * fix Borrow Hazard in ResizeObserver::broadcast_active_resize_observations by @agrawalx in https://github.com/servo/servo/pull/46770 * layout: Use `f64` when blending table content sizes by @mrobinson in https://github.com/servo/servo/pull/46775 * android: Remove duplicate `Context` by @veyndan in https://github.com/servo/servo/pull/46787 * script: Implement `safe_to_jsval` for more types by @Gae24 in https://github.com/servo/servo/pull/46777 * canvas: Adjust memory pressure heuristic by @jschwe in https://github.com/servo/servo/pull/46786 * android: Remove native symbols if no corresponding implementation by @veyndan in https://github.com/servo/servo/pull/46782 * script: Make gamepad attribute optional in GamepadEvent by @log101 in https://github.com/servo/servo/pull/46788 * android: Remove theoretical origin customisation by @veyndan in https://github.com/servo/servo/pull/46784 * android: Remove `gstDebugStr` as unused by @veyndan in https://github.com/servo/servo/pull/46791 * android: Fix enablement of log filter groups by @veyndan in https://github.com/servo/servo/pull/46792 * android: Remove empty `AndroidManifest` by @veyndan in https://github.com/servo/servo/pull/46793 * wpt: Add missing message type to autoplay permission query. by @jdm in https://github.com/servo/servo/pull/45962 * devtools: Add an initial basic autocomplete implementation by @freyacodes in https://github.com/servo/servo/pull/46382 * ci: Add support for nightly arm64 linux builds by @mukilan in https://github.com/servo/servo/pull/46760 * net: Use generic channels for fetch responses. by @jdm in https://github.com/servo/servo/pull/46807 * script: Add benchmark for DOM comparison by @yezhizhen in https://github.com/servo/servo/pull/46722 * android: Remove unused drawable by @veyndan in https://github.com/servo/servo/pull/46815 * android: Replace magic value with named constant by @veyndan in https://github.com/servo/servo/pull/46816 * android: Convert `JNIServo` to Kotlin by @veyndan in https://github.com/servo/servo/pull/46817 * script: Add skeleton for `FileSystem*` and implement `DataTransferItem.webkitGetAsEntry` by @yezhizhen in https://github.com/servo/servo/pull/46456 * layout: Fix baseline alignment of horizontal text in column flex container by @simonwuelker in https://github.com/servo/servo/pull/46697 * ci: Pass the 'force-github-hosted-runner' to common linux workflow. by @mukilan in https://github.com/servo/servo/pull/46825 * layout: Resolve accessibility damage in a single tree walk. by @alice in https://github.com/servo/servo/pull/46740 * media: Temporarily disable `va` and `vaapi` plugins to work around driver issues by @calvaris in https://github.com/servo/servo/pull/46489 * script: Remove note about resolved web-animations issue by @simonwuelker in https://github.com/servo/servo/pull/46831 * script: Fix borrow hazard when resolving XRSession end promises by @amittenak47 in https://github.com/servo/servo/pull/46830 * fonts: Apply Harfbuzz features globally when shaping by @mrobinson in https://github.com/servo/servo/pull/46837 * layout: Use a total order comparator when distributing extra space to rowspans by @mrobinson in https://github.com/servo/servo/pull/46841 * script: Implement inserttext command by @Psychpsyo in https://github.com/servo/servo/pull/46838 * script: Implement async FileSystemFileEntry.file() success callback by @yezhizhen in https://github.com/servo/servo/pull/46832 * layout: Have `InlineItem::EndInlineBox` carry a reference to the box by @mrobinson in https://github.com/servo/servo/pull/46840 * layout: Separate `FontAndScriptInfo` into `FontAndScriptInfo` and `FontInfo` by @mrobinson in https://github.com/servo/servo/pull/46839 * layout: Properly set IS_BLEND_CONTAINER when creating WebRender stacking contexts by @mrobinson in https://github.com/servo/servo/pull/45624 * script: Use `is_in_a_document_tree()` to check if a node is in a tree by @SimonSapin in https://github.com/servo/servo/pull/46866 * script: Remove Element::set_attribute_from_parser's unused prefix argument by @Ms2ger in https://github.com/servo/servo/pull/46868 * test: Delay webxr test completion until all checks have completed. by @jdm in https://github.com/servo/servo/pull/46880 * android: Replace `servo.properties` with version catalog by @veyndan in https://github.com/servo/servo/pull/46814 * layout: Map document selection offsets across inline formatting context text transformations by @mrobinson in https://github.com/servo/servo/pull/46864 * Make sure virtual keyboard is hidden when <input type=text> and <textarea> is no longer focused on OHOS by @BudiArb in https://github.com/servo/servo/pull/46885 * fetch: Add support for `Request::duplex` by @Taym95 in https://github.com/servo/servo/pull/46858 * Skip selection offsets when an entire node is selected by @SimonSapin in https://github.com/servo/servo/pull/46889 * dom: Follow the specification more closely when determining form submitter element action by @kevlu93 in https://github.com/servo/servo/pull/46860 * android: Replace `ServoCoordinates` with built-in `Size` by @veyndan in https://github.com/servo/servo/pull/46869 * script: Ignore http status code error in image fetching by @yodalee in https://github.com/servo/servo/pull/46892 * android: Make `Servo.Callbacks` a static class by @veyndan in https://github.com/servo/servo/pull/46895 * script: Implement async FileSystemEntry.getParent() success callback by @yezhizhen in https://github.com/servo/servo/pull/46879 * script: Expose `id` to `LargestContentfulPaint` by @shubhamg13 in https://github.com/servo/servo/pull/46828 * script: Claim blob URLs before fetching script sources. by @jdm in https://github.com/servo/servo/pull/46881 * ohos: Add target ohos to the hitrace feature guards to address clippy warnings by @janeoa in https://github.com/servo/servo/pull/46861 * script: Drop unsafe `ToJSValConvertible::to_jsval` and wrapper trait `SafeToJSValConvertible` by @Gae24 in https://github.com/servo/servo/pull/46890 * script: Don't store rooted values inside `FocusableArea` by @Gae24 in https://github.com/servo/servo/pull/46564 * fetch: fix HTTP/2 ReadableStream request uploads by @Taym95 in https://github.com/servo/servo/pull/46888 * canvas: Box the enum with large size difference in variants by @janeoa in https://github.com/servo/servo/pull/46863 * script: Borrow hazard in Sanitizer::AllowElement by @sungmen in https://github.com/servo/servo/pull/46763 * script: Gracefully handle when password and username cannot be set in `XMLHttpRequest` by @mrobinson in https://github.com/servo/servo/pull/46911 * audio: Rename `node.rs` to `audio_node.rs` by @mrobinson in https://github.com/servo/servo/pull/46913 * android: Inline `ServoOptions` by @veyndan in https://github.com/servo/servo/pull/46916 * script: Wire `element` for `LargestContentfulPaint` by @shubhamg13 in https://github.com/servo/servo/pull/46553 * fetch: implement Request navigation flags by @Taym95 in https://github.com/servo/servo/pull/46917 * android: Make `ServoView.GLThread` a static class by @veyndan in https://github.com/servo/servo/pull/46926 * More gracefully handle header parsing errors by @mrobinson in https://github.com/servo/servo/pull/46923 * script: Stop using an unforgeable holder for global objects with unforgeable properties by @sagudev in https://github.com/servo/servo/pull/46930 * Upgrade to resvg v0.48.0 by @nicoburns in https://github.com/servo/servo/pull/46937 * script: Don't cache HTTP errors in the module map by @Gae24 in https://github.com/servo/servo/pull/46919 * android: Convert `Servo` to Kotlin by @veyndan in https://github.com/servo/servo/pull/46925 * android: Remove unused code in `ServoView` by @veyndan in https://github.com/servo/servo/pull/46940 * script: More consistent compareDocumentPosition for disconnected nodes by @SimonSapin in https://github.com/servo/servo/pull/46886 * android: Make `glThread` immutable by @veyndan in https://github.com/servo/servo/pull/46951 * layout: Allow shaping across inline box boundaries by @mrobinson in https://github.com/servo/servo/pull/46829 * font: Expose `ShapedTextSliceType` to clarify different `ShapedTextSlice`s by @mrobinson in https://github.com/servo/servo/pull/46836 * android: Split `SurfaceHolderCallback` into own class by @veyndan in https://github.com/servo/servo/pull/46955 * mach: Fix windows servoshell version bump regex by @jschwe in https://github.com/servo/servo/pull/46959 * webcrypto: Add remaining error messages. by @eachra-bawn in https://github.com/servo/servo/pull/46960 * release: Validate tag before release workflow by @jschwe in https://github.com/servo/servo/pull/46956 * release: Bump version to 0.5.0 by @jschwe in https://github.com/servo/servo/pull/46962 * release: Switch to crates.io stylo crates by @jschwe in https://github.com/servo/servo/pull/46984 ## New Contributors * @dDostalker made their first contribution in https://github.com/servo/servo/pull/46181 * @UMCEKO made their first contribution in https://github.com/servo/servo/pull/46256 * @mu-mostafa98 made their first contribution in https://github.com/servo/servo/pull/45405 * @apoorvapendse made their first contribution in https://github.com/servo/servo/pull/46739 * @amittenak47 made their first contribution in https://github.com/servo/servo/pull/46743 * @agrawalx made their first contribution in https://github.com/servo/servo/pull/46770 * @kevlu93 made their first contribution in https://github.com/servo/servo/pull/46860 * @sungmen made their first contribution in https://github.com/servo/servo/pull/46763 **Full Changelog**: https://github.com/servo/servo/compare/v0.4.0...v0.5.0 </details>
Source: README.md, updated 2026-08-15