DevNews

Servo 0.4 Ships a Record 558 Commits and Real Site Compat

On this page
  1. The sites, which is the actual headline
  2. Nine media queries is a lot to have been missing
  3. Platform APIs, and the input story
  4. Performance, measured honestly
  5. servoshell caught up on desktop basics
  6. Where the project actually stands
  7. Sources and further reading

Servo 0.4.0 shipped on July thirty first carrying 558 commits, the most the project has ever landed in a single month, and the theme running through them is real websites rather than benchmarks. lichess.org lays out correctly now. Google Photos works. Zulip stopped mangling variable fonts and Speedtest became readable. Underneath that, the engine picked up SharedWorker, nine media queries it did not previously implement, pointer capture, touch event handlers, and a set of CSS features including attr() and math expressions resolved late. Twenty new contributors landed their first patches during the cycle. If you have been tracking Servo as a curiosity, this is the release where the compatibility gap starts closing visibly.

The short answer

Servo 0.4.0 was released on July thirty first, bundling the 558 commits that landed in June. The compatibility work is the visible half: lichess.org now lays out correctly, Google Photos and Cash Converters work, Zulip stopped breaking on variable fonts, and Speedtest became readable. The platform half added SharedWorker, nine previously missing media queries, pointer capture, touch event handlers and several CSS features including attr(). Performance moved incrementally, with BoxFragment down 17% and 2D canvas power draw down 23%. Google Maps and OpenStreetMap render but still have interaction problems.

558commits, the project record for a single month
20contributors landing a first patch this cycle
17%smaller BoxFragment, 288 bytes down to 240
Answer card: Servo 0.4.0 was released on July thirty first 2026 with a record 558 commits and 20 new contributors, adding SharedWorker, nine media queries, pointer capture and touch events, with lichess.org, Google Photos and Zulip now rendering correctly.
Servo 0.4.0, released July thirty first. Source: the Servo project release notes. PNG

There is a particular way independent browser engines fail, and it is not on standards compliance. They pass the test suites and then load a real site and the layout collapses, because real sites depend on a hundred small behaviours that no conformance test covers. Servo has been on the right side of the test suites for years. This release is about the other part.

The sites, which is the actual headline

lichess.org lays out correctly now. Zulip stopped mishandling variable fonts. Speedtest went from unreadable to readable. Google Photos and Cash Converters work.

That list reads like trivia until you consider what each of those sites leans on. A chess site is a canvas and pointer capture problem. Zulip is a variable font and dense layout problem. Google Photos is a virtualized grid with lazy loading. These are not decorative pages. They are the categories of application that break engines.

Google Maps and OpenStreetMap sit in a middle state: they render well, but interaction is still not right. That is a fair description of where the engine is overall. Painting the page has been solved for a while. Responding correctly to a drag across a tiled surface is the harder half.

Nine media queries is a lot to have been missing

The single change most responsible for sites suddenly behaving is the media query batch: device-width, device-height, height, aspect-ratio, orientation, pointer, any-pointer, hover and any-hover.

Consider what an unimplemented media query does. It does not error. The query simply never matches, so the site quietly takes a branch its authors did not intend, and you get a layout meant for some other device silently applied to yours. Nine of those, across a modern responsive stylesheet, is enough to make almost any site look subtly wrong in a way that is very hard to attribute.

On the rest of the CSS side, attr() landed behind the experimental flag, image(<color>) works as a gradient shape, closest-corner and farthest-corner are supported in gradient functions, calc() and other math expressions now resolve at later stages, and font-feature-settings works inside @font-face. That last one is directly why Zulip stopped breaking.

Comparison chart of Servo 0.4.0 performance and project metrics: 558 commits in June against 534 in April and 391 in May, BoxFragment reduced 17% from 288 to 240 bytes on amd64, 2D canvas power draw down 23%, layout bound microbenchmarks up to 10% faster, and layout process overhead plus HTMLCollection each improved over 1%.
Servo's June numbers. The commit line has grown roughly linearly since 2023. PNG

Platform APIs, and the input story

SharedWorker is the notable DOM addition, and it unblocks a whole class of applications that coordinate state across tabs.

The input additions matter more than their size suggests. setPointerCapture(), releasePointerCapture() and hasPointerCapture() arrived together, along with touch event handlers. Pointer capture is what lets an element keep receiving events after the cursor leaves its bounds, which is the mechanism behind every drag, every slider and every map pan on the web. Without it a page can look perfect and be unusable, which is precisely the Google Maps situation described above.

