Skip to content

Releases: servo/servo

testing-0.0.0.0-2

15 Jan 17:12
bca2e2c

Choose a tag to compare

testing-0.0.0.0-2 Pre-release
Pre-release

Servo release testing-0.0.0.0-2

v0.0.3

16 Dec 08:44
7cd39f4

Choose a tag to compare

v0.0.3

Servo 0.0.3 is a comparatively smaller release, since we synchronized our release cut-off with the monthly November blog post, meaning that 0.0.3 contains only about 2 weeks worth of changes.

Trying out the Servo Tech demo

MacOS

The macOS releases are not signed yet, so you will need to follow the troubleshooting guide in order to run the Servo Tech Demo binary on your Mac.

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 November blog post to get a curated overview over the recent changes (although some of them will have already been present in 0.0.2).

Generated Release notes
  • script: Issue resource timing for stylesheets before the "load" event by @mrobinson in #40618
  • Add scroll and fling trace. by @kongbai1996 in #40629
  • wpt: Remove legacy expectation by @kkoyung in #40642
  • script: Flatten nested match arms in NormalizedAlgorithm by @kkoyung in #40643
  • Implement protocol handler web API's behind flag by @TimvdLippe in #40616
  • html: Handle new DurationChanged event by by @tharkum in #40644
  • Support calc() values in CSS Grid by @nicoburns in #34846
  • script: Remove unnecessary Trusted wrapper in RemovableDomEventListener by @WaterWhisperer in #40649
  • script: Add support for parsing CSS in parallel by @mrobinson in #40639
  • script: Use hkdf crate for HKDF in WebCrypto by @kkoyung in #40650
  • Tweak automatic release notes by @jschwe in #40651
  • script: Housekeeping WebIDL dictionaries of WebCrypto API by @kkoyung in #40652
  • script: Eliminate duplicate quirks mode origin check in stylesheet loader by @mrobinson in #40646
  • script: Don't rely on Attr nodes when communicating with layout by @simonwuelker in #40657
  • canvas: Clear bitmap without transform by @sagudev in #38286
  • indexeddb: Fix typo in range sql generator by @arihant2math in #40658
  • servodriver: Shut down Servo elegantly when all tests finish by @yezhizhen in #40455
  • script: Add cx_no_gc/cx/realm codegen option and demostrate them by @sagudev in #40582
  • Fix indexeddb intermitency by @arihant2math in #40648
  • CI: use --profile instead of profile shorthands by @sagudev in #38644
  • indexeddb: Clean shutdown of indexeddb threads/threadpool by @arihant2math in #40666
  • libservo: Make WebView::set_history have crate visibility by @mrobinson in #40671
  • resources: Ensure that selectors in CSS for the newtab page refer to actual elements by @arihant2math in #40670
  • Implement WindowOrWorkerGlobalScope::reportError by @TimvdLippe in #40654
  • Remove #![allow(dead_code)] from readablestreambyobreader by @Taym95 in #40675
  • net: Relax the SVG content type detection logic. by @mukilan in #40636
  • script: Fix wrongly matched normalized algorithm in NormalizedAlgorithm::get_key_length by @kkoyung in #40686
  • compositing: Allow WebGL contexts to have different Surfman devices by @mukilan in #40594
  • html: Fire the canplaythrough event in the expected order by @tharkum in #40685
  • wpt: Backport upstream WPT PR for new SVG test. by @mukilan in #40689
  • html: Run the play seek if loop attribute was set after playback ended by @tharkum in #40688
  • layout: Adjust inset-modified containing block to have non-negative size by @Loirooriol in #40628
  • Upload junit report of unit-tests in CI by @jschwe in #39897
  • libservo: Add ContextMenuElementInformation to for the context menu API by @mrobinson in #40607
  • script: Trigger reflow properly for pseudo-elements with content: attr() by @mrobinson in #40698
  • Revert #40594 "Allow WebGL contexts to have different Surfman devices" by @yezhizhen in #40707
  • Compositor: Add touch compatibility handling for mouse move events by @kongbai1996 in #40637
  • layout: Display User Agent Controls widget for video element. by @rayguo17 in #40578
  • layout: Rebuild the box tree when the quotes attribute changes on a pseudo-element by @mrobinson in #40699
  • libservo: Trigger a rendering update when waiting for paint readiness in WebView unit tests by @mrobinson in #40712
  • profiling: Add abstraction over tracing-rs by @jschwe in #40160
  • Replace codecov/test-results-action by @jschwe in #40718
  • servoshell: Always use ControlFlow::Wait on winit by @mrobinson in #40715
  • python: Remove notify-py from Python dependencies by @mrobinson in #40717
  • Update expectation for media-elements/event_timeupdate_noautoplay.html to PASS by removing .ini by @WaterWhisperer in #40714
  • compositing: Allow WebGL contexts to have different Surfman devices by @mrobinson in #40721
  • compositing: Rework WebRender external image handlers to be per-Painter by @mrobinson in #40690
  • script: Don't allocate when retrieving attribute values for layout by @simonwuelker in #40724
  • Fix RefCell already borrowed panic in HTMLMediaElement::set_audio_renderer by @Taym95 in #40729
  • Use safe JSContext/AutoRealm/CurrentRealm in codegen by @sagudev in #40716
  • Compositor: Resize PinchZoom::unscaled_viewport when viewport size changes by @kongbai1996 in #40396
  • webdriver: implement protocol handler automation mode by @TimvdLippe in #40733
  • script: Use a WeakRef for references to WebGLRenderingContext by @mrobinson in #40725
  • webgl: Ensure all Surfman surfaces are released properly by @mrobinson in #40736
  • CI: only upload test results to codecov if unit-test are actually run by @sagudev in #40739
  • compositing: Make RefreshDriver per-RenderingContext by @mrobinson in #40738
  • compositor: Share the WebGpuExternalImageMap among all Painters by @mrobinson in #40737
  • script: Add message to Dom exception Error::NotSupported by @d-kraus in #40745
  • ohos CI: Add webdriver based scenario tests by @monissaJ in #40473
  • script: Optimize Node::insert by @webbeef in #40742
  • script: Finish converting all error message enum variants to Option by @arihant2math in #40750
  • mach: Normalize the --profile argument to build commands by @mukilan in #40753
  • CI: Do not fail_fast on push to main by @sagudev in #40755
  • profiling: Fix missing span enter by @jschwe in #40758
  • compositing: Do not set scroll offsets of zero when restoring scroll offsets in new display lists by @kongbai1996 in #40757
  • devtools: Support reloading tab by @eerii in #40760
  • html: The queued volumechange event should be cancellable by @tharkum in #40763
  • script: Implement SHA-3 in WebCrypto API by @kkoyung in #40765
  • Prefer log over (e)println! by @jschwe in #40764
  • paint: Do trigger animations when a non-animation paint happens by @mrobinson in #40433
  • script: Don't crash when encountering unexpected node types in Range::createContextualFragment by @simonwuelker in #40762
  • script: Add messages to exceptions thrown in Element::attachShadow by @simonwuelker i...
