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
RefreshDriver trait by @coding-joedow in #39072
ResizeObserverEntry fields by @simonwuelker in #40036
WorkerGlobalScope::ImportScripts by @WaterWhisperer in #40023
InlineFormattingContextBuilder::start_inline_box() by @Loirooriol in #40037
run_a_classic_script algorithm for worker scripts by @Gae24 in #39905
WorkerGlobalScope::ImportScripts by @WaterWhisperer in #40078
<select> as a widget by @Loirooriol in #39970
script/dom/indexeddb/ by @WaterWhisperer in #40091
ImageData by @Gae24 in #40084
IOCompositor creation by @mrobinson in #40101
run_api_tests by @mrobinson in #40131
nom with hand-written parsing rules by @simonwuelker in #39977
DedicatedWorkerGlobalScope.name and DedicatedWorkerGlobalScope.onmessageerror by @yerke in #40156
starting_column comparison in ColspanToDistribute::comparison_for_sort by @yerke in #40180
Snapshot into SharedSnapshot and Snapshot by @mrobinson in #40136
WorkerGlobalScope.get_worker_id to WorkerGlobalScope.worker_id by @yerke in #40195
script/dom/svg/ by @WaterWhisperer in #40206
NAMESPACE_ERR DOMException when namespace resolver callback returns invalid value or throws by @simonwuelker in #40167
script/dom/css/ by @WaterWhisperer in #40241
WebViewPoint / WebViewRect and use them for the API by @mrobinson in #40223
servo:newtab page by @arihant2math in #40137
script/dom/performance/ by @WaterWhisperer in #40262
Painter from IOCompositor by @mrobinson in #40264
WebDriverCommandMsg::InputEvent for egl by @yezhizhen in #40280
--headless argument by @mrobinson in #40289
ServoWdspecBrowser work as intended by @yezhizhen in #40296
RenderingGroupId to PainterId by @mukilan in #40307
servoshell_preferences to RunningAppStateBase by @atbrakhi in #40308
Painter terminology in RefreshDriver traits by @mukilan in #40302
WebDriverCommandMsg::TakeScreenshot for egl by @yezhizhen in #40303
script/dom/media module by @yerke in #40335
CanGc as argument to VirtualMethods.post_connection_steps by @yerke in #40329
executorservo.py by @mrobinson in #40337
webview_by_id into RunningAppStateTrait by @yezhizhen in #40330
servo to RunningAppStateBase by @atbrakhi in #40315
ServoRefTestExecutor inherit from RefTestExecutor by @mukilan in #40327
selectFiles and handle asynchronicity in FileAPI test by @mrobinson in #40349
ToggleEvent and use for <details> element by @lukewarlow in #40271
VsyncRefreshDriver for Android by @mrobinson in #40306
base64ct instead of base64 in SubtleCrypto by @kkoyung in #40334
handle_webdriver_script_command to RunningAppStateTrait by @yezhizhen in #40372
macos-15-intel by @sagudev in #40377
ImageCache with a WebView by @mrobinson in #40376
HTMLCanvasElement manage the ImageKey for canvases by @mrobinson in #40375
WebDriverCommandMsg::LoadUrl handler across platform by @yezhizhen in #40393
script/dom/: Change some #[allow]s to #[expect]s by @arihant2math in #40403
<details> elements in the same tree by @simonwuelker in #40314
substring by @simonwuelker in #40411
LayoutImpl by @mrobinson in #40400
Shutdown by @yezhizhen in #40422
clippy and --use-crown together by @WaterWhisperer in #40427
program in TransformFeedbackVaryings and GetTransformFeedbackVarying is from another context by @Taym95 in #40431
Device in Layout when it changes by @mrobinson in #40432
HTMLImageElement by @mrobinson in #40429
ServoExtensionCommand::Shutdown by @yezhizhen in #40450
Theme on incomplete loads by @mrobinson in #40449
#[allow]s to #[expect]s by @WaterWhisperer in #40454
Context2D's isSync and isTransformFeedback by @Taym95 in #40436
#[allow]s to #[expect]s by @WaterWhisperer in #40458
Reload of ContextMenuAction by @atbrakhi in #40430
ImageCache API by @mrobinson in #40453
FetchResponseListener and move it to script by @mrobinson in #40461
IDL implementation for LargestContentfulPaint by @shubhamg13 in #39714
Constellation and ScriptThread by @webbeef in #34960
Sampler a bit and use allow(dead_code) by @mrobinson in #40477
GenerateFrame to take Vec<WebViewId> by @mukilan in #40482
PainterId by @mrobinson in #40484
Serialize/Deserialize for RasterImage and introduce``SharedRasterImage` by @Narfinger in #40459
WebView creation by @mukilan in #40487
scriptruntime.rs in unsafe {} by @mrobinson in #40494
--no-headless is passed by @mrobinson in #40495
input_state_table if it still in input_cancel_list by @yezhizhen in #40483
windowproxy.rs in unsafe {} by @mrobinson in #40493
ScriptThreadMessage::AttachLayout to ScriptThreadMessage::SpawnPipeline by @mrobinson in #40491
ScriptThread messages synchronously by @mrobinson in #40490
unsafe_op_in_unsafe_fn by @mrobinson in #40499
InitialScriptState and InitialPipelineState in UnprivilegedPipelineContent by @mrobinson in #40529
webdriver_receiver to shared base by @atbrakhi in #40538
FetchResponseListener::process_response_eof consume the listener by @mrobinson in #40556
JoinHandle from ScriptThread constructor by @mrobinson in #40571
normalize-space and translate by @simonwuelker in #40566
preceding::/following:: axes by @simonwuelker in #40588
ScriptThread::spawn_pipeline by @mrobinson in #40586
ScriptEventLoopSender for Runtime event loop callbacks by @mrobinson in #40590
WebView::can_go_forward and WebView::can_go_back by @mrobinson in #40598
canGC argument from internal seek method by @tharkum in #40587
ended_playback method by @tharkum in #40603
current and official playback positions by @tharkum in #40609
id by @simonwuelker in #40593
Dom instead of DomRoot by @WaterWhisperer in #40608
New Contributors
- @notJoon made their first contribution in #40082
- @alevann made their first contribution in #40169
- @ZejunYu made their first contribution in #40251
- @mark-buer made their first contribution in #40277
- @richerfu made their first contribution in #40391
- @austinwillis made their first contribution in #40366
Full Changelog: v0.0.1...v0.0.2