The rest of the API list: console.dir(), customElementRegistry on Document and ShadowRoot, initialize() on CustomElementRegistry, a constructable new CustomElementRegistry(), and textStream() on Request, Response and Blob. There is also a set of crypto primitives covering KT128, KT256, ML-KEM and ML-DSA, which puts the post quantum algorithms in place ahead of anyone needing them.

Performance, measured honestly

The numbers here are small and specific, which is a good sign. BoxFragment went from 288 bytes to 240 on amd64, a 17% reduction in the structure that layout allocates more of than anything else. 2D canvases draw 23% less power. Layout process overhead came down over 1%, HTMLCollection improved over 1%, and layout bound microbenchmarks run up to 10% faster. Image decoding and cache filling became asynchronous.

Sixteen crash bugs were fixed, covering <iframe>, <slot>, animation, clip-path and transform-style. Crash fixes are the least glamorous line in any release note and the one that most determines whether anyone can use the thing.

servoshell caught up on desktop basics

The demo browser picked up drag and drop file opening, horizontal tab bar scrolling, fullscreen that correctly targets the monitor containing the window, smoother resizing, working <select multiple> on every platform, and a location bar that assumes http:// when you type localhost:<port>. On Android the minimum is now Android 13.

None of that is engine work. All of it is the difference between a demo you can use for ten minutes and one you close immediately.

Where the project actually stands

Recurring donations sit at 7,681 US dollars a month, up 0.2% from May, with 35 GitHub sponsors through thanks.dev. That is a modest budget for a browser engine, and it makes the contributor number the more interesting one: 20 people landed a first patch during this cycle, and the project keeps a stock of beginner friendly issues open specifically to make that happen.

The commit trend is worth more than any single month. Roughly 130 commits a month in September 2023, 534 in April, 391 in May, 558 in June. That is a project compounding, not spiking.

Sources and further reading

Frequently asked questions

Is Servo usable as a daily browser yet?

No, and the project does not claim it is. What ships is servoshell, a demo browser that exists to exercise the engine, and the release notes are explicit that it is a test browser. The honest framing for 0.4.0 is that the set of sites which render correctly grew meaningfully, from lichess.org to Google Photos, while Google Maps and OpenStreetMap render well but still have interaction problems. That is real progress on compatibility and still a long way from a browser you would put in front of a non technical user. Servo's stated target has always been embedding rather than competing with a shipping browser.

What did Servo add on the CSS side?

The attr() function behind the experimental flag, image(<color>) as a gradient shape, closest-corner and farthest-corner in gradient functions, calc() and other math expressions that resolve at later stages, and font-feature-settings inside @font-face. The media query work is the more immediately visible batch: device-width, device-height, height, aspect-ratio, orientation, pointer, any-pointer, hover and any-hover all landed in this cycle. Nine media queries is a lot to be missing, and having them is a large part of why sites suddenly lay out correctly rather than falling back to a mobile or desktop path they were never meant to take.

Which DOM APIs are new?

SharedWorker is the headline. Alongside it: console.dir(), customElementRegistry on both Document and ShadowRoot, initialize() on CustomElementRegistry, a constructable new CustomElementRegistry(), textStream() on Request, Response and Blob, the three pointer capture methods setPointerCapture, releasePointerCapture and hasPointerCapture, and touch event handlers. There is also a batch of crypto primitives covering KT128, KT256, ML-KEM and ML-DSA. The pointer capture and touch additions are the ones that turn a page from rendering correctly into actually responding to input, which is a distinction that matters a lot on map and canvas heavy sites.

How much faster is it?

The gains are incremental rather than dramatic, which is what you want from a layout engine at this stage. BoxFragment shrank 17%, from 288 bytes to 240 on amd64. 2D canvases use 23% less power. Layout process overhead came down over 1% and HTMLCollection improved over 1%. Layout bound microbenchmarks run up to 10% faster. Image decoding and cache filling became asynchronous. None of these is the kind of number that changes a decision on its own, but a 17% cut in the size of the single most allocated layout structure is the sort of thing that compounds across a large page.

How is the project funded and staffed?

Servo runs on recurring donations totalling 7,681 US dollars per month as of the June figures, up 0.2% from May, plus 35 GitHub users sponsoring through thanks.dev. The contributor side is healthier than the funding line suggests: 20 people landed a first patch during the cycle, and the project deliberately maintains beginner friendly issues to keep that pipeline open. Commit volume has grown roughly linearly for three years, from around 130 a month in September 2023 to 558 in June 2026, which is a more useful signal of project health than any single month's total.