Read more

v0.0.2

15 Nov 20:10
cae6350

Choose a tag to compare

v0.0.2

This release is equivalent to nightly 2025-11-14, with some additional manual testing of the release artifacts.
For our first release, the version number received a lot of attention. We are still establishing our release workflow, and this will be reflected in the version numbering scheme once the initial issues have been ironed out. See also our v0.0.1 release blogpost

Trying out the Servo Tech demo

MacOS

The macOS releases are not signed yet, so you will need to follow the troubleshooting guide in order to run the Servo Tech Demo binary on your Mac.

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

Our releases don't fully align with our monthly blog-posts yet, nevertheless we recommend reading our blog post October in servo for a curated overview of recent changes.

Automatic Changelog
  • script: Make file picker selection flow asynchronous by @delan in #39893
  • servoshell: use accesskit exported from egui_winit and update egui crates by @mukilan in #40010
  • compositor: Do not panic on touch events by @mrobinson in #40019
  • libservo: Allow embedders to drive frame updates via RefreshDriver trait by @coding-joedow in #39072
  • Implement document preloaded resources by @TimvdLippe in #39794
  • Add simonwuelker as a code owner for xpath by @simonwuelker in #40027
  • servoshell: Hook up Android software keyboard to embedder events. by @jdm in #40009
  • servoshell: Add CFBundleSupportedPlatforms to Info.plist by @IsaacMarovitz in #40030
  • mach: Android: Support custom profiles by @jschwe in #39982
  • script: Fully initialize ResizeObserverEntry fields by @simonwuelker in #40036
  • Validate response status and MIME type in WorkerGlobalScope::ImportScripts by @WaterWhisperer in #40023
  • layout: Simplify InlineFormattingContextBuilder::start_inline_box() by @Loirooriol in #40037
  • CODEOWNERS: Add sagudev as CI and crown codeowner by @sagudev in #40051
  • servoview: Focus the view when a touch input occurs. by @jdm in #40049
  • script: use run_a_classic_script algorithm for worker scripts by @Gae24 in #39905
  • compositor: Have viewport meta tag affect the layout viewport by @atbrakhi in #40055
  • cargo-deny: add exceptions for 'unic-*' crates. by @mukilan in #40058
  • webdriver: Miscellanous cleanup by @yezhizhen in #39986
  • script: Don't use StyleSheet::update_from_str. by @emilio in #40024
  • webgpu: Add the latest spec compliant GPUAdapterInfo by @tharkum in #39960
  • Implement run steps after a timeout by @Taym95 in #39994
  • script: Add CanGc to Seekable method in HtmlMediaElement by @willypuzzle in #40033
  • script: Support observing "device-pixel-content-box" with ResizeObserver by @simonwuelker in #40056
  • Implement abortsignal timeout by @Taym95 in #40032
  • android: Add UI setting for experimental features by @jdm in #40054
  • config: Enable AbortController/AbortSignal by default. by @jdm in #40079
  • script: Validate worker_type in WorkerGlobalScope::ImportScripts by @WaterWhisperer in #40078
  • layout: Handle <select> as a widget by @Loirooriol in #39970
  • Linux: Detect JIT support by @jschwe in #40071
  • script: Update placeholder-shown state during IME composition events by @notJoon in #40082
  • storage: Rename remaining references storage to webstorage by @arihant2math in #40090
  • script: Move IndexedDB DOM interfaces to script/dom/indexeddb/ by @WaterWhisperer in #40091
  • wdspec tests: Check correct node type instead of asserting error for script execution by @yezhizhen in #39988
  • Box tree construction: only unset pseudo elements if the box is rebuilt by @longvatrong111 in #39930
  • script: Prepare to run script and callback before invoking CE constructor by @simonwuelker in #39013
  • net: Add warning log for failed HTTP requests. by @jdm in #40093
  • Update blurmac code by @arihant2math in #40096
  • servoshell (Desktop): Handle window resize events despite no focused webview by @aaron-wgd in #40086
  • script: implement structured cloning for ImageData by @Gae24 in #40084
  • html: Enhance media network and decoding error handling by @tharkum in #39899
  • compositing: Move WebRender initialization to IOCompositor creation by @mrobinson in #40101
  • compositing: Fully implement pinch zoom by @mrobinson in #40083
  • Script: len,is_empty and match for DOMString by @Narfinger in #39866
  • xpath: Provide error message when throwing SyntaxError from parsing by @simonwuelker in #40103
  • Fix window title stuck on last opened webview by @Taym95 in #39259
  • script: implement remaining WorkerGlobalScope's event handlers by @Gae24 in #40102
  • Implement UIEvent.which by @Taym95 in #40109
  • blurmac: Update objc2 to 0.4.1 by @arihant2math in #40113
  • layout: Use content area rect for content box queries. by @jdm in #40115
  • script: Include target in resize observer depth calculation. by @jdm in #40116
  • storage: Simplify layout of storage crate by @arihant2math in #40124
  • libservo: Stop using the custom test harness and run_api_tests by @mrobinson in #40131
  • fix http cache reconstruct response from cache after validation behaviour by @rayguo17 in #40067
  • libservo: Merge input method activation into the EmbedderControl API by @mrobinson in #40014
  • xpath: Verify context node in XPathExpression::evaluate_internal by @simonwuelker in #40105
  • script: Have the renderer process root viewport handle keyboard scrolling by @mrobinson in #40108
  • servoshell: Cleanup headed_window from the old code by @rodio in #40132
  • html: Add the 'name' and 'areas' IDL attributes for by @tharkum in #40133
  • constellation: Optimize tracing of maybe_close_random_pipeline by @jschwe in #39035
  • OHOS/Android: Implement WebDriverCommandMsg::GetViewportSize in egl app_state. by @Narfinger in #40135
  • ohos: Fix JIT detection by @jschwe in #40130
  • add CanGc as argument to methods in PaintRenderingContext2D by @yerke in #40148
  • add CanGc as argument to methods in Credential by @yerke in #40149
  • Revert "blurmac: Update objc2 to 0.4.1 (#40113)" by @arihant2math in #40145
  • script: Use interior mutability for stream controller queues. by @jdm in #40138
  • script: Replace IndexedDB's unsafe uses of RootedVec. by @jdm in #40143
  • add CanGc as argument to methods in BluetoothDevice by @yerke in #40147
  • add CanGc as argument to methods in OscillatorNode and StereoPannerNode by @yerke in #40146
  • script: Restrict scope of mutable borrow in IDBTransaction::ObjectStore. by @jdm in #40139
  • xpath: Replace nom with hand-written parsing rules by @simonwuelker in #39977
  • bluetooth: Enable bluetooth feature when testing bluetooth on WPT and test on CI by @arihant2math in #40144
  • devtools: Support getting XPath selector for node actor by @si...
Read more

v0.0.1 - October 2025

20 Oct 07:40
721214f

Choose a tag to compare

v0.0.1 (October 2025)

This release is equivalent to nightly 2025-10-19, with some additional manual testing of the release artifacts.
This is also our first release with a prebuilt arm macOS release artifact. Please also take note of the Troubleshooting guide on https://servo.org/download/ for common issues on macOS and Linux.