{"article":{"slug":"august-in-servo-css-grid-text-selection-and-more","title":"August in Servo: CSS Grid, text selection, and more!","subtitle":"Plus accessibility and navigation improvements.","summary":"The Servo project's monthly update covering Servo 0.6.0 and 417 commits landed in August: CSS Grid enabled by default, new web platform features and DOM APIs, text selection, accessibility, navigation and session-history fixes, a SpiderMonkey upgrade, embedding API changes and performance work.","content_type":"changelog","language":"en","canonical_url":"https://servo.org/blog/2026/10/09/august-in-servo/","author":{"name":"The Servo Project Developers","url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Servo","url":"https://servo.org/","listing_slug":null,"listing":null},"topics":[{"name":"Web Browsers","slug":"web-browsers","url":"https://listedarticles.com/topics/web-browsers"},{"name":"Rust","slug":"rust","url":"https://listedarticles.com/topics/rust"},{"name":"Open Source","slug":"open-source","url":"https://listedarticles.com/topics/open-source"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":2143,"reading_minutes":9,"published_at":"2026-10-09T00:00:00.000Z","added_at":"2026-10-18T08:14:55.970Z","updated_at":"2026-10-18T08:14:55.970Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/august-in-servo-css-grid-text-selection-and-more","markdown_url":"https://listedarticles.com/articles/august-in-servo-css-grid-text-selection-and-more.md","example":false,"citation":"The Servo Project Developers, Servo. \"August in Servo: CSS Grid, text selection, and more!.\" 9 Oct 2026. https://servo.org/blog/2026/10/09/august-in-servo/ (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://servo.org/blog/2026/10/09/august-in-servo/"},"body_markdown":"[**Servo 0.6.0**](https://github.com/servo/servo/releases/tag/v0.6.0) contains all of the changes we landed in August, which came out to **417 commits**!\n\nThe big news is that we’ve turned on support for **CSS Grid** by default ([@nicoburns](https://github.com/nicoburns), [#45621](https://github.com/servo/servo/pull/45621)).\nThis has had a huge positive impact on the visual appearance of many websites!\n\n[![a black and white cat named Gary showing off new visual web platform features](https://servo.org/img/blog/2026-10-gary.png)](https://servo.org/img/blog/2026-10-gary.png)\n\nWe’ve shipped several new web platform features:\n\n- **touch-action** ([@yezhizhen](https://github.com/yezhizhen), [#47043](https://github.com/servo/servo/pull/47043))\n- **animation-composition** ([@nicoburns](https://github.com/nicoburns), [#47405](https://github.com/servo/servo/pull/47405))\n- **color-scheme** ([@TimvdLippe](https://github.com/TimvdLippe), [#47042](https://github.com/servo/servo/pull/47042))\n- **full-width**, **math-auto**, **full-size-kana** values for **text-transform** ([@SimonSapin](https://github.com/SimonSapin), [#47160](https://github.com/servo/servo/pull/47160), [#47160](https://github.com/servo/servo/pull/47160), [#47225](https://github.com/servo/servo/pull/47225))\n\nPlus a bunch of new DOM APIs:\n\n- **requestAnimationFrame()** on **DedicatedWorkerGlobalScope** ([@Taym95](https://github.com/Taym95), [#46232](https://github.com/servo/servo/pull/46232))\n- **ancestorOrigins** on **Location** ([@TimvdLippe](https://github.com/TimvdLippe), [@mrobinson](https://github.com/mrobinson), [#46056](https://github.com/servo/servo/pull/46056))\n- **imagesrcset** and **imagesizes** on `<link rel=preload as=image>` ([@lumiscosity](https://github.com/lumiscosity), [@TimvdLippe](https://github.com/TimvdLippe), [#47103](https://github.com/servo/servo/pull/47103))\n- **style** on **CSSFontFaceRule** ([@simonwuelker](https://github.com/simonwuelker), [#47388](https://github.com/servo/servo/pull/47388))\n- **isReloadNavigation** and **isHistoryNavigation** on **Request** ([@Taym95](https://github.com/Taym95), [@yezhizhen](https://github.com/yezhizhen), [#46917](https://github.com/servo/servo/pull/46917))\n- **name=color-scheme** on `<meta>` ([@TimvdLippe](https://github.com/TimvdLippe), [@jdm](https://github.com/jdm), [#46993](https://github.com/servo/servo/pull/46993))\n- **focusin** and **focusout** events ([@RichardTjokroutomo](https://github.com/RichardTjokroutomo), [@yezhizhen](https://github.com/yezhizhen), [#46980](https://github.com/servo/servo/pull/46980))\n- **new TextEvent()** ([@moamenhesham0](https://github.com/moamenhesham0), [@mrobinson](https://github.com/mrobinson), [#47391](https://github.com/servo/servo/pull/47391))\n- **PeriodicWave** and **createPeriodicWave** on **BaseAudioContext** ([@kevlu93](https://github.com/kevlu93), [#47492](https://github.com/servo/servo/pull/47492))\n\nThis release also contains significant improvements to **navigation**, **document loading**, and **session history**, which are some of the [gnarliest](https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigation-and-session-history) parts of the HTML specification. Who knew that loading `about:blank` was [so complicated](https://hsivonen.fi/about-blank/)? The upshot to all this work is that pages that open additional windows or include iframes work much more reliably.\n\nThis is another big update, so here’s an outline:\n\n- [**Security**](#security)\n- [**Real world compat**](#real-world-compat)\n- [**Work in progress**](#work-in-progress)\n- [**Embedding API**](#embedding-api)\n- [**For users and developers**](#for-users-and-developers)\n- [**More on the web platform**](#more-on-the-web-platform)\n- [**Performance and stability**](#performance-and-stability)\n- [**New contributors**](#new-contributors)\n\n## Security\n\nWe upgraded to **SpiderMonkey v153**, which brings many new security and crash fixes to Servo’s JavaScript engine integration ([@sagudev](https://github.com/sagudev), [@Gae24](https://github.com/Gae24), [#47489](https://github.com/servo/servo/pull/47489)).\n\nNavigating away from a document that **activated fullscreen mode** now exits fullscreen mode ([@shubhamg13](https://github.com/shubhamg13), [@jdm](https://github.com/jdm), [#47123](https://github.com/servo/servo/pull/47123)).\n\n## Real world compat\n\nCSS Grid enabled by default means that many websites with traditional grid layouts now look correct, like [rustweek.org](https://servo.org/blog/2026/10/09/august-in-servo/rustweek.org).\n\nv0.5.0\n\nv0.6.0\n\n![](https://servo.org/img/blog/2026-10-grid2-before.png)\n![](https://servo.org/img/blog/2026-10-grid2-after.png)\n\n[2026.rustweek.org](https://2026.rustweek.org/)\n\nIt also makes a lot of websites look better that you wouldn’t assume rely on CSS Grid:\n\nv0.5.0\n\nv0.6.0\n\n![](https://servo.org/img/blog/2026-10-grid-before.png)\n![](https://servo.org/img/blog/2026-10-grid-after.png)\n\n[labs.jensimmons.com](https://labs.jensimmons.com/)\n\nPanning gestures initiated by touch inputs now lock to the dominant axis ([@yezhizhen](https://github.com/yezhizhen), [#46983](https://github.com/servo/servo/pull/46983)).\nThis results in more predictable panning when interacting with pages in Servo.\n\nWe fixed a crash affecting [gumroad.com.au](https://gumroad.com.au) ([@lumiscosity](https://github.com/lumiscosity), [#47266](https://github.com/servo/servo/pull/47266)).\n\nWe’re interested to hear how well your favourite websites run in Servo! Report successes in [this Zulip thread](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341), and failures [in our GitHub issues](https://github.com/servo/servo/issues).\n\n## Work in progress\n\n**Accessibility support** in Servo continues to make great strides; it can be enabled with the `--pref accessibility_enabled` command line argument.\nServo now reports **positions and sizes** for items in the content accessibility tree ([@philocalyst](https://github.com/philocalyst), [@alice](https://github.com/alice), [@mrobinson](https://github.com/mrobinson), [#46996](https://github.com/servo/servo/pull/46996)), allowing macOS VoiceOver to work more reliably.\nWe also report many [**ARIA roles**](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles) for web content elements to accessibility toolkits ([@mukilan](https://github.com/mukilan), [#47318](https://github.com/servo/servo/pull/47318)).\n\nFull list of supported roles\n\n- alert\n- banner\n- blockquote\n- caption\n- code\n- complementary\n- contentinfo\n- definition\n- deletion\n- directory\n- document\n- emphasis\n- feed\n- figure\n- generic\n- insertion\n- list\n- log\n- main\n- math\n- navigation\n- none\n- note\n- paragraph\n- presentation\n- rowgroup\n- search\n- status\n- strong\n- term\n- time\n- timer\n  \n\nServo’s support for **Document.execCommand()** is rapidly improving, and can be enabled with `--pref dom_exec_command_enabled`.\nWe fixed issues with the **inserttext** command ([@Psychpsyo](https://github.com/Psychpsyo), [#47224](https://github.com/servo/servo/pull/47224), [#47306](https://github.com/servo/servo/pull/47306)), editing uneditable content ([@Psychpsyo](https://github.com/Psychpsyo), [#47362](https://github.com/servo/servo/pull/47362)), computing contained nodes ([@TimvdLippe](https://github.com/TimvdLippe), [#47429](https://github.com/servo/servo/pull/47429)), adjusting selections in **contenteditable** ([@mrobinson](https://github.com/mrobinson), [#47393](https://github.com/servo/servo/pull/47393), [#47581](https://github.com/servo/servo/pull/47581), [#47581](https://github.com/servo/servo/pull/47581)), and implemented the **indent** and **insertLineBreak** commands ([@Psychpsyo](https://github.com/Psychpsyo), [#47416](https://github.com/servo/servo/pull/47416), [#47445](https://github.com/servo/servo/pull/47445)).\n\nWe made a lot of progress on the **LargestContentfulPaint** performance metric, implemented behind the `--pref largest_contentful_paint_enabled` argument.\nServo now supports the **element** and **loadTime** attributes, ([@shubhamg13](https://github.com/shubhamg13), [#46553](https://github.com/servo/servo/pull/46553), [#47475](https://github.com/servo/servo/pull/47475)), URLs for video element posters ([@shubhamg13](https://github.com/shubhamg13), [#43376](https://github.com/servo/servo/pull/43376)), accurate size information ([@shubhamg13](https://github.com/shubhamg13), [#43378](https://github.com/servo/servo/pull/43378)), and painting text nodes ([@shubhamg13](https://github.com/shubhamg13), [#47212](https://github.com/servo/servo/pull/47212)).\n\nThere was preparatory work for a future [**AudioWorklet**](https://developer.mozilla.org/en-US/docs/Web/API/AudioWorklet) implementation ([@niyabits](https://github.com/niyabits), [#46856](https://github.com/servo/servo/pull/46856), [#47016](https://github.com/servo/servo/pull/47016), [#47199](https://github.com/servo/servo/pull/47199)).\nSee Niya’s [blog post](https://text.tchncs.de/niya/wrapping-up-my-work-on-servos-audioworklet) about her Outreachy project for more details!\n\nWe’re continuing work on the **ServiceWorker** feature, which can be enabled with `--pref dom_serviceworker_enabled`.\nThis month we implemented the **CookieStore** interface behind the `--pref dom_cookiestore_enabled` command line argument ([@Taym95](https://github.com/Taym95), [#47044](https://github.com/servo/servo/pull/47044)) as well as the **Cache** interface ([@gterzian](https://github.com/gterzian), [#47220](https://github.com/servo/servo/pull/47220)).\n\nServo now supports a **disk-backed HTTP cache** that can be enabled with `--pref network_http_disk_cache` ([@Narfinger](https://github.com/Narfinger), [#43819](https://github.com/servo/servo/pull/43819)).\nThis cache persists between runs, but there is not yet any way to clear it.\n\n## Embedding API\n\n**Breaking change:** [`WebView`](https://doc.servo.org/servo/struct.WebView.html)::`toggle_sampling_profiler` has been removed ([@lumiscosity](https://github.com/lumiscosity), [#47014](https://github.com/servo/servo/pull/47014)).\nTo perform sampling profiling on Servo, follow the instructions in [the book](https://book.servo.org/contributing/profiling.html).\n\n**Breaking change:** The variants of [`MouseButton`](https://doc.servo.org/servo/enum.MouseButton.html) have been renamed to `Primary`, `Secondary`, and `Auxiliary` ([@mrobinson](https://github.com/mrobinson), [@SimonSapin](https://github.com/SimonSapin), [#47327](https://github.com/servo/servo/pull/47327)).\n\nWe’ve added several new Cargo features reflecting common usage patterns:\n\n- `default_web_features`, to include optional web platform features in the build (e.g. WebXR and WebGPU) ([@jschwe](https://github.com/jschwe), [#44032](https://github.com/servo/servo/pull/44032))\n- `bundled`, to include required resources in the binary ([@jschwe](https://github.com/jschwe), [#44032](https://github.com/servo/servo/pull/44032))\n- `brotli-compression-stream`, enabling support for `brotli` content in the `CompressionStream`/`DecompressionStream` web APIs ([@Narfinger](https://github.com/Narfinger), [@jdm](https://github.com/jdm), [#47197](https://github.com/servo/servo/pull/47197))\n- `webcrypto`, to enable support for the Crypto and WebCrypto web APIs ([@Narfinger](https://github.com/Narfinger), [#47198](https://github.com/servo/servo/pull/47198))\n- `webgl`, to enable support for WebGL ([@janeoa](https://github.com/janeoa), [#47200](https://github.com/servo/servo/pull/47200))\n\n## For users and developers\n\nOne visible change is that interactive **text selection** now works!\nThis is the result of lots of work across our script and layout code to ensure it respects the actual geometry of the page content ([@mrobinson](https://github.com/mrobinson), [@SimonSapin](https://github.com/SimonSapin), [#47022](https://github.com/servo/servo/pull/47022), [#47025](https://github.com/servo/servo/pull/47025), [#47329](https://github.com/servo/servo/pull/47329), [#47358](https://github.com/servo/servo/pull/47358), [#46982](https://github.com/servo/servo/pull/46982), [#47425](https://github.com/servo/servo/pull/47425), [#47438](https://github.com/servo/servo/pull/47438), [#47437](https://github.com/servo/servo/pull/47437), [#47581](https://github.com/servo/servo/pull/47581), [#47070](https://github.com/servo/servo/pull/47070), [#47048](https://github.com/servo/servo/pull/47048), [#46963](https://github.com/servo/servo/pull/46963)).\n\n[![servoshell 0.6.0 showing text selection on an element using CSS perspective](https://servo.org/img/blog/2026-10-select.png)](https://servo.org/img/blog/2026-10-select.png)\n\nBuilding Servo now requires at least **Clang 19** on all platforms ([@jschwe](https://github.com/jschwe), [#47421](https://github.com/servo/servo/pull/47421)).\nAdditionally, the `cargo-ohos` tool is now required for building for OpenHarmony ([@jschwe](https://github.com/jschwe), [#47334](https://github.com/servo/servo/pull/47334)).\n\nDebug builds on Windows can now complete successfully ([@jschwe](https://github.com/jschwe), [#47372](https://github.com/servo/servo/pull/47372)).\n\nLinux arm64 builds have been customized to work on **Raspberry Pi 5** ([@mukilan](https://github.com/mukilan), [#47113](https://github.com/servo/servo/pull/47113)).\nAny libservo embedders targeting the same platform will require a similar change if they are using jemalloc.\n\n### servoshell\n\nUnder **Wayland** and **OpenHarmony**, we now integrate with the system clipboard ([@TheZoq2](https://github.com/TheZoq2), [@yezhizhen](https://github.com/yezhizhen), [@jschwe](https://github.com/jschwe), [#46938](https://github.com/servo/servo/pull/46938), [#47177](https://github.com/servo/servo/pull/47177)).\n\nThe macOS command key and Windows logo key is now reported as `Meta` instead of `Super` ([@eachra-bawn](https://github.com/eachra-bawn), [#47330](https://github.com/servo/servo/pull/47330)).\n\nThe **Android** port has had many rough edges filed off as part of modernizing it for the **Compose UI** ([@veyndan](https://github.com/veyndan), [#47656](https://github.com/servo/servo/pull/47656), [#47491](https://github.com/servo/servo/pull/47491), [#47494](https://github.com/servo/servo/pull/47494), [#47697](https://github.com/servo/servo/pull/47697), [#46955](https://github.com/servo/servo/pull/46955), [#47644](https://github.com/servo/servo/pull/47644), [#47652](https://github.com/servo/servo/pull/47652), [#47276](https://github.com/servo/servo/pull/47276), [#47277](https://github.com/servo/servo/pull/47277), [#47299](https://github.com/servo/servo/pull/47299), [#47439](https://github.com/servo/servo/pull/47439)) and converting its implementation to Kotlin ([@veyndan](https://github.com/veyndan), [#46926](https://github.com/servo/servo/pull/46926), [#46925](https://github.com/servo/servo/pull/46925), [#46951](https://github.com/servo/servo/pull/46951), [#46965](https://github.com/servo/servo/pull/46965)).\nLibrary consumers are no longer responsible for implementing **pause and resume** support ([@veyndan](https://github.com/veyndan), [#47555](https://github.com/servo/servo/pull/47555)).\n\nMeanwhile, the **OpenHarmony** port now supports external keyboards with US keyboard layouts ([@jschwe](https://github.com/jschwe), [#47359](https://github.com/servo/servo/pull/47359)).\nAdditionally, there are now better fallback font selections for CJK characters ([@RichardTjokroutomo](https://github.com/RichardTjokroutomo), [#47116](https://github.com/servo/servo/pull/47116), [#47664](https://github.com/servo/servo/pull/47664)).\n\nSetting the `device_pixel_ratio_override` preference is no longer ignored on Android and OpenHarmony ([@jschwe](https://github.com/jschwe), [#47081](https://github.com/servo/servo/pull/47081)).\n\n## Performance and stability\n\nThere were many small changes this month that **removed unnecessary allocations** ([@Narfinger](https://github.com/Narfinger), [@jschwe](https://github.com/jschwe), [@yezhizhen](https://github.com/yezhizhen), [#47264](https://github.com/servo/servo/pull/47264), [#47147](https://github.com/servo/servo/pull/47147), [#47066](https://github.com/servo/servo/pull/47066), [#47249](https://github.com/servo/servo/pull/47249), [#47249](https://github.com/servo/servo/pull/47249), [#47285](https://github.com/servo/servo/pull/47285), [#47307](https://github.com/servo/servo/pull/47307), [#47343](https://github.com/servo/servo/pull/47343), [#47361](https://github.com/servo/servo/pull/47361), [#47395](https://github.com/servo/servo/pull/47395), [#47427](https://github.com/servo/servo/pull/47427), [#47454](https://github.com/servo/servo/pull/47454), [#47474](https://github.com/servo/servo/pull/47474), [#47506](https://github.com/servo/servo/pull/47506), [#47479](https://github.com/servo/servo/pull/47479), [#47530](https://github.com/servo/servo/pull/47530), [#47541](https://github.com/servo/servo/pull/47541), [#47566](https://github.com/servo/servo/pull/47566), [#47509](https://github.com/servo/servo/pull/47509), [#47622](https://github.com/servo/servo/pull/47622)).\n\nWe also **reduced GC interactions** leading to better JS performance ([@jdm](https://github.com/jdm), [@Narfinger](https://github.com/Narfinger), [@webbeef](https://github.com/webbeef), [@TimvdLippe](https://github.com/TimvdLippe), [@mrobinson](https://github.com/mrobinson), [#47513](https://github.com/servo/servo/pull/47513), [#47250](https://github.com/servo/servo/pull/47250), [#47158](https://github.com/servo/servo/pull/47158), [#47165](https://github.com/servo/servo/pull/47165), [#47049](https://github.com/servo/servo/pull/47049), [#47251](https://github.com/servo/servo/pull/47251), [#47510](https://github.com/servo/servo/pull/47510), [#46981](https://github.com/servo/servo/pull/46981)).\n\nOn platforms that memory map font data (such as OpenHarmony and macOS), we can now save time that would otherwise be spent loading font files from disk ([@jschwe](https://github.com/jschwe), [#47029](https://github.com/servo/servo/pull/47029)).\nSimilarly, reading system fonts is no longer in the critical path of starting up the engine ([@Narfinger](https://github.com/Narfinger), [@jdm](https://github.com/jdm), [#46476](https://github.com/servo/servo/pull/46476)).\n\nThere were were also a number of savings in the final binary size ([@jschwe](https://github.com/jschwe), [@kkoyung](https://github.com/kkoyung), [@Narfinger](https://github.com/Narfinger), [@jschwe](https://github.com/jschwe), [#47211](https://github.com/servo/servo/pull/47211), [#47214](https://github.com/servo/servo/pull/47214), [#47210](https://github.com/servo/servo/pull/47210), [#46950](https://github.com/servo/servo/pull/46950)).\n\nWe **fixed crashes** related to media playback ([@calvaris](https://github.com/calvaris), [#46891](https://github.com/servo/servo/pull/46891)), the 2d canvas renderer ([@yezhizhen](https://github.com/yezhizhen), [#46915](https://github.com/servo/servo/pull/46915)), fonts with negative line gaps ([@jschwe](https://github.com/jschwe), [#47374](https://github.com/servo/servo/pull/47374)), and resolving fonts variants ([@simonwuelker](https://github.com/simonwuelker), [#47356](https://github.com/servo/servo/pull/47356)).\n\nCanvas renderer worker threads can now be adjusted by the `thread_pool_canvas_workers` preference, allowing more performance granularity according to embedder needs. ([@jschwe](https://github.com/jschwe), [#46691](https://github.com/servo/servo/pull/46691), [#47018](https://github.com/servo/servo/pull/47018))\n\nWe’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey **safer and more reliable** ([@jdm](https://github.com/jdm), [@treetmitterglad](https://github.com/treetmitterglad), [@Narfinger](https://github.com/Narfinger), [@Gae24](https://github.com/Gae24), [#47398](https://github.com/servo/servo/pull/47398), [#47296](https://github.com/servo/servo/pull/47296), [#47051](https://github.com/servo/servo/pull/47051), [#47005](https://github.com/servo/servo/pull/47005), [#47323](https://github.com/servo/servo/pull/47323), [#47297](https://github.com/servo/servo/pull/47297), [#47322](https://github.com/servo/servo/pull/47322), [#47368](https://github.com/servo/servo/pull/47368), [#47446](https://github.com/servo/servo/pull/47446), [#47317](https://github.com/servo/servo/pull/47317)). We’re also working on statically preventing [a footgun](https://github.com/servo/servo/issues/39139) that can lead to uncollectible GC cycles and leaking memory ([@Gae24](https://github.com/Gae24), [#47355](https://github.com/servo/servo/pull/47355), [#47650](https://github.com/servo/servo/pull/47650)).\n\nHistorically, **about:memory** has reported all memory usage by Rust implementations of JS APIs as one undifferentiated `js/malloc-heap` number.\nWe now break it down by memory usage of nodes in document trees ([@pylbrecht](https://github.com/pylbrecht), [#46931](https://github.com/servo/servo/pull/46931)) and interfaces that are not part of the DOM ([@jdm](https://github.com/jdm), [#47531](https://github.com/servo/servo/pull/47531)). We also report memory usage for the network stack’s cookie database ([@Narfinger](https://github.com/Narfinger), [#47248](https://github.com/servo/servo/pull/47248)) and the canvas renderer backend ([@janeoa](https://github.com/janeoa), [@jdm](https://github.com/jdm), [#46958](https://github.com/servo/servo/pull/46958)).\n\nWe’ve added an **experimental threadboost** mechanism ([@jschwe](https://github.com/jschwe), [@mrobinson](https://github.com/mrobinson), [#46843](https://github.com/servo/servo/pull/46843), [#47027](https://github.com/servo/servo/pull/47027)) that has been observed to improve Speedometer results by **50%** and allow canvas rendering to reach 60 FPS.\nThis is initially enabled for OpenHarmony, but future expansion to other Linux-based platforms is expected.\n\n## More on the web platform\n\nWe upgraded to [resvg 0.48](https://github.com/linebender/resvg/blob/main/CHANGELOG.md#0480-2026-07-31), fixing **many issues with SVG images** with missing width/height attributes that specified a `viewBox` ([@nicoburns](https://github.com/nicoburns), [#46937](https://github.com/servo/servo/pull/46937)).\n\nUpgrading to [Taffy 0.14](https://github.com/DioxusLabs/taffy/blob/main/CHANGELOG.md#0130) fixed a number of **CSS grid-related crashes**, support for grid names, better intrinsic sizing, and improved performance ([@nicoburns](https://github.com/nicoburns), [#47031](https://github.com/servo/servo/pull/47031), [#47493](https://github.com/servo/servo/pull/47493)).\nWe also fixed some issues in the Taffy grid integration for more accurate baselines ([@nicoburns](https://github.com/nicoburns), [#47518](https://github.com/servo/servo/pull/47518)).\n\nSession history traversals (i.e. navigating backwards or forwards in history) now wait for any outstanding traversal to complete ([@mrobinson](https://github.com/mrobinson), [#47293](https://github.com/servo/servo/pull/47293), [#47485](https://github.com/servo/servo/pull/47485)).\nMeanwhile, navigations to `about:blank` are skipped if the initial about:blank document is present ([@jdm](https://github.com/jdm), [#47074](https://github.com/servo/servo/pull/47074)).\n\n`about:blank` documents no longer use the asynchronous HTML parser ([@jdm](https://github.com/jdm), [#47050](https://github.com/servo/servo/pull/47050)), and no longer report a `readyState` of `LOADING` ([@mrobinson](https://github.com/mrobinson), [#47450](https://github.com/servo/servo/pull/47450)).\nOpening auxiliary windows will wait to dispatch the load event until the initial `about:blank` document has [been replaced](https://html.spec.whatwg.org/multipage/document-sequences.html#windows%3Awindow) ([@jdm](https://github.com/jdm), [@mrobinson](https://github.com/mrobinson), [#47442](https://github.com/servo/servo/pull/47442), [#46975](https://github.com/servo/servo/pull/46975)).\n\nFor non-about:blank content, we also made the document loading phases more reliable ([@TimvdLippe](https://github.com/TimvdLippe), [@mrobinson](https://github.com/mrobinson), [#47426](https://github.com/servo/servo/pull/47426)), improved conformance of `javascript:` URL evaluation and navigation target selection ([@mrobinson](https://github.com/mrobinson), [#47486](https://github.com/servo/servo/pull/47486), [#47516](https://github.com/servo/servo/pull/47516)), and addressed longstanding compatibility issues with cross-origin `Window` and `Location` objects ([@mrobinson](https://github.com/mrobinson), [#47549](https://github.com/servo/servo/pull/47549)).\n\nOur media playback has improved; we fixed several issues around **canPlayType()** on **HTMLMediaElement** that allow Servo to report that **MP4 content is playable** ([@jdm](https://github.com/jdm), [#47612](https://github.com/servo/servo/pull/47612), [#47641](https://github.com/servo/servo/pull/47641), [#47670](https://github.com/servo/servo/pull/47670)).\n\nInput elements with the `autofocus` property inside of a `<dialog>` now receive focus when that dialog is opened ([@skyz1](https://github.com/skyz1), [@mrobinson](https://github.com/mrobinson), [#45826](https://github.com/servo/servo/pull/45826)).\n\nWe improved the exception error text for numerous web APIs ([@jdm](https://github.com/jdm), [@eachra-bawn](https://github.com/eachra-bawn), [#46960](https://github.com/servo/servo/pull/46960), [#47124](https://github.com/servo/servo/pull/47124), [#47168](https://github.com/servo/servo/pull/47168), [#47580](https://github.com/servo/servo/pull/47580), [#47430](https://github.com/servo/servo/pull/47430), [#47127](https://github.com/servo/servo/pull/47127)).\n\nWe also fixed issues related to many other APIs, including:\n\n- matching other browsers’ treatment of **Access-Control-Allow-Headers** ([@yezhizhen](https://github.com/yezhizhen), [#47600](https://github.com/servo/servo/pull/47600))\n- WebCrypto **CryptoKey** usage checks ([@kkoyung](https://github.com/kkoyung), [#47112](https://github.com/servo/servo/pull/47112), [#47141](https://github.com/servo/servo/pull/47141), [#47178](https://github.com/servo/servo/pull/47178)) and key lengths ([@kkoyung](https://github.com/kkoyung), [#47452](https://github.com/servo/servo/pull/47452), [#47453](https://github.com/servo/servo/pull/47453))\n- determining referrers when navigating ([@mrobinson](https://github.com/mrobinson), [#47487](https://github.com/servo/servo/pull/47487))\n- reading **name** on **Window** inside of iframes ([@TimvdLippe](https://github.com/TimvdLippe), [@jdm](https://github.com/jdm), [#47270](https://github.com/servo/servo/pull/47270))\n- many edge cases around determining dirty roots for incremental layout ([@mrobinson](https://github.com/mrobinson), [#46906](https://github.com/servo/servo/pull/46906))\n- edge cases around **compareDocumentPosition** on **Node** ([@SimonSapin](https://github.com/SimonSapin), [#46886](https://github.com/servo/servo/pull/46886))\n- resolving ties in web font matching ([@simonwuelker](https://github.com/simonwuelker), [#47449](https://github.com/servo/servo/pull/47449))\n- Range.**getClientBoundingRect()**/**getClientRects**() for empty ranges ([@yezhizhen](https://github.com/yezhizhen), [#47143](https://github.com/servo/servo/pull/47143))\n- JS module fetching failures can now be retried ([@Gae24](https://github.com/Gae24), [#46919](https://github.com/servo/servo/pull/46919))\n- `KeyEvent.keyCode` values for many **nonprintable keys** now match other browsers ([@eachra-bawn](https://github.com/eachra-bawn), [#47461](https://github.com/servo/servo/pull/47461))\n- making **timing** on **Performance** return a `PerformanceTiming` object ([@jdm](https://github.com/jdm), [@aniebietafia](https://github.com/aniebietafia), [#46990](https://github.com/servo/servo/pull/46990))\n- synthesizing font variations from `font-style` ([@simonwuelker](https://github.com/simonwuelker), [@mrobinson](https://github.com/mrobinson), [#46918](https://github.com/servo/servo/pull/46918), [#47364](https://github.com/servo/servo/pull/47364))\n- the **Get Element Tag Name** WebDriver command ([@yezhizhen](https://github.com/yezhizhen), [#47216](https://github.com/servo/servo/pull/47216))\n- removed nonstandard WebDriver-related properties on the global object ([@mrobinson](https://github.com/mrobinson), [#47542](https://github.com/servo/servo/pull/47542))\n- sniffing RAR responses correctly ([@wood-ghost](https://github.com/wood-ghost), [#47366](https://github.com/servo/servo/pull/47366))\n- `Attribute` nodes created during parsing now have the expected namespace prefix ([@Ms2ger](https://github.com/Ms2ger), [#47030](https://github.com/servo/servo/pull/47030))\n- improving **text-transform: capitalize** ([@mrobinson](https://github.com/mrobinson), [#46910](https://github.com/servo/servo/pull/46910))\n- zero-sized margins inside of inline boxes ([@Loirooriol](https://github.com/Loirooriol), [#47020](https://github.com/servo/servo/pull/47020))\n- incorrect `buttons` values in pointer capture transitions ([@steigeo](https://github.com/steigeo), [#45628](https://github.com/servo/servo/pull/45628))\n- empty lists returned by **load()** on **FontFaceSet** ([@simonwuelker](https://github.com/simonwuelker), [#47564](https://github.com/servo/servo/pull/47564))\n- cancelling more ongoing network requests when performing a navigation ([@mrobinson](https://github.com/mrobinson), [#47576](https://github.com/servo/servo/pull/47576))\n- shaping text across inline boxes ([@mrobinson](https://github.com/mrobinson), [#46829](https://github.com/servo/servo/pull/46829))\n- scrollable overflow for `position: sticky` ([@rayguo17](https://github.com/rayguo17), [#43766](https://github.com/servo/servo/pull/43766))\n- fixing hyperlinks for blob: URLs ([@TimvdLippe](https://github.com/TimvdLippe), [#47226](https://github.com/servo/servo/pull/47226))\n- firing the error callback for **decodeAudioData** on **BaseAudioContext** ([@amittenak47](https://github.com/amittenak47), [@jdm](https://github.com/jdm), [#46870](https://github.com/servo/servo/pull/46870))\n\n## New contributors\n\nA special thanks to the following people for landing their first patch in Servo:\n\n- Frans Skarman ([@TheZoq2](https://github.com/TheZoq2), [#46938](https://github.com/servo/servo/pull/46938))\n- Moamen Hesham ([@moamenhesham0](https://github.com/moamenhesham0), [#47391](https://github.com/servo/servo/pull/47391))\n- Miles Wirht ([@philocalyst](https://github.com/philocalyst), [#46996](https://github.com/servo/servo/pull/46996))\n- Vaibhav Srivastava ([@vaibhav8a](https://github.com/vaibhav8a), [#47626](https://github.com/servo/servo/pull/47626))\n- wood-ghost ([@wood-ghost](https://github.com/wood-ghost), [#47366](https://github.com/servo/servo/pull/47366))\n- 禾可 ([@Lfan-ke](https://github.com/Lfan-ke), [#47514](https://github.com/servo/servo/pull/47514))\n\nInterested in helping build a web browser?\nTake a look at our [curated list](https://starters.servo.org) of issues that are good for new contributors!\n\n## Donations\n\nThanks again for your generous support!\nWe are now receiving **8128 USD/month** (+3% from July) in recurring donations.\nThis helps us cover the cost of our **[speedy](https://ci0.servo.org) [CI](https://ci1.servo.org) [and](https://ci2.servo.org) [benchmarking](https://ci3.servo.org) [servers](https://ci4.servo.org)**, one of our latest **[Outreachy interns](https://www.outreachy.org/alums/2026-05/#:~:text=Servo)**, and funding **[maintainer work](https://servo.org/blog/2026/09/15/one-year-of-sponsorship/)** that helps more people contribute to Servo.\n\nServo is also on [thanks.dev](https://thanks.dev), and already **36 GitHub users** (+1 from July) that depend on Servo are sponsoring us there.\nIf you use Servo libraries like [url](https://crates.io/crates/url/reverse_dependencies), [html5ever](https://crates.io/crates/html5ever/reverse_dependencies), [selectors](https://crates.io/crates/selectors/reverse_dependencies), or [cssparser](https://crates.io/crates/cssparser/reverse_dependencies), signing up for [thanks.dev](https://thanks.dev) could be a good way for you (or your employer) to give back to the community.\n\nWe now have [**sponsorship tiers**](https://servo.org/blog/2025/11/21/sponsorship-tiers/) that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.\nIf you’re interested in this kind of sponsorship, please contact us at join@servo.org.\n\nUse of donations is decided transparently via the Technical Steering Committee’s public **[funding request process](https://github.com/servo/project/blob/main/FUNDING_REQUEST.md)**, and active proposals are tracked in [servo/project#187](https://github.com/servo/project/issues/187).\nFor more details, head to our [Sponsorship page](https://servo.org/sponsorship/).\n","body_html":"<p><a href=\"https://github.com/servo/servo/releases/tag/v0.6.0\" rel=\"nofollow ugc noopener\"><strong>Servo 0.6.0</strong></a> contains all of the changes we landed in August, which came out to <strong>417 commits</strong>!</p>\n<p>The big news is that we’ve turned on support for <strong>CSS Grid</strong> by default (<a href=\"https://github.com/nicoburns\" rel=\"nofollow ugc noopener\">@nicoburns</a>, <a href=\"https://github.com/servo/servo/pull/45621\" rel=\"nofollow ugc noopener\">#45621</a>).\nThis has had a huge positive impact on the visual appearance of many websites!</p>\n<p><a href=\"https://servo.org/img/blog/2026-10-gary.png\" rel=\"nofollow ugc noopener\"><img src=\"https://servo.org/img/blog/2026-10-gary.png\" alt=\"a black and white cat named Gary showing off new visual web platform features\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></a></p>\n<p>We’ve shipped several new web platform features:</p>\n<ul><li><strong>touch-action</strong> (<a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/47043\" rel=\"nofollow ugc noopener\">#47043</a>)</li><li><strong>animation-composition</strong> (<a href=\"https://github.com/nicoburns\" rel=\"nofollow ugc noopener\">@nicoburns</a>, <a href=\"https://github.com/servo/servo/pull/47405\" rel=\"nofollow ugc noopener\">#47405</a>)</li><li><strong>color-scheme</strong> (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/servo/servo/pull/47042\" rel=\"nofollow ugc noopener\">#47042</a>)</li><li><strong>full-width</strong>, <strong>math-auto</strong>, <strong>full-size-kana</strong> values for <strong>text-transform</strong> (<a href=\"https://github.com/SimonSapin\" rel=\"nofollow ugc noopener\">@SimonSapin</a>, <a href=\"https://github.com/servo/servo/pull/47160\" rel=\"nofollow ugc noopener\">#47160</a>, <a href=\"https://github.com/servo/servo/pull/47160\" rel=\"nofollow ugc noopener\">#47160</a>, <a href=\"https://github.com/servo/servo/pull/47225\" rel=\"nofollow ugc noopener\">#47225</a>)</li></ul>\n<p>Plus a bunch of new DOM APIs:</p>\n<ul><li><strong>requestAnimationFrame()</strong> on <strong>DedicatedWorkerGlobalScope</strong> (<a href=\"https://github.com/Taym95\" rel=\"nofollow ugc noopener\">@Taym95</a>, <a href=\"https://github.com/servo/servo/pull/46232\" rel=\"nofollow ugc noopener\">#46232</a>)</li><li><strong>ancestorOrigins</strong> on <strong>Location</strong> (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46056\" rel=\"nofollow ugc noopener\">#46056</a>)</li><li><strong>imagesrcset</strong> and <strong>imagesizes</strong> on <code>&lt;link rel=preload as=image&gt;</code> (<a href=\"https://github.com/lumiscosity\" rel=\"nofollow ugc noopener\">@lumiscosity</a>, <a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/servo/servo/pull/47103\" rel=\"nofollow ugc noopener\">#47103</a>)</li><li><strong>style</strong> on <strong>CSSFontFaceRule</strong> (<a href=\"https://github.com/simonwuelker\" rel=\"nofollow ugc noopener\">@simonwuelker</a>, <a href=\"https://github.com/servo/servo/pull/47388\" rel=\"nofollow ugc noopener\">#47388</a>)</li><li><strong>isReloadNavigation</strong> and <strong>isHistoryNavigation</strong> on <strong>Request</strong> (<a href=\"https://github.com/Taym95\" rel=\"nofollow ugc noopener\">@Taym95</a>, <a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/46917\" rel=\"nofollow ugc noopener\">#46917</a>)</li><li><strong>name=color-scheme</strong> on <code>&lt;meta&gt;</code> (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/46993\" rel=\"nofollow ugc noopener\">#46993</a>)</li><li><strong>focusin</strong> and <strong>focusout</strong> events (<a href=\"https://github.com/RichardTjokroutomo\" rel=\"nofollow ugc noopener\">@RichardTjokroutomo</a>, <a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/46980\" rel=\"nofollow ugc noopener\">#46980</a>)</li><li><strong>new TextEvent()</strong> (<a href=\"https://github.com/moamenhesham0\" rel=\"nofollow ugc noopener\">@moamenhesham0</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47391\" rel=\"nofollow ugc noopener\">#47391</a>)</li><li><strong>PeriodicWave</strong> and <strong>createPeriodicWave</strong> on <strong>BaseAudioContext</strong> (<a href=\"https://github.com/kevlu93\" rel=\"nofollow ugc noopener\">@kevlu93</a>, <a href=\"https://github.com/servo/servo/pull/47492\" rel=\"nofollow ugc noopener\">#47492</a>)</li></ul>\n<p>This release also contains significant improvements to <strong>navigation</strong>, <strong>document loading</strong>, and <strong>session history</strong>, which are some of the <a href=\"https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigation-and-session-history\" rel=\"nofollow ugc noopener\">gnarliest</a> parts of the HTML specification. Who knew that loading <code>about:blank</code> was <a href=\"https://hsivonen.fi/about-blank/\" rel=\"nofollow ugc noopener\">so complicated</a>? The upshot to all this work is that pages that open additional windows or include iframes work much more reliably.</p>\n<p>This is another big update, so here’s an outline:</p>\n<ul><li><a href=\"#security\"><strong>Security</strong></a></li><li><a href=\"#real-world-compat\"><strong>Real world compat</strong></a></li><li><a href=\"#work-in-progress\"><strong>Work in progress</strong></a></li><li><a href=\"#embedding-api\"><strong>Embedding API</strong></a></li><li><a href=\"#for-users-and-developers\"><strong>For users and developers</strong></a></li><li><a href=\"#more-on-the-web-platform\"><strong>More on the web platform</strong></a></li><li><a href=\"#performance-and-stability\"><strong>Performance and stability</strong></a></li><li><a href=\"#new-contributors\"><strong>New contributors</strong></a></li></ul>\n<h2 id=\"security\">Security</h2>\n<p>We upgraded to <strong>SpiderMonkey v153</strong>, which brings many new security and crash fixes to Servo’s JavaScript engine integration (<a href=\"https://github.com/sagudev\" rel=\"nofollow ugc noopener\">@sagudev</a>, <a href=\"https://github.com/Gae24\" rel=\"nofollow ugc noopener\">@Gae24</a>, <a href=\"https://github.com/servo/servo/pull/47489\" rel=\"nofollow ugc noopener\">#47489</a>).</p>\n<p>Navigating away from a document that <strong>activated fullscreen mode</strong> now exits fullscreen mode (<a href=\"https://github.com/shubhamg13\" rel=\"nofollow ugc noopener\">@shubhamg13</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47123\" rel=\"nofollow ugc noopener\">#47123</a>).</p>\n<h2 id=\"real-world-compat\">Real world compat</h2>\n<p>CSS Grid enabled by default means that many websites with traditional grid layouts now look correct, like <a href=\"https://servo.org/blog/2026/10/09/august-in-servo/rustweek.org\" rel=\"nofollow ugc noopener\">rustweek.org</a>.</p>\n<p>v0.5.0</p>\n<p>v0.6.0</p>\n<figure><img src=\"https://servo.org/img/blog/2026-10-grid2-before.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<figure><img src=\"https://servo.org/img/blog/2026-10-grid2-after.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p><a href=\"https://2026.rustweek.org/\" rel=\"nofollow ugc noopener\">2026.rustweek.org</a></p>\n<p>It also makes a lot of websites look better that you wouldn’t assume rely on CSS Grid:</p>\n<p>v0.5.0</p>\n<p>v0.6.0</p>\n<figure><img src=\"https://servo.org/img/blog/2026-10-grid-before.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<figure><img src=\"https://servo.org/img/blog/2026-10-grid-after.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p><a href=\"https://labs.jensimmons.com/\" rel=\"nofollow ugc noopener\">labs.jensimmons.com</a></p>\n<p>Panning gestures initiated by touch inputs now lock to the dominant axis (<a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/46983\" rel=\"nofollow ugc noopener\">#46983</a>).\nThis results in more predictable panning when interacting with pages in Servo.</p>\n<p>We fixed a crash affecting <a href=\"https://gumroad.com.au\" rel=\"nofollow ugc noopener\">gumroad.com.au</a> (<a href=\"https://github.com/lumiscosity\" rel=\"nofollow ugc noopener\">@lumiscosity</a>, <a href=\"https://github.com/servo/servo/pull/47266\" rel=\"nofollow ugc noopener\">#47266</a>).</p>\n<p>We’re interested to hear how well your favourite websites run in Servo! Report successes in <a href=\"https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341\" rel=\"nofollow ugc noopener\">this Zulip thread</a>, and failures <a href=\"https://github.com/servo/servo/issues\" rel=\"nofollow ugc noopener\">in our GitHub issues</a>.</p>\n<h2 id=\"work-in-progress\">Work in progress</h2>\n<p><strong>Accessibility support</strong> in Servo continues to make great strides; it can be enabled with the <code>--pref accessibility_enabled</code> command line argument.\nServo now reports <strong>positions and sizes</strong> for items in the content accessibility tree (<a href=\"https://github.com/philocalyst\" rel=\"nofollow ugc noopener\">@philocalyst</a>, <a href=\"https://github.com/alice\" rel=\"nofollow ugc noopener\">@alice</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46996\" rel=\"nofollow ugc noopener\">#46996</a>), allowing macOS VoiceOver to work more reliably.\nWe also report many <a href=\"https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles\" rel=\"nofollow ugc noopener\"><strong>ARIA roles</strong></a> for web content elements to accessibility toolkits (<a href=\"https://github.com/mukilan\" rel=\"nofollow ugc noopener\">@mukilan</a>, <a href=\"https://github.com/servo/servo/pull/47318\" rel=\"nofollow ugc noopener\">#47318</a>).</p>\n<p>Full list of supported roles</p>\n<ul><li>alert</li><li>banner</li><li>blockquote</li><li>caption</li><li>code</li><li>complementary</li><li>contentinfo</li><li>definition</li><li>deletion</li><li>directory</li><li>document</li><li>emphasis</li><li>feed</li><li>figure</li><li>generic</li><li>insertion</li><li>list</li><li>log</li><li>main</li><li>math</li><li>navigation</li><li>none</li><li>note</li><li>paragraph</li><li>presentation</li><li>rowgroup</li><li>search</li><li>status</li><li>strong</li><li>term</li><li>time</li><li>timer</li></ul>\n<p>Servo’s support for <strong>Document.execCommand()</strong> is rapidly improving, and can be enabled with <code>--pref dom_exec_command_enabled</code>.\nWe fixed issues with the <strong>inserttext</strong> command (<a href=\"https://github.com/Psychpsyo\" rel=\"nofollow ugc noopener\">@Psychpsyo</a>, <a href=\"https://github.com/servo/servo/pull/47224\" rel=\"nofollow ugc noopener\">#47224</a>, <a href=\"https://github.com/servo/servo/pull/47306\" rel=\"nofollow ugc noopener\">#47306</a>), editing uneditable content (<a href=\"https://github.com/Psychpsyo\" rel=\"nofollow ugc noopener\">@Psychpsyo</a>, <a href=\"https://github.com/servo/servo/pull/47362\" rel=\"nofollow ugc noopener\">#47362</a>), computing contained nodes (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/servo/servo/pull/47429\" rel=\"nofollow ugc noopener\">#47429</a>), adjusting selections in <strong>contenteditable</strong> (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47393\" rel=\"nofollow ugc noopener\">#47393</a>, <a href=\"https://github.com/servo/servo/pull/47581\" rel=\"nofollow ugc noopener\">#47581</a>, <a href=\"https://github.com/servo/servo/pull/47581\" rel=\"nofollow ugc noopener\">#47581</a>), and implemented the <strong>indent</strong> and <strong>insertLineBreak</strong> commands (<a href=\"https://github.com/Psychpsyo\" rel=\"nofollow ugc noopener\">@Psychpsyo</a>, <a href=\"https://github.com/servo/servo/pull/47416\" rel=\"nofollow ugc noopener\">#47416</a>, <a href=\"https://github.com/servo/servo/pull/47445\" rel=\"nofollow ugc noopener\">#47445</a>).</p>\n<p>We made a lot of progress on the <strong>LargestContentfulPaint</strong> performance metric, implemented behind the <code>--pref largest_contentful_paint_enabled</code> argument.\nServo now supports the <strong>element</strong> and <strong>loadTime</strong> attributes, (<a href=\"https://github.com/shubhamg13\" rel=\"nofollow ugc noopener\">@shubhamg13</a>, <a href=\"https://github.com/servo/servo/pull/46553\" rel=\"nofollow ugc noopener\">#46553</a>, <a href=\"https://github.com/servo/servo/pull/47475\" rel=\"nofollow ugc noopener\">#47475</a>), URLs for video element posters (<a href=\"https://github.com/shubhamg13\" rel=\"nofollow ugc noopener\">@shubhamg13</a>, <a href=\"https://github.com/servo/servo/pull/43376\" rel=\"nofollow ugc noopener\">#43376</a>), accurate size information (<a href=\"https://github.com/shubhamg13\" rel=\"nofollow ugc noopener\">@shubhamg13</a>, <a href=\"https://github.com/servo/servo/pull/43378\" rel=\"nofollow ugc noopener\">#43378</a>), and painting text nodes (<a href=\"https://github.com/shubhamg13\" rel=\"nofollow ugc noopener\">@shubhamg13</a>, <a href=\"https://github.com/servo/servo/pull/47212\" rel=\"nofollow ugc noopener\">#47212</a>).</p>\n<p>There was preparatory work for a future <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/AudioWorklet\" rel=\"nofollow ugc noopener\"><strong>AudioWorklet</strong></a> implementation (<a href=\"https://github.com/niyabits\" rel=\"nofollow ugc noopener\">@niyabits</a>, <a href=\"https://github.com/servo/servo/pull/46856\" rel=\"nofollow ugc noopener\">#46856</a>, <a href=\"https://github.com/servo/servo/pull/47016\" rel=\"nofollow ugc noopener\">#47016</a>, <a href=\"https://github.com/servo/servo/pull/47199\" rel=\"nofollow ugc noopener\">#47199</a>).\nSee Niya’s <a href=\"https://text.tchncs.de/niya/wrapping-up-my-work-on-servos-audioworklet\" rel=\"nofollow ugc noopener\">blog post</a> about her Outreachy project for more details!</p>\n<p>We’re continuing work on the <strong>ServiceWorker</strong> feature, which can be enabled with <code>--pref dom_serviceworker_enabled</code>.\nThis month we implemented the <strong>CookieStore</strong> interface behind the <code>--pref dom_cookiestore_enabled</code> command line argument (<a href=\"https://github.com/Taym95\" rel=\"nofollow ugc noopener\">@Taym95</a>, <a href=\"https://github.com/servo/servo/pull/47044\" rel=\"nofollow ugc noopener\">#47044</a>) as well as the <strong>Cache</strong> interface (<a href=\"https://github.com/gterzian\" rel=\"nofollow ugc noopener\">@gterzian</a>, <a href=\"https://github.com/servo/servo/pull/47220\" rel=\"nofollow ugc noopener\">#47220</a>).</p>\n<p>Servo now supports a <strong>disk-backed HTTP cache</strong> that can be enabled with <code>--pref network_http_disk_cache</code> (<a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/servo/servo/pull/43819\" rel=\"nofollow ugc noopener\">#43819</a>).\nThis cache persists between runs, but there is not yet any way to clear it.</p>\n<h2 id=\"embedding-api\">Embedding API</h2>\n<p><strong>Breaking change:</strong> <a href=\"https://doc.servo.org/servo/struct.WebView.html\" rel=\"nofollow ugc noopener\"><code>WebView</code></a>::<code>toggle_sampling_profiler</code> has been removed (<a href=\"https://github.com/lumiscosity\" rel=\"nofollow ugc noopener\">@lumiscosity</a>, <a href=\"https://github.com/servo/servo/pull/47014\" rel=\"nofollow ugc noopener\">#47014</a>).\nTo perform sampling profiling on Servo, follow the instructions in <a href=\"https://book.servo.org/contributing/profiling.html\" rel=\"nofollow ugc noopener\">the book</a>.</p>\n<p><strong>Breaking change:</strong> The variants of <a href=\"https://doc.servo.org/servo/enum.MouseButton.html\" rel=\"nofollow ugc noopener\"><code>MouseButton</code></a> have been renamed to <code>Primary</code>, <code>Secondary</code>, and <code>Auxiliary</code> (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/SimonSapin\" rel=\"nofollow ugc noopener\">@SimonSapin</a>, <a href=\"https://github.com/servo/servo/pull/47327\" rel=\"nofollow ugc noopener\">#47327</a>).</p>\n<p>We’ve added several new Cargo features reflecting common usage patterns:</p>\n<ul><li><code>default_web_features</code>, to include optional web platform features in the build (e.g. WebXR and WebGPU) (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/44032\" rel=\"nofollow ugc noopener\">#44032</a>)</li><li><code>bundled</code>, to include required resources in the binary (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/44032\" rel=\"nofollow ugc noopener\">#44032</a>)</li><li><code>brotli-compression-stream</code>, enabling support for <code>brotli</code> content in the <code>CompressionStream</code>/<code>DecompressionStream</code> web APIs (<a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47197\" rel=\"nofollow ugc noopener\">#47197</a>)</li><li><code>webcrypto</code>, to enable support for the Crypto and WebCrypto web APIs (<a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/servo/servo/pull/47198\" rel=\"nofollow ugc noopener\">#47198</a>)</li><li><code>webgl</code>, to enable support for WebGL (<a href=\"https://github.com/janeoa\" rel=\"nofollow ugc noopener\">@janeoa</a>, <a href=\"https://github.com/servo/servo/pull/47200\" rel=\"nofollow ugc noopener\">#47200</a>)</li></ul>\n<h2 id=\"for-users-and-developers\">For users and developers</h2>\n<p>One visible change is that interactive <strong>text selection</strong> now works!\nThis is the result of lots of work across our script and layout code to ensure it respects the actual geometry of the page content (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/SimonSapin\" rel=\"nofollow ugc noopener\">@SimonSapin</a>, <a href=\"https://github.com/servo/servo/pull/47022\" rel=\"nofollow ugc noopener\">#47022</a>, <a href=\"https://github.com/servo/servo/pull/47025\" rel=\"nofollow ugc noopener\">#47025</a>, <a href=\"https://github.com/servo/servo/pull/47329\" rel=\"nofollow ugc noopener\">#47329</a>, <a href=\"https://github.com/servo/servo/pull/47358\" rel=\"nofollow ugc noopener\">#47358</a>, <a href=\"https://github.com/servo/servo/pull/46982\" rel=\"nofollow ugc noopener\">#46982</a>, <a href=\"https://github.com/servo/servo/pull/47425\" rel=\"nofollow ugc noopener\">#47425</a>, <a href=\"https://github.com/servo/servo/pull/47438\" rel=\"nofollow ugc noopener\">#47438</a>, <a href=\"https://github.com/servo/servo/pull/47437\" rel=\"nofollow ugc noopener\">#47437</a>, <a href=\"https://github.com/servo/servo/pull/47581\" rel=\"nofollow ugc noopener\">#47581</a>, <a href=\"https://github.com/servo/servo/pull/47070\" rel=\"nofollow ugc noopener\">#47070</a>, <a href=\"https://github.com/servo/servo/pull/47048\" rel=\"nofollow ugc noopener\">#47048</a>, <a href=\"https://github.com/servo/servo/pull/46963\" rel=\"nofollow ugc noopener\">#46963</a>).</p>\n<p><a href=\"https://servo.org/img/blog/2026-10-select.png\" rel=\"nofollow ugc noopener\"><img src=\"https://servo.org/img/blog/2026-10-select.png\" alt=\"servoshell 0.6.0 showing text selection on an element using CSS perspective\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></a></p>\n<p>Building Servo now requires at least <strong>Clang 19</strong> on all platforms (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47421\" rel=\"nofollow ugc noopener\">#47421</a>).\nAdditionally, the <code>cargo-ohos</code> tool is now required for building for OpenHarmony (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47334\" rel=\"nofollow ugc noopener\">#47334</a>).</p>\n<p>Debug builds on Windows can now complete successfully (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47372\" rel=\"nofollow ugc noopener\">#47372</a>).</p>\n<p>Linux arm64 builds have been customized to work on <strong>Raspberry Pi 5</strong> (<a href=\"https://github.com/mukilan\" rel=\"nofollow ugc noopener\">@mukilan</a>, <a href=\"https://github.com/servo/servo/pull/47113\" rel=\"nofollow ugc noopener\">#47113</a>).\nAny libservo embedders targeting the same platform will require a similar change if they are using jemalloc.</p>\n<h3 id=\"servoshell\">servoshell</h3>\n<p>Under <strong>Wayland</strong> and <strong>OpenHarmony</strong>, we now integrate with the system clipboard (<a href=\"https://github.com/TheZoq2\" rel=\"nofollow ugc noopener\">@TheZoq2</a>, <a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/46938\" rel=\"nofollow ugc noopener\">#46938</a>, <a href=\"https://github.com/servo/servo/pull/47177\" rel=\"nofollow ugc noopener\">#47177</a>).</p>\n<p>The macOS command key and Windows logo key is now reported as <code>Meta</code> instead of <code>Super</code> (<a href=\"https://github.com/eachra-bawn\" rel=\"nofollow ugc noopener\">@eachra-bawn</a>, <a href=\"https://github.com/servo/servo/pull/47330\" rel=\"nofollow ugc noopener\">#47330</a>).</p>\n<p>The <strong>Android</strong> port has had many rough edges filed off as part of modernizing it for the <strong>Compose UI</strong> (<a href=\"https://github.com/veyndan\" rel=\"nofollow ugc noopener\">@veyndan</a>, <a href=\"https://github.com/servo/servo/pull/47656\" rel=\"nofollow ugc noopener\">#47656</a>, <a href=\"https://github.com/servo/servo/pull/47491\" rel=\"nofollow ugc noopener\">#47491</a>, <a href=\"https://github.com/servo/servo/pull/47494\" rel=\"nofollow ugc noopener\">#47494</a>, <a href=\"https://github.com/servo/servo/pull/47697\" rel=\"nofollow ugc noopener\">#47697</a>, <a href=\"https://github.com/servo/servo/pull/46955\" rel=\"nofollow ugc noopener\">#46955</a>, <a href=\"https://github.com/servo/servo/pull/47644\" rel=\"nofollow ugc noopener\">#47644</a>, <a href=\"https://github.com/servo/servo/pull/47652\" rel=\"nofollow ugc noopener\">#47652</a>, <a href=\"https://github.com/servo/servo/pull/47276\" rel=\"nofollow ugc noopener\">#47276</a>, <a href=\"https://github.com/servo/servo/pull/47277\" rel=\"nofollow ugc noopener\">#47277</a>, <a href=\"https://github.com/servo/servo/pull/47299\" rel=\"nofollow ugc noopener\">#47299</a>, <a href=\"https://github.com/servo/servo/pull/47439\" rel=\"nofollow ugc noopener\">#47439</a>) and converting its implementation to Kotlin (<a href=\"https://github.com/veyndan\" rel=\"nofollow ugc noopener\">@veyndan</a>, <a href=\"https://github.com/servo/servo/pull/46926\" rel=\"nofollow ugc noopener\">#46926</a>, <a href=\"https://github.com/servo/servo/pull/46925\" rel=\"nofollow ugc noopener\">#46925</a>, <a href=\"https://github.com/servo/servo/pull/46951\" rel=\"nofollow ugc noopener\">#46951</a>, <a href=\"https://github.com/servo/servo/pull/46965\" rel=\"nofollow ugc noopener\">#46965</a>).\nLibrary consumers are no longer responsible for implementing <strong>pause and resume</strong> support (<a href=\"https://github.com/veyndan\" rel=\"nofollow ugc noopener\">@veyndan</a>, <a href=\"https://github.com/servo/servo/pull/47555\" rel=\"nofollow ugc noopener\">#47555</a>).</p>\n<p>Meanwhile, the <strong>OpenHarmony</strong> port now supports external keyboards with US keyboard layouts (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47359\" rel=\"nofollow ugc noopener\">#47359</a>).\nAdditionally, there are now better fallback font selections for CJK characters (<a href=\"https://github.com/RichardTjokroutomo\" rel=\"nofollow ugc noopener\">@RichardTjokroutomo</a>, <a href=\"https://github.com/servo/servo/pull/47116\" rel=\"nofollow ugc noopener\">#47116</a>, <a href=\"https://github.com/servo/servo/pull/47664\" rel=\"nofollow ugc noopener\">#47664</a>).</p>\n<p>Setting the <code>device_pixel_ratio_override</code> preference is no longer ignored on Android and OpenHarmony (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47081\" rel=\"nofollow ugc noopener\">#47081</a>).</p>\n<h2 id=\"performance-and-stability\">Performance and stability</h2>\n<p>There were many small changes this month that <strong>removed unnecessary allocations</strong> (<a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/47264\" rel=\"nofollow ugc noopener\">#47264</a>, <a href=\"https://github.com/servo/servo/pull/47147\" rel=\"nofollow ugc noopener\">#47147</a>, <a href=\"https://github.com/servo/servo/pull/47066\" rel=\"nofollow ugc noopener\">#47066</a>, <a href=\"https://github.com/servo/servo/pull/47249\" rel=\"nofollow ugc noopener\">#47249</a>, <a href=\"https://github.com/servo/servo/pull/47249\" rel=\"nofollow ugc noopener\">#47249</a>, <a href=\"https://github.com/servo/servo/pull/47285\" rel=\"nofollow ugc noopener\">#47285</a>, <a href=\"https://github.com/servo/servo/pull/47307\" rel=\"nofollow ugc noopener\">#47307</a>, <a href=\"https://github.com/servo/servo/pull/47343\" rel=\"nofollow ugc noopener\">#47343</a>, <a href=\"https://github.com/servo/servo/pull/47361\" rel=\"nofollow ugc noopener\">#47361</a>, <a href=\"https://github.com/servo/servo/pull/47395\" rel=\"nofollow ugc noopener\">#47395</a>, <a href=\"https://github.com/servo/servo/pull/47427\" rel=\"nofollow ugc noopener\">#47427</a>, <a href=\"https://github.com/servo/servo/pull/47454\" rel=\"nofollow ugc noopener\">#47454</a>, <a href=\"https://github.com/servo/servo/pull/47474\" rel=\"nofollow ugc noopener\">#47474</a>, <a href=\"https://github.com/servo/servo/pull/47506\" rel=\"nofollow ugc noopener\">#47506</a>, <a href=\"https://github.com/servo/servo/pull/47479\" rel=\"nofollow ugc noopener\">#47479</a>, <a href=\"https://github.com/servo/servo/pull/47530\" rel=\"nofollow ugc noopener\">#47530</a>, <a href=\"https://github.com/servo/servo/pull/47541\" rel=\"nofollow ugc noopener\">#47541</a>, <a href=\"https://github.com/servo/servo/pull/47566\" rel=\"nofollow ugc noopener\">#47566</a>, <a href=\"https://github.com/servo/servo/pull/47509\" rel=\"nofollow ugc noopener\">#47509</a>, <a href=\"https://github.com/servo/servo/pull/47622\" rel=\"nofollow ugc noopener\">#47622</a>).</p>\n<p>We also <strong>reduced GC interactions</strong> leading to better JS performance (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/webbeef\" rel=\"nofollow ugc noopener\">@webbeef</a>, <a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47513\" rel=\"nofollow ugc noopener\">#47513</a>, <a href=\"https://github.com/servo/servo/pull/47250\" rel=\"nofollow ugc noopener\">#47250</a>, <a href=\"https://github.com/servo/servo/pull/47158\" rel=\"nofollow ugc noopener\">#47158</a>, <a href=\"https://github.com/servo/servo/pull/47165\" rel=\"nofollow ugc noopener\">#47165</a>, <a href=\"https://github.com/servo/servo/pull/47049\" rel=\"nofollow ugc noopener\">#47049</a>, <a href=\"https://github.com/servo/servo/pull/47251\" rel=\"nofollow ugc noopener\">#47251</a>, <a href=\"https://github.com/servo/servo/pull/47510\" rel=\"nofollow ugc noopener\">#47510</a>, <a href=\"https://github.com/servo/servo/pull/46981\" rel=\"nofollow ugc noopener\">#46981</a>).</p>\n<p>On platforms that memory map font data (such as OpenHarmony and macOS), we can now save time that would otherwise be spent loading font files from disk (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47029\" rel=\"nofollow ugc noopener\">#47029</a>).\nSimilarly, reading system fonts is no longer in the critical path of starting up the engine (<a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/46476\" rel=\"nofollow ugc noopener\">#46476</a>).</p>\n<p>There were were also a number of savings in the final binary size (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/kkoyung\" rel=\"nofollow ugc noopener\">@kkoyung</a>, <a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47211\" rel=\"nofollow ugc noopener\">#47211</a>, <a href=\"https://github.com/servo/servo/pull/47214\" rel=\"nofollow ugc noopener\">#47214</a>, <a href=\"https://github.com/servo/servo/pull/47210\" rel=\"nofollow ugc noopener\">#47210</a>, <a href=\"https://github.com/servo/servo/pull/46950\" rel=\"nofollow ugc noopener\">#46950</a>).</p>\n<p>We <strong>fixed crashes</strong> related to media playback (<a href=\"https://github.com/calvaris\" rel=\"nofollow ugc noopener\">@calvaris</a>, <a href=\"https://github.com/servo/servo/pull/46891\" rel=\"nofollow ugc noopener\">#46891</a>), the 2d canvas renderer (<a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/46915\" rel=\"nofollow ugc noopener\">#46915</a>), fonts with negative line gaps (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/47374\" rel=\"nofollow ugc noopener\">#47374</a>), and resolving fonts variants (<a href=\"https://github.com/simonwuelker\" rel=\"nofollow ugc noopener\">@simonwuelker</a>, <a href=\"https://github.com/servo/servo/pull/47356\" rel=\"nofollow ugc noopener\">#47356</a>).</p>\n<p>Canvas renderer worker threads can now be adjusted by the <code>thread_pool_canvas_workers</code> preference, allowing more performance granularity according to embedder needs. (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/servo/servo/pull/46691\" rel=\"nofollow ugc noopener\">#46691</a>, <a href=\"https://github.com/servo/servo/pull/47018\" rel=\"nofollow ugc noopener\">#47018</a>)</p>\n<p>We’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey <strong>safer and more reliable</strong> (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/treetmitterglad\" rel=\"nofollow ugc noopener\">@treetmitterglad</a>, <a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/Gae24\" rel=\"nofollow ugc noopener\">@Gae24</a>, <a href=\"https://github.com/servo/servo/pull/47398\" rel=\"nofollow ugc noopener\">#47398</a>, <a href=\"https://github.com/servo/servo/pull/47296\" rel=\"nofollow ugc noopener\">#47296</a>, <a href=\"https://github.com/servo/servo/pull/47051\" rel=\"nofollow ugc noopener\">#47051</a>, <a href=\"https://github.com/servo/servo/pull/47005\" rel=\"nofollow ugc noopener\">#47005</a>, <a href=\"https://github.com/servo/servo/pull/47323\" rel=\"nofollow ugc noopener\">#47323</a>, <a href=\"https://github.com/servo/servo/pull/47297\" rel=\"nofollow ugc noopener\">#47297</a>, <a href=\"https://github.com/servo/servo/pull/47322\" rel=\"nofollow ugc noopener\">#47322</a>, <a href=\"https://github.com/servo/servo/pull/47368\" rel=\"nofollow ugc noopener\">#47368</a>, <a href=\"https://github.com/servo/servo/pull/47446\" rel=\"nofollow ugc noopener\">#47446</a>, <a href=\"https://github.com/servo/servo/pull/47317\" rel=\"nofollow ugc noopener\">#47317</a>). We’re also working on statically preventing <a href=\"https://github.com/servo/servo/issues/39139\" rel=\"nofollow ugc noopener\">a footgun</a> that can lead to uncollectible GC cycles and leaking memory (<a href=\"https://github.com/Gae24\" rel=\"nofollow ugc noopener\">@Gae24</a>, <a href=\"https://github.com/servo/servo/pull/47355\" rel=\"nofollow ugc noopener\">#47355</a>, <a href=\"https://github.com/servo/servo/pull/47650\" rel=\"nofollow ugc noopener\">#47650</a>).</p>\n<p>Historically, <strong>about:memory</strong> has reported all memory usage by Rust implementations of JS APIs as one undifferentiated <code>js/malloc-heap</code> number.\nWe now break it down by memory usage of nodes in document trees (<a href=\"https://github.com/pylbrecht\" rel=\"nofollow ugc noopener\">@pylbrecht</a>, <a href=\"https://github.com/servo/servo/pull/46931\" rel=\"nofollow ugc noopener\">#46931</a>) and interfaces that are not part of the DOM (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47531\" rel=\"nofollow ugc noopener\">#47531</a>). We also report memory usage for the network stack’s cookie database (<a href=\"https://github.com/Narfinger\" rel=\"nofollow ugc noopener\">@Narfinger</a>, <a href=\"https://github.com/servo/servo/pull/47248\" rel=\"nofollow ugc noopener\">#47248</a>) and the canvas renderer backend (<a href=\"https://github.com/janeoa\" rel=\"nofollow ugc noopener\">@janeoa</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/46958\" rel=\"nofollow ugc noopener\">#46958</a>).</p>\n<p>We’ve added an <strong>experimental threadboost</strong> mechanism (<a href=\"https://github.com/jschwe\" rel=\"nofollow ugc noopener\">@jschwe</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46843\" rel=\"nofollow ugc noopener\">#46843</a>, <a href=\"https://github.com/servo/servo/pull/47027\" rel=\"nofollow ugc noopener\">#47027</a>) that has been observed to improve Speedometer results by <strong>50%</strong> and allow canvas rendering to reach 60 FPS.\nThis is initially enabled for OpenHarmony, but future expansion to other Linux-based platforms is expected.</p>\n<h2 id=\"more-on-the-web-platform\">More on the web platform</h2>\n<p>We upgraded to <a href=\"https://github.com/linebender/resvg/blob/main/CHANGELOG.md#0480-2026-07-31\" rel=\"nofollow ugc noopener\">resvg 0.48</a>, fixing <strong>many issues with SVG images</strong> with missing width/height attributes that specified a <code>viewBox</code> (<a href=\"https://github.com/nicoburns\" rel=\"nofollow ugc noopener\">@nicoburns</a>, <a href=\"https://github.com/servo/servo/pull/46937\" rel=\"nofollow ugc noopener\">#46937</a>).</p>\n<p>Upgrading to <a href=\"https://github.com/DioxusLabs/taffy/blob/main/CHANGELOG.md#0130\" rel=\"nofollow ugc noopener\">Taffy 0.14</a> fixed a number of <strong>CSS grid-related crashes</strong>, support for grid names, better intrinsic sizing, and improved performance (<a href=\"https://github.com/nicoburns\" rel=\"nofollow ugc noopener\">@nicoburns</a>, <a href=\"https://github.com/servo/servo/pull/47031\" rel=\"nofollow ugc noopener\">#47031</a>, <a href=\"https://github.com/servo/servo/pull/47493\" rel=\"nofollow ugc noopener\">#47493</a>).\nWe also fixed some issues in the Taffy grid integration for more accurate baselines (<a href=\"https://github.com/nicoburns\" rel=\"nofollow ugc noopener\">@nicoburns</a>, <a href=\"https://github.com/servo/servo/pull/47518\" rel=\"nofollow ugc noopener\">#47518</a>).</p>\n<p>Session history traversals (i.e. navigating backwards or forwards in history) now wait for any outstanding traversal to complete (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47293\" rel=\"nofollow ugc noopener\">#47293</a>, <a href=\"https://github.com/servo/servo/pull/47485\" rel=\"nofollow ugc noopener\">#47485</a>).\nMeanwhile, navigations to <code>about:blank</code> are skipped if the initial about:blank document is present (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47074\" rel=\"nofollow ugc noopener\">#47074</a>).</p>\n<p><code>about:blank</code> documents no longer use the asynchronous HTML parser (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47050\" rel=\"nofollow ugc noopener\">#47050</a>), and no longer report a <code>readyState</code> of <code>LOADING</code> (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47450\" rel=\"nofollow ugc noopener\">#47450</a>).\nOpening auxiliary windows will wait to dispatch the load event until the initial <code>about:blank</code> document has <a href=\"https://html.spec.whatwg.org/multipage/document-sequences.html#windows%3Awindow\" rel=\"nofollow ugc noopener\">been replaced</a> (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47442\" rel=\"nofollow ugc noopener\">#47442</a>, <a href=\"https://github.com/servo/servo/pull/46975\" rel=\"nofollow ugc noopener\">#46975</a>).</p>\n<p>For non-about:blank content, we also made the document loading phases more reliable (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47426\" rel=\"nofollow ugc noopener\">#47426</a>), improved conformance of <code>javascript:</code> URL evaluation and navigation target selection (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47486\" rel=\"nofollow ugc noopener\">#47486</a>, <a href=\"https://github.com/servo/servo/pull/47516\" rel=\"nofollow ugc noopener\">#47516</a>), and addressed longstanding compatibility issues with cross-origin <code>Window</code> and <code>Location</code> objects (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47549\" rel=\"nofollow ugc noopener\">#47549</a>).</p>\n<p>Our media playback has improved; we fixed several issues around <strong>canPlayType()</strong> on <strong>HTMLMediaElement</strong> that allow Servo to report that <strong>MP4 content is playable</strong> (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47612\" rel=\"nofollow ugc noopener\">#47612</a>, <a href=\"https://github.com/servo/servo/pull/47641\" rel=\"nofollow ugc noopener\">#47641</a>, <a href=\"https://github.com/servo/servo/pull/47670\" rel=\"nofollow ugc noopener\">#47670</a>).</p>\n<p>Input elements with the <code>autofocus</code> property inside of a <code>&lt;dialog&gt;</code> now receive focus when that dialog is opened (<a href=\"https://github.com/skyz1\" rel=\"nofollow ugc noopener\">@skyz1</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/45826\" rel=\"nofollow ugc noopener\">#45826</a>).</p>\n<p>We improved the exception error text for numerous web APIs (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/eachra-bawn\" rel=\"nofollow ugc noopener\">@eachra-bawn</a>, <a href=\"https://github.com/servo/servo/pull/46960\" rel=\"nofollow ugc noopener\">#46960</a>, <a href=\"https://github.com/servo/servo/pull/47124\" rel=\"nofollow ugc noopener\">#47124</a>, <a href=\"https://github.com/servo/servo/pull/47168\" rel=\"nofollow ugc noopener\">#47168</a>, <a href=\"https://github.com/servo/servo/pull/47580\" rel=\"nofollow ugc noopener\">#47580</a>, <a href=\"https://github.com/servo/servo/pull/47430\" rel=\"nofollow ugc noopener\">#47430</a>, <a href=\"https://github.com/servo/servo/pull/47127\" rel=\"nofollow ugc noopener\">#47127</a>).</p>\n<p>We also fixed issues related to many other APIs, including:</p>\n<ul><li>matching other browsers’ treatment of <strong>Access-Control-Allow-Headers</strong> (<a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/47600\" rel=\"nofollow ugc noopener\">#47600</a>)</li><li>WebCrypto <strong>CryptoKey</strong> usage checks (<a href=\"https://github.com/kkoyung\" rel=\"nofollow ugc noopener\">@kkoyung</a>, <a href=\"https://github.com/servo/servo/pull/47112\" rel=\"nofollow ugc noopener\">#47112</a>, <a href=\"https://github.com/servo/servo/pull/47141\" rel=\"nofollow ugc noopener\">#47141</a>, <a href=\"https://github.com/servo/servo/pull/47178\" rel=\"nofollow ugc noopener\">#47178</a>) and key lengths (<a href=\"https://github.com/kkoyung\" rel=\"nofollow ugc noopener\">@kkoyung</a>, <a href=\"https://github.com/servo/servo/pull/47452\" rel=\"nofollow ugc noopener\">#47452</a>, <a href=\"https://github.com/servo/servo/pull/47453\" rel=\"nofollow ugc noopener\">#47453</a>)</li><li>determining referrers when navigating (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47487\" rel=\"nofollow ugc noopener\">#47487</a>)</li><li>reading <strong>name</strong> on <strong>Window</strong> inside of iframes (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/47270\" rel=\"nofollow ugc noopener\">#47270</a>)</li><li>many edge cases around determining dirty roots for incremental layout (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46906\" rel=\"nofollow ugc noopener\">#46906</a>)</li><li>edge cases around <strong>compareDocumentPosition</strong> on <strong>Node</strong> (<a href=\"https://github.com/SimonSapin\" rel=\"nofollow ugc noopener\">@SimonSapin</a>, <a href=\"https://github.com/servo/servo/pull/46886\" rel=\"nofollow ugc noopener\">#46886</a>)</li><li>resolving ties in web font matching (<a href=\"https://github.com/simonwuelker\" rel=\"nofollow ugc noopener\">@simonwuelker</a>, <a href=\"https://github.com/servo/servo/pull/47449\" rel=\"nofollow ugc noopener\">#47449</a>)</li><li>Range.<strong>getClientBoundingRect()</strong>/<strong>getClientRects</strong>() for empty ranges (<a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/47143\" rel=\"nofollow ugc noopener\">#47143</a>)</li><li>JS module fetching failures can now be retried (<a href=\"https://github.com/Gae24\" rel=\"nofollow ugc noopener\">@Gae24</a>, <a href=\"https://github.com/servo/servo/pull/46919\" rel=\"nofollow ugc noopener\">#46919</a>)</li><li><code>KeyEvent.keyCode</code> values for many <strong>nonprintable keys</strong> now match other browsers (<a href=\"https://github.com/eachra-bawn\" rel=\"nofollow ugc noopener\">@eachra-bawn</a>, <a href=\"https://github.com/servo/servo/pull/47461\" rel=\"nofollow ugc noopener\">#47461</a>)</li><li>making <strong>timing</strong> on <strong>Performance</strong> return a <code>PerformanceTiming</code> object (<a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/aniebietafia\" rel=\"nofollow ugc noopener\">@aniebietafia</a>, <a href=\"https://github.com/servo/servo/pull/46990\" rel=\"nofollow ugc noopener\">#46990</a>)</li><li>synthesizing font variations from <code>font-style</code> (<a href=\"https://github.com/simonwuelker\" rel=\"nofollow ugc noopener\">@simonwuelker</a>, <a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46918\" rel=\"nofollow ugc noopener\">#46918</a>, <a href=\"https://github.com/servo/servo/pull/47364\" rel=\"nofollow ugc noopener\">#47364</a>)</li><li>the <strong>Get Element Tag Name</strong> WebDriver command (<a href=\"https://github.com/yezhizhen\" rel=\"nofollow ugc noopener\">@yezhizhen</a>, <a href=\"https://github.com/servo/servo/pull/47216\" rel=\"nofollow ugc noopener\">#47216</a>)</li><li>removed nonstandard WebDriver-related properties on the global object (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47542\" rel=\"nofollow ugc noopener\">#47542</a>)</li><li>sniffing RAR responses correctly (<a href=\"https://github.com/wood-ghost\" rel=\"nofollow ugc noopener\">@wood-ghost</a>, <a href=\"https://github.com/servo/servo/pull/47366\" rel=\"nofollow ugc noopener\">#47366</a>)</li><li><code>Attribute</code> nodes created during parsing now have the expected namespace prefix (<a href=\"https://github.com/Ms2ger\" rel=\"nofollow ugc noopener\">@Ms2ger</a>, <a href=\"https://github.com/servo/servo/pull/47030\" rel=\"nofollow ugc noopener\">#47030</a>)</li><li>improving <strong>text-transform: capitalize</strong> (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46910\" rel=\"nofollow ugc noopener\">#46910</a>)</li><li>zero-sized margins inside of inline boxes (<a href=\"https://github.com/Loirooriol\" rel=\"nofollow ugc noopener\">@Loirooriol</a>, <a href=\"https://github.com/servo/servo/pull/47020\" rel=\"nofollow ugc noopener\">#47020</a>)</li><li>incorrect <code>buttons</code> values in pointer capture transitions (<a href=\"https://github.com/steigeo\" rel=\"nofollow ugc noopener\">@steigeo</a>, <a href=\"https://github.com/servo/servo/pull/45628\" rel=\"nofollow ugc noopener\">#45628</a>)</li><li>empty lists returned by <strong>load()</strong> on <strong>FontFaceSet</strong> (<a href=\"https://github.com/simonwuelker\" rel=\"nofollow ugc noopener\">@simonwuelker</a>, <a href=\"https://github.com/servo/servo/pull/47564\" rel=\"nofollow ugc noopener\">#47564</a>)</li><li>cancelling more ongoing network requests when performing a navigation (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/47576\" rel=\"nofollow ugc noopener\">#47576</a>)</li><li>shaping text across inline boxes (<a href=\"https://github.com/mrobinson\" rel=\"nofollow ugc noopener\">@mrobinson</a>, <a href=\"https://github.com/servo/servo/pull/46829\" rel=\"nofollow ugc noopener\">#46829</a>)</li><li>scrollable overflow for <code>position: sticky</code> (<a href=\"https://github.com/rayguo17\" rel=\"nofollow ugc noopener\">@rayguo17</a>, <a href=\"https://github.com/servo/servo/pull/43766\" rel=\"nofollow ugc noopener\">#43766</a>)</li><li>fixing hyperlinks for blob: URLs (<a href=\"https://github.com/TimvdLippe\" rel=\"nofollow ugc noopener\">@TimvdLippe</a>, <a href=\"https://github.com/servo/servo/pull/47226\" rel=\"nofollow ugc noopener\">#47226</a>)</li><li>firing the error callback for <strong>decodeAudioData</strong> on <strong>BaseAudioContext</strong> (<a href=\"https://github.com/amittenak47\" rel=\"nofollow ugc noopener\">@amittenak47</a>, <a href=\"https://github.com/jdm\" rel=\"nofollow ugc noopener\">@jdm</a>, <a href=\"https://github.com/servo/servo/pull/46870\" rel=\"nofollow ugc noopener\">#46870</a>)</li></ul>\n<h2 id=\"new-contributors\">New contributors</h2>\n<p>A special thanks to the following people for landing their first patch in Servo:</p>\n<ul><li>Frans Skarman (<a href=\"https://github.com/TheZoq2\" rel=\"nofollow ugc noopener\">@TheZoq2</a>, <a href=\"https://github.com/servo/servo/pull/46938\" rel=\"nofollow ugc noopener\">#46938</a>)</li><li>Moamen Hesham (<a href=\"https://github.com/moamenhesham0\" rel=\"nofollow ugc noopener\">@moamenhesham0</a>, <a href=\"https://github.com/servo/servo/pull/47391\" rel=\"nofollow ugc noopener\">#47391</a>)</li><li>Miles Wirht (<a href=\"https://github.com/philocalyst\" rel=\"nofollow ugc noopener\">@philocalyst</a>, <a href=\"https://github.com/servo/servo/pull/46996\" rel=\"nofollow ugc noopener\">#46996</a>)</li><li>Vaibhav Srivastava (<a href=\"https://github.com/vaibhav8a\" rel=\"nofollow ugc noopener\">@vaibhav8a</a>, <a href=\"https://github.com/servo/servo/pull/47626\" rel=\"nofollow ugc noopener\">#47626</a>)</li><li>wood-ghost (<a href=\"https://github.com/wood-ghost\" rel=\"nofollow ugc noopener\">@wood-ghost</a>, <a href=\"https://github.com/servo/servo/pull/47366\" rel=\"nofollow ugc noopener\">#47366</a>)</li><li>禾可 (<a href=\"https://github.com/Lfan-ke\" rel=\"nofollow ugc noopener\">@Lfan-ke</a>, <a href=\"https://github.com/servo/servo/pull/47514\" rel=\"nofollow ugc noopener\">#47514</a>)</li></ul>\n<p>Interested in helping build a web browser?\nTake a look at our <a href=\"https://starters.servo.org\" rel=\"nofollow ugc noopener\">curated list</a> of issues that are good for new contributors!</p>\n<h2 id=\"donations\">Donations</h2>\n<p>Thanks again for your generous support!\nWe are now receiving <strong>8128 USD/month</strong> (+3% from July) in recurring donations.\nThis helps us cover the cost of our <strong><a href=\"https://ci0.servo.org\" rel=\"nofollow ugc noopener\">speedy</a> <a href=\"https://ci1.servo.org\" rel=\"nofollow ugc noopener\">CI</a> <a href=\"https://ci2.servo.org\" rel=\"nofollow ugc noopener\">and</a> <a href=\"https://ci3.servo.org\" rel=\"nofollow ugc noopener\">benchmarking</a> <a href=\"https://ci4.servo.org\" rel=\"nofollow ugc noopener\">servers</a></strong>, one of our latest <strong><a href=\"https://www.outreachy.org/alums/2026-05/#:~:text=Servo\" rel=\"nofollow ugc noopener\">Outreachy interns</a></strong>, and funding <strong><a href=\"https://servo.org/blog/2026/09/15/one-year-of-sponsorship/\" rel=\"nofollow ugc noopener\">maintainer work</a></strong> that helps more people contribute to Servo.</p>\n<p>Servo is also on <a href=\"https://thanks.dev\" rel=\"nofollow ugc noopener\">thanks.dev</a>, and already <strong>36 GitHub users</strong> (+1 from July) that depend on Servo are sponsoring us there.\nIf you use Servo libraries like <a href=\"https://crates.io/crates/url/reverse_dependencies\" rel=\"nofollow ugc noopener\">url</a>, <a href=\"https://crates.io/crates/html5ever/reverse_dependencies\" rel=\"nofollow ugc noopener\">html5ever</a>, <a href=\"https://crates.io/crates/selectors/reverse_dependencies\" rel=\"nofollow ugc noopener\">selectors</a>, or <a href=\"https://crates.io/crates/cssparser/reverse_dependencies\" rel=\"nofollow ugc noopener\">cssparser</a>, signing up for <a href=\"https://thanks.dev\" rel=\"nofollow ugc noopener\">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>\n<p>We now have <a href=\"https://servo.org/blog/2025/11/21/sponsorship-tiers/\" rel=\"nofollow ugc noopener\"><strong>sponsorship tiers</strong></a> that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.\nIf you’re interested in this kind of sponsorship, please contact us at join@servo.org.</p>\n<p>Use of donations is decided transparently via the Technical Steering Committee’s public <strong><a href=\"https://github.com/servo/project/blob/main/FUNDING_REQUEST.md\" rel=\"nofollow ugc noopener\">funding request process</a></strong>, and active proposals are tracked in <a href=\"https://github.com/servo/project/issues/187\" rel=\"nofollow ugc noopener\">servo/project#187</a>.\nFor more details, head to our <a href=\"https://servo.org/sponsorship/\" rel=\"nofollow ugc noopener\">Sponsorship page</a>.</p>","headings":[{"level":2,"text":"Security","id":"security"},{"level":2,"text":"Real world compat","id":"real-world-compat"},{"level":2,"text":"Work in progress","id":"work-in-progress"},{"level":2,"text":"Embedding API","id":"embedding-api"},{"level":2,"text":"For users and developers","id":"for-users-and-developers"},{"level":3,"text":"servoshell","id":"servoshell"},{"level":2,"text":"Performance and stability","id":"performance-and-stability"},{"level":2,"text":"More on the web platform","id":"more-on-the-web-platform"},{"level":2,"text":"New contributors","id":"new-contributors"},{"level":2,"text":"Donations","id":"donations"}]}}