July in Servo: and more!

ao!! wrrrrao!!

Posted 2026-08-31

Servo 0.5.0 contains all of the changes we landed in July, which came out to 488 commits. For security fixes, see § Security.

DOM text selections are now visible (@mrobinson, @SimonSapin, #46698, #46864, #46742, #46889, #46126). Interactive selection is coming soon!

We’ve shipped several new web platform features:

  • ‘Cache-Control: stale-while-revalidate’ (@arayaryoma, #46060)
  • <path d> (@mu-mostafa98, #46558)
  • <circle cx, cy, r> (@mu-mostafa98, #46558)
  • <ellipse cx, cy, rx, ry> (@mu-mostafa98, #46558)
  • <image x, y, width, height> (@mu-mostafa98, #46558)
  • <rect x, y, width, height, rx, ry> (@mu-mostafa98, #46558)
  • ‘text-decoration-thickness’ (@nicoburns, #46592)
  • ‘box-decoration-break’, for the most part (@Psychpsyo, #45492)
  • ‘@font-feature-values’, for the most part (@simonwuelker, #45308)
  • ‘font-language-override’, for the most part (@simonwuelker, #46618)
  • ‘font-variant-alternates’, for the most part (@simonwuelker, #45308)

Plus a bunch of new DOM APIs:

  • Ed448, X448, and KMAC algorithms in Subtle­Crypto (@kkoyung, #46402, #46141, #46180, #46583, #46606, #46622, #46334, #46376)
  • ‘insert­Horizontal­Rule’, ‘insert­Image’, ‘insert­Text’, and ‘forward­Delete’ commands in document.exec­Command() (@Psychpsyo, #46608, #46597, #46538, #46838)
  • Animation­Effect (@simonwuelker, #46677)
  • new Touch() (@yezhizhen, #46741)
  • duplex property on Request (@Taym95, #46858)
  • effect property on Animation (@simonwuelker, #46677)
  • get­Keyframes() and set­Keyframes() on Keyframe­Effect (@simonwuelker, #46118)
  • id property on Largest­Contentful­Paint (@shubhamg13, #46828)
  • read-only CSS­Font­Feature­Values­Rule (@simonwuelker, #46728)

This is another big update, so here’s an outline:

You can help!

If you’re working on a pull request that you think might be interesting for the next monthly update, even if you’re not 100% sure, tell us about it by following the steps below:

  1. You add the monthly update label to your pull request, or comment @servo-highfive monthly update

  2. Highfive posts a comment asking you some questions

  3. You answer those questions in a comment containing @servo-highfive monthly update answer

Security

Real world compat

We’re interested to hear how well your favourite websites run in Servo! Report successes in this Zulip thread, and failures in our GitHub issues.

Work in progress

The upgrade to Stylo 2026-07-01 brings several changes to built-in CSS functions (@Loirooriol, #46129):

  • ‘alpha()’ is now supported, under --pref layout­_css­_alpha­_color­_function­_enabled

  • ‘progress()’ is now supported, under --pref layout­_css­_progress­_function­_enabled

  • ‘ellipse()’ values ‘closest-corner’ and ‘farthest-corner’ are no longer stable due to spec uncertainty, but they are still experimental, under --pref layout­_css­_ellipse­_corners­_enabled

  • ‘attr()’ is more conformant, under --pref layout­_css­_attr­_enabled

Web­GPU content can now enjoy better conformance and use GPU­External­Texture and import­External­Texture() on GPU­Device, under --pref dom­_webgpu­_enabled (@sagudev, #45873, #46178, #46286).

Indexed­DB content can now use the name property on IDB­Index, under --pref dom­_indexeddb­_enabled (@skyz1, #45512).

document.fonts now includes a Font­Face for each valid ‘@font-face’, under --pref dom­_fontface­_enabled (@simonwuelker, #46509, #46537).

All of the features above are enabled in servoshell’s experimental mode.

We’ve started implementing WebVTT for native subtitles and captions, enabled by default (no --pref). While they don’t render just yet, we can now fetch each <track src>, parse the WebVTT, and expose cues via the track property on HTML­Track­Element (@TimvdLippe, #46289, #46383).

August was a big month for accessibility in Servo, under --pref accessibility­_enabled. The focus for this month has been on performance, with the accessibility tree now supporting incremental updates (@alice, @delan, #45578, #45971, #46589, #46691, #46385), requiring fewer HashMap lookups and tree walks (@alice, @delan, #45798, #46740, #46348), and allowing for faster DOM mutations (@alice, #46348, #46530).

We’ve also started working on the File and Directory Entries API, to allow users to select and upload entire directories via <input type=file> and drag-and-drop. To that end, we now have webkit­Get­As­Entry() on Data­Transfer­Item, plus minimal support for File­System­Entry, File­System­Directory­Entry, and File­System­File­Entry, under --pref dom­_entries­_api­_enabled (@yezhizhen, #46456).

Embedding API

We’ve improved the docs for the servo crate, and for Web­View­Delegate (@mukilan, #46193).

Breaking change: Servo­Builder::webxr­_registry() has been removed. Instead use the new Servo::register­_webxr­_registry, which is a lazy design that has allowed servoshell to halve its startup time (@Narfinger, #46494).

For users and developers

servoshell for Android now runs on Android 10+ (91% market share), not just Android 13+ (68% market share), improving adaptability and reducing waste (@jschwe, #46142, #46308). We’ve also fixed a problem with building for Android on macOS (@jschwe, #46128).

servoshell for Windows is now better behaved when run in a console window, making the command prompt wait until servoshell exits (@yezhizhen, #43010).

When using the Firefox DevTools, the Console tab now supports some basic autocomplete (@freyacodes, #46382).

More on the web platform

Inline SVG can now use web fonts defined in the containing page (@yodalee, #45979). We’re also implementing the SVG DOM, starting with stub interfaces for SVG­Element, SVG­Circle­Element, SVG­Defs­Element, SVG­Ellipse­Element, SVG­Line­Element, SVG­Linear­Gradient­Element, SVG­Path­Element, SVG­Polygon­Element, SVG­Polyline­Element, SVG­Radial­Gradient­Element, SVG­Stop­Element, SVG­Rect­Element, SVG­Symbol­Element, and SVG­Use­Element (@mu-mostafa98, #46558).

We’ve improved the conformance of <form> without <form action> (@kevlu93, #46860), <color> values (@Loirooriol, #46129), Gamepad­Event (@log101, #46788), document.execCommand(“delete”) (@Psychpsyo, #46539), the selector­Text property on CSS­Style­Rule (@simonwuelker, #46687), and Set Window Rect in WebDriver (@janeoa, #46475, #46477).

We’ve fixed bugs related to <iframe> (@jschwe, @jdm, #46587), <img> (@yodalee, #46892), <textarea> (@SimonSapin, @mrobinson, #46309), custom properties (@Loirooriol, #46129), ‘::before’ and ‘::after’ (@Loirooriol, #46640), ‘float’ (@Loirooriol, @mrobinson, #46407, #46500, #46505), ‘@font-face’ (@simonwuelker, #46568, #46271, #46436), ‘position: absolute’ (@simonwuelker, #46358, #46637), Blob (@jdm, #46881), IDB­Database and IDB­Object­Store and IDB­Index (@mrobinson, #46615), the adopted­Style­Sheets property on Shadow­Root (@simonwuelker, #46738), delete() on Font­Face­Set (@simonwuelker, #46634), move­Before() on Element (@mrobinson, #46599), resize­To() on Window (@janeoa, #46477), the selected property on HTML­Option­Element (@rhit-kapilaar, #46386), and the value property on HTML­Select­Element (@simonwuelker, #46230).

Garbage collection safety

Performance and stability

Text rendering is up to 10x faster for cases with the same text and different ‘font-size’ (@Loirooriol, #46129).

We’ve also reduced allocations, GC rooting steps, and other operations in many parts of Servo (@Narfinger, @mrobinson, @Gae24, @SimonSapin, @Taym95, @cychronex-labs, @yezhizhen, #45758, #46440, #46762, #46301, #46349, #46419, #46418, #46420, #46460, #46633, #46638, #46690, #46745, #46726, #46564, #46144, #46664, #46462, #46139, #46430, #46446, #46498, #46548, #46598, #46632, #46656, #46678, #46718).

We’ve fixed a crash regression with memory corruption (@mrobinson, #46316), several dynamic-borrow-related crashes (@Narfinger, @SharanRP, @Taym95, @agrawalx, @amittenak47, @sungmen, #46381, #46384, #46405, #46684, #46452, #46770, #46830, #46763), plus crashes related to:

  • <area> without <area href> (@simonwuelker, #46341)
  • <progress> or shadow DOM (@mrobinson, @simonwuelker, #46188)
  • <table> layout (@mrobinson, #46775)
  • <td rowspan> (@mrobinson, #46841)
  • <svg> without <svg viewBox> (@Narfinger, @mrobinson, #46199)
  • <use> in SVG (@mrobinson, @Loirooriol, #46261)
  • ‘animation’ (@mrobinson, @Loirooriol, #46689)
  • ‘content’ (@Loirooriol, @mrobinson, #46314)
  • ‘mix-blend-mode’ (@mrobinson, #45624)
  • Array­Buffer (@jdm, #46504)
  • adopted­Style­Sheets on Document (@TimvdLippe, #46373)
  • exec­Command("delete") on Document (@TimvdLippe, #46265)
  • removing DOM nodes (@SimonSapin, #46866)

We’ve continued our long-running effort to use the Rust type system to make Servo’s integration with SpiderMonkey safer and more reliable (@Gae24, @Narfinger, @TimvdLippe, @jdm, @kunalmohan, @lumiscosity, @simonwuelker, #46191, #46777, #46890, #46243, #46248, #46246, #46310, #46312, #46333, #46147, #46150, #46151, #46229, #46262, #46375, #46374, #46529, #46584, #46585, #46593, #46693, #46166, #46156, #46254, #46267, #46268, #46269, #46270, #46284, #46285, #46318, #46435).

New contributors

A special thanks to the following people for landing their first patch in Servo:

  • Umut Cevdet Koçak (@UMCEKO, #46256)
  • Yash Agrawal (@agrawalx, #46770)
  • amittenak47 (@amittenak47, #46743)
  • Apoorva Pendse (@apoorvapendse, #46739)
  • dDostalker (@dDostalker, #46181)
  • Oisín Ó Maolchathail (@eachra-bawn, #46478)
  • Kevin Lu (@kevlu93, #46860)
  • Mohamed Mostafa (@mu-mostafa98, #45405)
  • SeongMan Jeon (@sungmen, #46763)
  • Yoda Lee (@yodalee, #45979)

Interested in helping build a web browser? Take a look at our curated list of issues that are good for new contributors!

Donations

Thanks again for your generous support! We are now receiving 7824 USD/month (+1.8% from June) in recurring donations. This helps us cover the cost of our speedy CI and benchmarking servers, one of our latest Outreachy interns, and funding maintainer work that helps more people contribute to Servo.

Servo is also on thanks.dev, and already 35 GitHub users (same as June) that depend on Servo are sponsoring us there. If you use Servo libraries like url, html5ever, selectors, or cssparser, signing up for thanks.dev could be a good way for you (or your employer) to give back to the community.

We now have sponsorship tiers that allow you or your organisation to donate to the Servo project with public acknowlegement of your support. If you’re interested in this kind of sponsorship, please contact us at [email protected].

7824 USD/month
10000

Use of donations is decided transparently via the Technical Steering Committee’s public funding request process, and active proposals are tracked in servo/project#187. For more details, head to our Sponsorship page.

Back