January in Servo: preloads, better forms, details styling, and more!

🔥 Read this awesome post from Hacker News 📖

📂 **Category**:

✅ **What You’ll Learn**:

, or a flexbox context), and fixes like these ensure Servo matches the output of other browsers.

Elements with scrollable overflow can be scrolled more consistently, even with CSS transforms applied to them (@stevennovaryo, #41707, #42005).

You can now use ‘content: ’ on any element (@andreubotella, #41480).
Generated image content used to only work with pseudo-elements, but that restriction no longer applies.

elements

can now be styled with the ‘::details-content’ pseudo-element (@lukewarlow, #42107), as well as the ‘:open’ pseudo-class (@lukewarlow, #42195).

CSS styles now inherit correctly through ‘display: contents’ as well as elements in Shadow DOM content (@longvatrong111, @Loirooriol, @mrobinson, #41855).

‘overflow-clip-margin’ now works correctly when ‘border-radius’ is present (@Loirooriol, #41967).

We fixed bugs involving text inside flexbox elements: they now use consistent baselines for alignment (@lukewarlow, @mrobinson, #42038), and style updates are propagated to the text correctly (@mrobinson, #41951).

now aligns the image as expected (@mrobinson, #42220).

‘word-break: keep-all’ now prevents line breaks in CJK text (@RichardTjokroutomo, #42088).

We also fixed some bugs involving floats, collapsing margins, and phantom line boxes (@Loirooriol, #41812), which sound much cooler than they actually are.

Finally, we upgraded our Stylo dependency to the latest changes as of January 1 2026 (@Loirooriol, #41916, #41696).
Stylo powers our CSS parsing and style resolution engine, and this upgrade improves support for parsing color functions like ‘color-mix()’, and improves our CSS animations and transitions for borders and overflow clipping.

Automation and introspection

Last month Servo gained support for HTTP proxies.
We now support HTTPS proxies as well (@Narfinger, #41689), which can be configured with the https_proxy or HTTPS_PROXY environment variables, or the network_https_proxy_uri preference.
In addition, the NO_PROXY environment variable or the network_http_no_proxy preference can disable any proxy for particular domains.

Our developer tools integration continues to improve.
Worker globals are now categorized correctly in the UI (@atbrakhi, #41929), and the Sources panel is populated for very short documents (@atbrakhi, #41983).
Servo will report console messages that were logged before the developer tools are opened (@eerii, @mrobinson, #41895).
Finally, we fixed a panic when selecting nodes in the layout inspector that have no style information (@eerii, #41800).

We’re working towards supporting pausing in the JS debugger (@eerii, @atbrakhi, @jdm, #42007), and breakpoints can be toggled through the UI (@eerii, @atbrakhi, #41925, #42154).
While the debugger is paused, hovering over JS objects will report the object’s properties for builtin JS classes (@eerii, @atbrakhi, #42186).
Stay tuned for more JS debugging updates in next month’s blog post!

Servo’s WebDriver server is also maturing.
Evaluating a synchronous script that returns a Promise will wait until that promise settles (@yezhizhen, #41823).
‘touchmove’ events are fired for pointer actions when a button is pressed (@yezhizhen, #41801), and ‘touchcancel’ events are fired for canceled pointer action items (@yezhizhen, #41937).
Finally, any pointer actions that would trigger duplicate ‘mousemove’ events are silently discarded (@mrobinson, #42034).

Element Clear commands now test whether the element is interactable (@yezhizhen, #42124).
Now a null script execution timeout value will never trigger a timeout (@yezhizhen, #42184), and synthesized ‘pointermove’ events have a consistent pointerId value (@yezhizhen, #41726).

Embedding

You can now cross-compile Servo using Windows as the host (@yezhizhen, #41748).

We’ve pinned all git dependencies to specific revisions, to reduce the risk of build failures (@Narfinger, #42029).
We intend to eventually forbid git dependencies in Servo libraries, which will help unblock releasing Servo on crates.io.

SiteDataManager now has a new clear_site_data() method to clear all stored data for a particular host (@janvarga, #41618, #41709, #41852).

Our nightly testing UI, servoshell, now respects any customized installation path on Windows (@yezhizhen, #41653).
We fixed a crash in the Android app when pausing the application (@NiklasMerz, #41827).
Additionally, clicking inside a webview in the desktop app will remove focus from any browser UI (@mrobinson, #42080).

We’ve laid more groundwork towards exposing accessibility tree information from webviews (@delan, @lukewarlow, @alice, #41924).
There’s nothing to test yet, but keep an eye on our tracking issue if you want to be notified when nightly builds are ready for testing!

Stability & performance

We’ve converted many uses of IPC channels in the engine to channels that are more efficient when multiprocess mode is disabled (@Narfinger, @jdm, @sagudev, @mrobinson, #41178, #41071, #41733, #41806, #41380, #41809, #41774, #42032, #42033, #41412).
Since multiprocess mode is not yet enabled by default (--multiprocess), this is a significant boost to Servo’s everyday performance.

Servo now sets a socket timeout for HTTP connections (@Narfinger, @mrobinson, #41710).
This is controlled by the network_connection_timeout preference, and defaults to 15 seconds.

Each instance of Servo now starts four fewer threads (@Narfinger, #41740).
Any network operations that trigger a synchronous UI operation (such as an HTTP authentication prompt) no longer blocks other network tasks from completing (@Narfinger, @jdm, #41965, #41857).

It’s said that one of the hardest problems in computer science is cache invalidation.
We improved the memory usage of dynamic inline SVG content by evicting stale SVG tree data from a cache (@TomRCummings, #41675).
Meanwhile, we added a new cache to reduce memory usage and improve rendering performance for pages with animating images (@Narfinger, #41956).

Servo’s JS engine now accounts for 2D and 3D canvas-related memory usage when deciding how often to perform garbage collection (@sagudev, #42180).
This can reduce the risk of out-of-memory (OOM) errors on pages that create large numbers of short-lived WebGL or WebGPU objects.

To reduce the risk of panics involving the JS engine integration, we’re continuing to use the Rust type system to make certain kinds of dynamic borrow failures impossible (@sagudev, #41692, #41782, #41756, #41808, #41879, #41878, #41955, #41971, #42123).
We also continue to identify and forbid code patterns that can trigger rare crashes when garbage collection happens while destroying webviews (@willypuzzle, #41717, #41783, #41911, #41911, #41977, #41984, #42243).

This month also brought fixes for panics in parallel layout (@mrobinson, #42026), WebGPU (@WaterWhisperer, #42050), fetching (@jdm, #42208), Element.attachShadow() (@mrobinson, #42237), text input methods (@mrobinson, #42240), Web Workers when the developer tools are active (@mrobinson, #42159), IndexedDB (@gterzian, #41960), and asynchronous session history updates (@mrobinson, #42238).

Node.compareDocumentPosition() is now more efficient (@webbeef, #42260), and selections in text inputs no longer require a full page layout (@mrobinson, @Loirooriol, #41963).

Donations

Thanks again for your generous support!
We are now receiving 7007 USD/month (−1.4% over December) 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 33 GitHub users (+3 over December) 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.
A big thanks from Servo to our newest Bronze Sponsor: str4d!
If you’re interested in this kind of sponsorship, please contact us at [email protected].

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.

Conference talks and blogs

There were two talks about Servo at FOSDEM 2026 (videos and slides here):

🔥 **What’s your take?**
Share your thoughts in the comments below!

#️⃣ **#January #Servo #preloads #forms #details #styling**

🕒 **Posted on**: 1772392577

🌟 **Want more?** Click here for more info! 🌟

By

Leave a Reply

Your email address will not be published. Required fields are marked *