This month in Servo: text fields, better emoji, devtools, and more!

2024-06-28 Plus font rendering performance, OpenHarmony and AddressSanitizer builds, and a new AI policy.

servoshell showing three demos: spaces at the end of each line take up space under ‘white-space-collapse: break-spaces’, measuring the size of the viewport with a ResizeObserver, and a focused text field with a visible value, where the space after the emoji now has normal width

Servo has had some exciting changes land in our nightly builds over the last month:

  • as of 2024-05-31, we now support ‘white-space-collapse: break-spaces’ (@mrobinson, @atbrakhi, #32388)
  • as of 2024-06-11, we now support <col span> in <colgroup> (@Loirooriol, #32467)
  • as of 2024-06-14, we now support the decode method on HTMLImageElement (@Taym95, #31269)
  • as of 2024-06-18, we now have initial support for ResizeObserver (@gterzian, #31108)
    • to enable this experimental feature, run servoshell with --pref dom.resize_observer.enabled
  • as of 2024-06-21, we now render text in input fields (@mrobinson, #32365)
    • note that editing is still very limited, and the caret and selection are not yet rendered
Table rendered by Servo with three columns (default, with VS15, and with VS16), comparing the behaviour of three emoji with Emoji_Presentation=Yes (🐕, 🐈, 🦜) and three emoji with Emoji_Presentation=No (☺, ™, ↔)
On platforms with color emoji support, we now correctly follow Unicode’s rules for when to use color emoji. This table also uses <col span> in a <colgroup>.

WebGPU can now run on OpenGL ES on Windows and Linux (@hieudo-dev, #32452), no longer records errors after losing a device (@sagudev, #32347), and you can now select a WebGPU backend with --pref dom.webgpu.wgpu_backend=.

servoshell can now go fullscreen without showing the location bar (@Nylme, #32425), and no longer leaves the status bar behind when navigating (@webbeef, #32518). We’ve also started building servoshell on OpenHarmony in CI (@jschwe, #32507), started merging our Android build into servoshell (@jschwe, #32533), and refactored servoshell’s desktop-only code (@jschwe, #32457).

Fonts and emoji

Unicode emoji often come in two variants: an emoji presentation (color or graphic) and a text presentation (monochrome). You can select one or the other by appending the variation selectors U+FE0F or U+FE0E respectively, and the default presentation is controlled by the Emoji_Presentation property. Most emoji default to emoji presentation, but not all of them, and bugs in handling that property are often why characters like and get displayed as emoji when they shouldn’t.

We’ve reworked our font fallback algorithm to enable emoji in text presentation on Windows (@mrobinson, #32286) and correctly handle emoji variation selectors and Emoji_Presentation (@mrobinson, @atbrakhi, @mukilan, #32493).

Webfont performance is improving, with Servo no longer starting a layout reflow every time a webfont loads (@mrobinson, #32455) and no longer leaking resources in WebRender (@mrobinson, @mukilan, #32545). We’ve also fixed a bug where spaces near emoji are too wide (@mrobinson, @atbrakhi, #32442), fixed a shaping bug on Windows (@mrobinson, #32499), and improved our fallback font lists (@mrobinson, @jschwe, #32463, #32555).

Embedding and dev changes

Firefox devtools connected to Servo, with a hello world printed by a document.write() call in the Console tab
You can now use Firefox devtools to evaluate JavaScript in Servo, but messages from the Console API are not yet visible.

Servo now has an AI contributions policy (@mrobinson, @delan, #32287). In short, for the time being, anything you contribute to the Servo project must not contain content generated by large language models or other probabilistic tools.

Servo now builds with Rust 1.78 (@sagudev, #32217) and we’ve migrated to Rust 2021 (@mrobinson, #32544), SpiderMonkey 115.13 (@sagudev, #32510), and Stylo 2024-05-15 (@Loirooriol, #32334). Thanks to the compiler upgrade, mach doc no longer hangs (@delan, #32413), our API docs are now live again, and libservo API docs are now available too (@wusyong, #32429), having previously been shadowed by an empty docs page for the servoshell bin crate.

You can now build Servo with AddressSanitizer via mach build --with-asan (@sagudev, #31429), which will help us find and fix memory safety violations.

Outreachy intern @eerii is showing our Firefox-compatible devtools some much needed love, landing support for listing tabs and processes (@eerii, @fabricedesre, #32475) and running code in the Console tab (@eerii, #32509).

We’ve fixed a panic in multiprocess mode (@mukilan, #32571) and several busted builds, including cross-compiling on macOS (@jschwe, #32504), building on NixOS (@mukilan, #32567), and building for Android on Fedora (@jschwe, #32532).


Thanks again for your generous support! We are now receiving 2229 USD/month (+36.7% over May) in recurring donations. We are still receiving donations from 15 people on LFX, and we’re working on transferring the balance to our new fund, but we will stop accepting donations there soon — please move your recurring donations to GitHub or Open Collective.

2229 USD/month

As always, use of these funds will be decided transparently in the Technical Steering Committee. For more details, head to our Sponsorship page.

Conferences and blogs