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.
Oh, and I forgot: this also adds / fixes support for wizening, with lots of serve tests running on wizened components
What's left to do, then? A few things still:
Blob and FormData (which @Kat Marchán (they/she) is working on, plus a couple of TransformStream things (Text{En,De}coderStream, which @Karthik Ganeshram is working on, and {Dec,C}ompressionStream)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
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!)
I'll probably do File really quick after that to get it out of the way, and then start tackling FormData maybe
Fantastic, thank you for both the work and the progress update!
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
awesome, @Tomasz Andrzejak ! Thank you!
@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.
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