github servo/servo v0.0.2

8 hours ago

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 @simonwuelker in #39892
  • compositing: Initialize the WebRender image handlers with the IOCompositor by @mrobinson in #40134
  • add CanGc as argument to key_type_to_jsval by @yerke in #40153
  • add CanGc as argument to Validatable.validity_state by @yerke in #40155
  • add CanGc as argument to structuredclone::read by @yerke in #40157
  • script: Enter debugger global's realm when invoking public APIs from script thread. by @jdm in #40151
  • xpath: Remove JS exception variant from evaluation error enum by @simonwuelker in #40164
  • layout: Cleanup clear_fragment_layout_cache() by @Loirooriol in #40040
  • xpath: Compare local names in html documents case-insensitively when there's no prefix by @simonwuelker in #40161
  • script: Add message to InvalidCharacterError by @alevann in #40169
  • add CanGc as argument to safe_to_jsval by @yerke in #40175
  • add CanGc as argument to Validatable.satisfies_constraints by @yerke in #40176
  • add CanGc as argument to methods in HTMLMediaElement by @yerke in #40179
  • script: Add an implementation of DedicatedWorkerGlobalScope.name and DedicatedWorkerGlobalScope.onmessageerror by @yerke in #40156
  • Fix starting_column comparison in ColspanToDistribute::comparison_for_sort by @yerke in #40180
  • Properly initialize related_target in UI events by @TimvdLippe in #40182
  • CI: Let mac arm64 unit-tests also use nextest retries by @jschwe in #40183
  • cargo: Update linebender crates by @sagudev in #40181
  • deps: Bump mozjs to 140.7 by @jschwe in #40185
  • script: cleanup memory reporting code inside dedicatedworkerglobalscope by @Gae24 in #40170
  • pixels: Split Snapshot into SharedSnapshot and Snapshot by @mrobinson in #40136
  • deps: Bump fontsan to 0.6.1 by @jschwe in #40187
  • script: Return early from "assign_slottables" when assigned slots did not change by @simonwuelker in #40191
  • add CanGc as argument to methods in HTMLImageElement by @yerke in #40177
  • add CanGc as argument to methods in HTMLLinkElement by @yerke in #40178
  • rename WorkerGlobalScope.get_worker_id to WorkerGlobalScope.worker_id by @yerke in #40195
  • script: Don't bail out of "assign slottables for a tree" when the target is a slot element by @simonwuelker in #40190
  • script: Rephrase default error message for Error::Namespace by @simonwuelker in #40201
  • Media: Change of Volume of video tag should passed to player by @rayguo17 in #40203
  • script: Move SVG DOM interfaces to script/dom/svg/ by @WaterWhisperer in #40206
  • script: Add Ed25519 support to SubtleCrypto by @kkoyung in #39369
  • move test for PrefValue to a separate mod test by @yerke in #40204
  • xpath: Throw a NAMESPACE_ERR DOMException when namespace resolver callback returns invalid value or throws by @simonwuelker in #40167
  • script: Implement Compression API by @kkoyung in #39658
  • wpt: avoid checking if worker is instanceof SharedWorker in abrupt-completion.html by @Gae24 in #40208
  • ci: Tokenless self-hosted runner select by @delan in #39900
  • compositing: Stop down render backend before shutting down WebRender by @mrobinson in #40209
  • script: Enable xpath by default by @simonwuelker in #40212
  • AbortSignal: mark throwIfAborted as [Throws] by @Taym95 in #40224
  • CI: Remove timeout from bootstrap dependencies step by @sagudev in #40238
  • chore: update obsolete comments on VirtualMethods functions by @webbeef in #40231
  • android: Let Servo handle touch events by @mrobinson in #40240
  • script: Move CSS DOM interfaces to script/dom/css/ by @WaterWhisperer in #40241
  • Script: Implement more efficient methods on DOMString Part2 by @Narfinger in #39925
  • Replace "map(..).unwrap_or(false)" with "is_some_and(..)" everywhere by @simonwuelker in #40244
  • Implement Document.parseHTMLUnsafe by @lukewarlow in #40246
  • Update js-sys and associated dependencies by @atouchet in #40252
  • ci: Run lint jobs on self-hosted runners by @delan in #39915
  • Fix updating slottables when slots are removed from a shadowtree by @TimvdLippe in #40188
  • tests: Mark iframe-same-origin.html.ini as passing. by @jdm in #40255
  • script: Use new inserted node when performing slot checks by @ZejunYu in #40251
  • libservo: Expose WebViewPoint / WebViewRect and use them for the API by @mrobinson in #40223
  • Redesign servo:newtab page by @arihant2math in #40137
  • libservo: Use the embedder control API for simple dialogs by @mukilan in #40239
  • script: Move performance DOM interfaces to script/dom/performance/ by @WaterWhisperer in #40262
  • Script: Use the correct constructor for DOMString to be lazy by @Narfinger in #40263
  • libservo: Allow passing device or page pixels as scroll delta by @atbrakhi in #40267
  • Allocator: Fix tracking allocator by @Narfinger in #40270
  • servoshell: Extract duplicate WebDriver methods to common struct by @atbrakhi in #40186
  • compositing: Split out Painter from IOCompositor by @mrobinson in #40264
  • Update some non-breaking dependencies by @atouchet in #40276
  • net: Set Response::cache_state appropriately. by @mark-buer in #40277
  • script: Do not store an initial content size in new ResizeObservers. by @jdm in #40260
  • wpt: Skip Bluetooh WebDriver BiDi tests by @mrobinson in #40281
  • wpt: Rebase another batch of testdriver.js tests by @mrobinson in #40282
  • servoshell: Support WebDriverCommandMsg::InputEvent for egl by @yezhizhen in #40280
  • script: Implement import key operation for ECDH by @kkoyung in #40253
  • script: Don't unregister slots from their shadow root when the whole shadow tree is being unbound by @simonwuelker in #40278
  • wpt: Properly process the --headless argument by @mrobinson in #40289
  • libservo: Have wheel events trigger scroll in Servo by @mrobinson in #40269
  • webdriver: Add a 10 second timeout for screenshots by @mrobinson in #40290
  • wpt: Remove unused files for the WebDriver conformance suite by @yezhizhen in #40285
  • cargo: Bump Rust to 1.91 by @sagudev in #39471
  • wpt: Make legacy ServoWdspecBrowser work as intended by @yezhizhen in #40296
  • script: Remove unneeded unsafe code annotation by @kkoyung in #40300
  • script: Implement export key operation of ECDH by @kkoyung in #40298
  • servoshell/desktop: Draw WebViews without using an egui::CentralPanel by @aaron-wgd in #40128
  • Add support for LargestContentfulPaint PaintMetric by @shubhamg13 in #39384
  • pixels: Store decoded images as RGBA premultiplied data by @mrobinson in #40158
  • compositor: Rename RenderingGroupId to PainterId by @mukilan in #40307
  • servoshell: Move servoshell_preferences to RunningAppStateBase by @atbrakhi in #40308
  • compositor: use the Painter terminology in RefreshDriver traits by @mukilan in #40302
  • servoshell: Implement WebDriverCommandMsg::TakeScreenshot for egl by @yezhizhen in #40303
  • script: Implement generate key operation of ECDH by @kkoyung in #40305
  • compositor: Make new frame notifications per Painter by @mukilan in #40309
  • installer: Change windows installation directory by @jschwe in #40311
  • servoshell: Fix typo in unrecognized debug option message by @lumiscosity in #40318
  • ci: Fix unit-test coverage by @jschwe in #40317
  • script: Report target padding and desired sizes for ResizeObserver notifications by @jdm in #40254
  • script: fix defaults on formMethod getters on and by @lumiscosity in #40310
  • Properly provide architecture in useragent string by @lumiscosity in #40321
  • script: add CanGc as argument to VirtualMethods::children_changed by @yerke in #40325
  • devtools: move test for IdMap to a separate mod test by @yerke in #40326
  • Turn all commented links before functions into doccomments by @simonwuelker in #40331
  • move unit tests to a separate mod test by @yerke in #40332
  • script: move media interfaces to script/dom/media module by @yerke in #40335
  • script: add CanGc as argument to VirtualMethods.post_connection_steps by @yerke in #40329
  • layout: Show pointer cursor for submit input with text value by @yerke in #40205
  • wpt: Remove annotations in executorservo.py by @mrobinson in #40337
  • servoshell: Move webview_by_id into RunningAppStateTrait by @yezhizhen in #40330
  • servoshell: Move servo to RunningAppStateBase by @atbrakhi in #40315
  • chore: Update mozjs to remove cargo_metadata by @sagudev in #40342
  • wpt: Have ServoRefTestExecutor inherit from RefTestExecutor by @mukilan in #40327
  • CI: Add free disk space in docs workflow by @sagudev in #40345
  • wpt: Turn on selectFiles and handle asynchronicity in FileAPI test by @mrobinson in #40349
  • wpt: Always run Servo tests in headless mode on WPT TaskCluster by @mrobinson in #40351
  • script: Trigger rendering update for skipped resize observations. by @jdm in #40353
  • Update Attr::SetValue to match updated spec by @lukewarlow in #40286
  • devtools: Expose cache status for requests in network monitor. by @mark-buer in #40328
  • script: Implement ToggleEvent and use for <details> element by @lukewarlow in #40271
  • deps: Update tungstenite-related group by @yezhizhen in #40364
  • script: improve spec compliance of the iframe load event steps by @gterzian in #40100
  • servoshell: Add a VsyncRefreshDriver for Android by @mrobinson in #40306
  • script: Use base64ct instead of base64 in SubtleCrypto by @kkoyung in #40334
  • script: remove microtask queue from globalscope by @Gae24 in #40371
  • script: Do not include transforms and inline boxes in ResizeObserver box area queries by @jdm in #40323
  • ohos CI: Compile nightly in production and upload libservoshell.so by @jschwe in #40373
  • ohos CI: Upload screenshot if speedometer failed by @jschwe in #40374
  • Script: Efficient DOMString methods for as_bytes, eq_ascii, is_ascii, to_jsval by @Narfinger in #40283
  • Light mode for newtab page by @arihant2math in #40272
  • config: Enable ResizeObserver by default. by @jdm in #40378
  • servoshell: Move handle_webdriver_script_command to RunningAppStateTrait by @yezhizhen in #40372
  • wpt: Filter non-stable expected results and create an artifact for it by @mrobinson in #40369
  • wpt: Enable WebDriver by default when running WPT by @mrobinson in #40291
  • CI: Switch to macos-15-intel by @sagudev in #40377
  • Initial credential management checks by @arihant2math in #40388
  • ohos: Support resize for tablet by @richerfu in #40391
  • net: Associate every ImageCache with a WebView by @mrobinson in #40376
  • Add bump-version command by @arihant2math in #40357
  • script: Let HTMLCanvasElement manage the ImageKey for canvases by @mrobinson in #40375
  • Reduce unnecessary type conversion and share WebDriverCommandMsg::LoadUrl handler across platform by @yezhizhen in #40393
  • script/dom/: Change some #[allow]s to #[expect]s by @arihant2math in #40403
  • script: Implement import key operation of X25519 by @kkoyung in #40398
  • Add CanGc argument to SafeFromJSValConvertible::safe_from_jsval by @Taym95 in #40404
  • libservo: Integrate context menu into the show_embedder_control API by @mrobinson in #40402
  • script: Enforce exclusivity between <details> elements in the same tree by @simonwuelker in #40314
  • xpath: Handle OOB conditions and non-char-boundaries in substring by @simonwuelker in #40411
  • wpt: Ensure that the correct argument is read when outputting stable unexpected log by @mrobinson in #40409
  • layout: Have ServoRestyleDamage immediately update flags on LayoutImpl by @mrobinson in #40400
  • libservo: Add a fallback clipboard by @mrobinson in #40408
  • script: Implement derive bits operation of ECDH by @kkoyung in #40333
  • script: Implement MallocSizeOf for (De)Compressor by @kkoyung in #40420
  • script: Implement export key operation of X25519 by @kkoyung in #40421
  • html: Support releasing of underlying resources and frames by @tharkum in #40316
  • webdriver: Implement extension command Shutdown by @yezhizhen in #40422
  • Disallow running clippy and --use-crown together by @WaterWhisperer in #40427
  • script/layout: Implement Element.currentCSSZoom attribute by @WaterWhisperer in #40304
  • Partially implement dialog.showModal() by @lukewarlow in #40405
  • script: Error if program in TransformFeedbackVaryings and GetTransformFeedbackVarying is from another context by @Taym95 in #40431
  • tools: Use ISO8601 timestamps and filter ports correctly in the Devtools parser by @eerii in #40428
  • script: Eagerly update the Device in Layout when it changes by @mrobinson in #40432
  • ci: Extract fast checkout steps into composite action by @delan in #40234
  • webdriver: Remove session requirement from Shutdown command by @yezhizhen in #40445
  • script: Handle broken image icon in HTMLImageElement by @mrobinson in #40429
  • webdriver: Allow dummy sessionId for ServoExtensionCommand::Shutdown by @yezhizhen in #40450
  • script: Also set the Theme on incomplete loads by @mrobinson in #40449
  • ci: Move runner-select and runner-timeout to servo/ci-runners by @delan in #40235
  • script/dom/: Change some #[allow]s to #[expect]s by @WaterWhisperer in #40454
  • script: Properly handle foreign contexts in Context2D's isSync and isTransformFeedback by @Taym95 in #40436
  • xpath: Enforce tree order in node sets during evaluation by @simonwuelker in #40451
  • Change some #[allow]s to #[expect]s by @WaterWhisperer in #40458
  • libservo: Fix panic in Reload of ContextMenuAction by @atbrakhi in #40430
  • net: Use callbacks instead of IPC channels in the ImageCache API by @mrobinson in #40453
  • net: Simplify FetchResponseListener and move it to script by @mrobinson in #40461
  • Script: Do not double copy for javascript source by @Narfinger in #40464
  • ci: Fix ohos libservoshell.so artifact path by @jschwe in #40468
  • WebGLBuffer: follow spec for buffer binding restrictions by @Taym95 in #40462
  • script: Add message to IndexSizeError by @WaterWhisperer in #40463
  • Add basic IDL implementation for LargestContentfulPaint by @shubhamg13 in #39714
  • Reduce boilerplate in Constellation and ScriptThread by @webbeef in #34960
  • background_hang_monitor: Clean up Sampler a bit and use allow(dead_code) by @mrobinson in #40477
  • script: Implement generate key operation of X25519 by @kkoyung in #40480
  • compositor: Allow GenerateFrame to take Vec<WebViewId> by @mukilan in #40482
  • webdriver: Print details when fail to start server by @yezhizhen in #40476
  • Upgrade wptrunner mozprocess version to 1.4.0 by @yezhizhen in #40466
  • Add code-coverage option to mach run, test-wpt and test-devtools by @jschwe in #39916
  • script: extend the prevention of the firing of load events to all iframes by @gterzian in #40401
  • compositing: Allow mapping from WebRender key types to PainterId by @mrobinson in #40484
  • net: Do not implement Serialize/Deserialize for RasterImage and introduce``SharedRasterImage` by @Narfinger in #40459
  • fonts: prime per-painter font key cache during WebView creation by @mukilan in #40487
  • script: Wrap unsafe code in scriptruntime.rs in unsafe {} by @mrobinson in #40494
  • wpt: Run in headless mode by default unless --no-headless is passed by @mrobinson in #40495
  • webdriver: Do not remove id from input_state_table if it still in input_cancel_list by @yezhizhen in #40483
  • Fix some typos in comments across various parts of the codebase by @arihant2math in #40492
  • script: Wrap unsafe code in windowproxy.rs in unsafe {} by @mrobinson in #40493
  • script: Implement derive bits operation of X25519 by @kkoyung in #40497
  • tools: Remove wrapped JSON message in the DevTools parser by @eerii in #40489
  • mach try: Don't run commit hooks by @jschwe in #40486
  • servoshell: Implement context menu in servoshell by @atbrakhi in #40434
  • script: Rename ScriptThreadMessage::AttachLayout to ScriptThreadMessage::SpawnPipeline by @mrobinson in #40491
  • script: Handle more ScriptThread messages synchronously by @mrobinson in #40490
  • script: Wrap remaining unsafe code and enable unsafe_op_in_unsafe_fn by @mrobinson in #40499
  • tools: Update DevTools parser flags by @eerii in #40488
  • Remove tshark from mach bootstrap by @eerii in #40506
  • Suppress debug representations of network response bodies by @jdm in #38789
  • html: Render media controls without ready state precondition by @tharkum in #40456
  • bootstrap: Run apt update before apt-cache by @jschwe in #40505
  • script: Use InputEvent for input events by @excitablesnowball in #39989
  • script: Start preparation to use safer JSContext by @sagudev in #40465
  • Implement read looping using a read request following the spec by @Taym95 in #39510
  • CI: Remove llvm upgrade from Windows workflow by @sagudev in #40524
  • Update mozjs to include SpiderMonkey 140.5 by @sagudev in #40514
  • script: Implement import key operation of ECDSA by @kkoyung in #40523
  • dom: Add the attribute mutation reason by @tharkum in #40527
  • Remove duplicate entry for 'rustc-dev' in toolchain by @jschwe in #40531
  • Upgrade cssparser to version 0.36 by @Loirooriol in #40525
  • constellation: Reuse InitialScriptState and InitialPipelineState in UnprivilegedPipelineContent by @mrobinson in #40529
  • net: Create unit tests for the image cache by @WaterWhisperer in #40498
  • html: Add description for steps of legacy constructor by @tharkum in #40535
  • servoshell: Move screenshot stability tracking to shared base by @atbrakhi in #40534
  • script: Implement export key operation of ECDSA by @kkoyung in #40536
  • script_bindings: Small USVString cleanup by @Narfinger in #40537
  • servoshell: Move webdriver_receiver to shared base by @atbrakhi in #40538
  • Net: ServoUrl.into_string().parse() optimization by @Narfinger in #40539
  • script: improve cookie processing of control characters by @webbeef in #40544
  • Upgrade Stylo to 2025-11-01 by @Loirooriol in #40522
  • storage: Run storage tests by @arihant2math in #40546
  • Fixed codegen to prevent double declaration of -webkit- prefixed CSS properties by @RichardTjokroutomo in #40549
  • mach: Remove unused setup/config by @arihant2math in #40547
  • script: Implement generate key operation of ECDSA by @kkoyung in #40553
  • Fix compilation warning for platforms other than Linux by @yezhizhen in #40551
  • deps: De-duplicate phf by @Loirooriol in #40555
  • script: Implement verify operation of ECDSA by @kkoyung in #40557
  • script: Pass the right base URI to inline sheets by @Loirooriol in #40554
  • tests: Import the XPathMark-FT test suite by @simonwuelker in #40541
  • script: Add context-based context menu options by @mrobinson in #40501
  • xpath: Don't expect ancestor-or-self axis to be in tree order by @simonwuelker in #40542
  • net: Small cleanup in http_network_or_cache_fetch by @Narfinger in #40559
  • script: Choose correct document for xpath queries by @simonwuelker in #40564
  • tests: Remove duplicate xpath test by @simonwuelker in #40565
  • script: Have FetchResponseListener::process_response_eof consume the listener by @mrobinson in #40556
  • ohos: Make test-speedometer-ohos more robust by @jschwe in #40558
  • script: Return only a JoinHandle from ScriptThread constructor by @mrobinson in #40571
  • script: Add message to HierarchyRequestError by @austinwillis in #40366
  • xpath: Cleanup normalize-space and translate by @simonwuelker in #40566
  • script: Introduce HtmlSerialize to support extensible node serialization by @rodio in #40568
  • xpath: Fix implementation for preceding::/following:: axes by @simonwuelker in #40588
  • tidy: Minor cleanup of licenseck.py by @jschwe in #40585
  • layout: Do not stretch block-level widgets by default by @Loirooriol in #40579
  • script: Implement sign operation of ECDSA by @kkoyung in #40591
  • storage: Webstorage testing by @arihant2math in #40569
  • script: Consolidate more logic into ScriptThread::spawn_pipeline by @mrobinson in #40586
  • script: Use ScriptEventLoopSender for Runtime event loop callbacks by @mrobinson in #40590
  • libservo: Add WebView::can_go_forward and WebView::can_go_back by @mrobinson in #40598
  • html: Remove canGC argument from internal seek method by @tharkum in #40587
  • html: Add internal ended_playback method by @tharkum in #40603
  • Add servo:license by @arihant2math in #40319
  • script: Correctly parse spki and pkcs8 of ECDH by @kkoyung in #40605
  • script: servoparser line number pass to CSP by @WaterWhisperer in #40597
  • servoshell: Close all embedder controls when loading a toplevel page in WebDriver by @mrobinson in #40507
  • xpath: Apply predicate list before sorting result when evaluating location step expression by @simonwuelker in #40592
  • Add AbortSignal garbage collection by @Taym95 in #40508
  • html: Add current and official playback positions by @tharkum in #40609
  • chore: Update actions/checkout to @v5 by @WaterWhisperer in #40606
  • Replace calls to ".filter_map()" followed by ".next()" with ".find_map()" by @simonwuelker in #40612
  • xpath: Handle a NodeSet being passed to id by @simonwuelker in #40593
  • Update servoshell to v0.0.2 by @jschwe in #40614
  • script: Fix MutationObserver to use Dom instead of DomRoot by @WaterWhisperer in #40608

New Contributors

Full Changelog: v0.0.1...v0.0.2

Don't miss a new servo release

NewReleases is sending notifications on new releases.