Stream: StarlingMonkey

Topic: Status update on StarlingMonkey-ng


view this post on Zulip Till Schneidereit (Aug 25 2026 at 10:44):

It's been a while, and a lot of things have happened in the new version of StarlingMonkey. Specifically, as of a few minutes ago, we have full support for outgoing and incoming HTTP requests using fetch and FetchEvent, respectively.

This took a long time to get into landable shape, because I wanted to make sure that the implementation is really robust, and the architecture efficient. We have dramatically more test coverage than old StarlingMonkey, in particular for incoming requests: WPT coverage has always been thin there, because the Service Workers spec tests rely on lots of stuff that we don't (want to) support, including the full Service Workers lifecycle, but also iframes and other browser DOM things. What I did for the new test suite is to instead harvest the WPT tests for scenarios and creating tests for a custom Rust tests based harness.

As for everything else so far, all of this also works both on WASIp3 and native, with identical spec test pass rates, so that's nice.

I also added all the request/response processing shortcuts and optimizations the old version had, plus some additional (albeit more niche) ones. That doesn't necessarily mean that things will be fast out of the box though: I haven't done meaningful performance testing and profiling at all yet, so I fully expect there to be some sources of overhead to eliminate before we're at parity with (or faster than) the old version.

view this post on Zulip Till Schneidereit (Aug 25 2026 at 10:49):

Oh, and I forgot: this also adds / fixes support for wizening, with lots of serve tests running on wizened components

view this post on Zulip Till Schneidereit (Aug 25 2026 at 10:50):

What's left to do, then? A few things still:

view this post on Zulip Till Schneidereit (Aug 25 2026 at 10:54):

and in addition/parallel to all this, we can work on expanding the feature set to new things. @Karthik Ganeshram has done some work towards Node.js API support and on URLPattern support

view this post on Zulip Kat Marchán (they/she) (Aug 27 2026 at 23:28):

Update on Blob:

All I need at this point is TextDecoderStream to be available (en route), and to figure out why exceptions aren't propagating right in a couple of tests, which are making 6 out of 105 WPTs fail (that's all that's left!)

view this post on Zulip Kat Marchán (they/she) (Aug 27 2026 at 23:28):

I'll probably do File really quick after that to get it out of the way, and then start tackling FormData maybe

view this post on Zulip Till Schneidereit (Aug 28 2026 at 14:52):

Fantastic, thank you for both the work and the progress update!

view this post on Zulip Tomasz Andrzejak (Sep 02 2026 at 11:28):

I'll probably do File really quick after that to get it out of the way, and then start tackling FormData

FYI, there is a rust crate in old StarlingMonkey that we wrote for parsing FormData that served us well :) At that time other choices required bringing tokio which was an overkill. I moved it to crates-io if you want to reuse any of that: https://crates.io/crates/tiny-multipart

view this post on Zulip Kat Marchán (they/she) (Sep 03 2026 at 17:37):

awesome, @Tomasz Andrzejak ! Thank you!

view this post on Zulip Kat Marchán (they/she) (Sep 03 2026 at 17:45):

@Till Schneidereit do you happen to have code on your end for setting up inheritance where the parent class also uses a Result-based constructor, or do you want me to try and write that macrology myself? I can't set up the File -> Blob chain right now because I can't invoke Blob's BlobImpl constructor, as far as I can tell.

view this post on Zulip Joel Dice (Sep 03 2026 at 19:54):

Till's on vacation until September 13th, so you might not get a reply until then.


Last updated: Sep 20 2026 at 18:08 UTC