6 ms·
Hi all, wow was not expecting this to be trending right now. I’m the creator of Boa, you can catch my talk about it at JS Conf EU 2019 https://www.youtube.com/
by jayflux 11mo ago
Hi all, wow was not expecting this to be trending right now.
I’m the creator of Boa, you can catch my talk about it at JS Conf EU 2019 https://www.youtube.com/watch?v=_uD2pijcSi4 https://www.youtube.com/watch?v=_uD2pijcSi4
That said, today Boa has a whole team of maintainers who I’m sure will answer some questions here.
Yes the name does invoke the sense it’s a Python project but I liked it and stuck with it, I saw a Boa snake at a zoo once and knew I wanted to name my next project after it, I was also inspired by Mozilla at the time who named their projects after animals.
Speaking of Mozilla, Boa’s existence came to be because at the time I was working on Servo and wanted to include an all-rust JS engine, one didn’t really exist so I set about making one as a learning exercise, after around 2 years more joined me on that journey and today Boa is around 8 years old. It is not browser grade (although at 94.12% it is more compliant than some browser engines) but that doesn’t matter, plenty of Rust projects have found good use for it as they find it easy to embed and use, so we’re happy.
One recent example is Biome who use it for their plugin infrastructure. https://github.com/biomejs/biome/pull/7300 https://github.com/biomejs/biome/pull/7300
Another recent thing which we’re very proud is seeing our implementation of Temporal be used in V8 and other engines, so we’re also helping the wider ecosystem and raising all ships! (More here: https://boajs.dev/blog/2025/09/24/temporal-release https://boajs.dev/blog/2025/09/24/temporal-release)
We do hope to improve performance over the next year or so, hopefully that answers some of the Qs here.
- vlovich123 11mo agoDo you see catching up on performance with v8-jitless as a goal or is conformance the primary goal right now? Any plans on doing a JIT? I was always impressed by the idea of Truffle where you implement the language semantics once and you get both interpreter and JIT safely out of it which is a huge source of vulnerabilities in traditional JIT systems
- nekevss 11mo agoHi, I'm another one of the maintainers on the project. In general, we are shifting more to performance now than conformance. We currently sit at around 94% conformance, so there's not really that much more to go conformance-wise. The remaining conformance gains are a couple of the newer specification features and Intl related features. Our current conformance can be found at https://boajs.dev/conformance https://boajs.dev/conformance. Regarding performance, we are already making some gains, with hopefully more to come. The best example of this was probably the updates to script-bench-rs with our most recent release (which can be found at this commit https://github.com/khvzak/script-bench-rs/commit/d9635de77d250c49c6242b9c7fbc3e11e753f9e3 https://github.com/khvzak/script-bench-rs/commit/d9635de77d2...). We still obviously have more to improve on, but we have already made some pretty steady progress from where we were. EDIT: I forgot to answer your question about v8-jitless. Obviously in the future it would be nice to be able to be more competitive with v8-jitless, but at least for me, I'd just like to focus on improving the Boa overall.
- echelon 11mo agoDoes Boa support `fetch`? And if so, is it built on Reqwest or Wreq [1]? I immediately have use for this if y'all have async fetch support. I can use JavaScript as an extension language for our app. I love how supremely easy it looks to embed in normal Rust apps without a complicated build script. That, to me, is a killer feature. Really awesome work on this! [1] Wreq is starting to get popular for its ability to bypass Cloudflare and look like a normal browser
- nekevss 11mo agoSo this is a bit loaded. Short answer: it can. Long answer: first, `fetch` is a runtime feature, and Boa is first and foremost an engine. So `boa_engine` -- the core project crate -- does not support `fetch` out of the box. That being said, we do have a `boa_runtime` crate. This crate is not currently a full runtime, but it is a collection of runtime features that have been implemented and can be registered onto the context. `fetch` is one of the features that has an implementation completed in `boa_runtime`, and it does use reqwest if I'm remembering correctly. If you're interested to see some example code of registering features, you can look at our CLI code as an example :)
- jayflux 11mo agoThe past year has been huge for conformance for us, not only we caught up with the top engines but we surpassed them when working on Temporal and having all tests pass for that. We hope to wind down some of the conformance priority now and focus on performance, we need to work on a new GC, refactor some parts of the engine, and improve various areas. The idea of a JIT has been raised and we’re not against it, but it’s not on our plans right now (because of the above), that being said there is an open discussion.
- amelius 11mo agoAre existing GCs for Rust (e.g. rsgc) not suitable?
- nekevss 11mo agoRight now, we use a forked and modified version of the `gc`. We definitely need to update it. Admittedly, I've been hoping to work on it but got a little distracted with temporal ... I don't think I've actually heard of rsgc before. It's definitely interesting to see playXE put it together. I know that they'd been working on starlight at one point, so it'd be interesting to see takeaways from it. To get to your question on the existing GCs, so far the answer is we don't truly know. We really need to do some GC experiments and test different options in Boa with JavaScript. There are not really that many GC crates out there of which I'm aware. There rust-gc's `gc` crate, dumpster, and `arena-gc` (tack on rsgc). But of those, the `gc` crate truly has the best API that we've used in Boa, but the performance is not ideal amongst other optimizations. It would be nice to preserve that API while improving the performance as well. But that remains to be seen.
- amelius 11mo agoHere are some gc crates: https://docs.rs/rsgc/latest/rsgc/ https://docs.rs/rsgc/latest/rsgc/ https://docs.rs/ristretto_gc/latest/ristretto_gc/ https://docs.rs/ristretto_gc/latest/ristretto_gc/ https://docs.rs/dumpster/latest/dumpster/ https://docs.rs/dumpster/latest/dumpster/ https://docs.rs/shredder/latest/shredder/ https://docs.rs/shredder/latest/shredder/ I have no experience with them. In any case, it would be advisable to make the GC implementation swappable so that the language is gc-implementation-agnostic.
- Ganipote 11mo agoIs it still boa's goals to be used with Servo? Servo is currently tightly coupled with spidermonkey, which makes this ain’t easy.
- nekevss 11mo agoI think it would be cool to see Servo use us. Someone on our last release thread on Reddit (https://www.reddit.com/r/rust/comments/1odnore/boa_0210_release_a_javascript_engine_written_in/ https://www.reddit.com/r/rust/comments/1odnore/boa_0210_rele...) mentioned adding Boa to Blitz, which I think would be interesting to see as well. We're looking into the next release potentially being a v1.0, so maybe that option is a bit more possible after that release. But at the same time, I think Servo spends a decent amount of time maintaining the `mozjs` crate, so who knows. I can't speak exactly for the other maintainers, but for me, I mostly enjoy working on Boa and Boa related things (I've spent the better part of the last year and a half on the temporal implementation). I think it would be cool to have a highly performant and conformant Rust JavaScript engine. So that's my goal :)
- nicoburns 11mo agoServo would be difficult, becuase it uses the SpiderMonkey to manage it's entire DOM implementation (not just JS objects). Blitz would be much easier I think, but it would need to some work to allow JS objects to keep DOM objects alive.
- CrazyboyQCD 11mo ago[dead]
- jauntywundrkind 11mo agoCongrats in general! The Temporal in rust release happening in Chrome & others is so cool! So exiting to see such a core piece of work being done & then shared widely among browsers. Speaks well to Rust, the trust folks have in it, and the ability to use Rust from a variety of projects. I also really enjoyed your earlier deep dive blog posts on implementation of Temporal, https://boajs.dev/blog/2025/06/15/temporal-impl-1 https://boajs.dev/blog/2025/06/15/temporal-impl-1 There's also a very lovely talk Cross-Engine Contributions at Scale: How newcomers accelerated Temporal and Upsert in SpiderMonkey, V8, and Boa that goes deep in depth in how technically Temporal was used across engines. https://www.youtube.com/watch?v=WieD_9BswAE https://www.youtube.com/watch?v=WieD_9BswAE
- nekevss 11mo agoThanks! Temporal_rs has been a really fun project to work on, and it's been great to see that it's useful for other engines! Hopefully, there will be more chances in the future for projects like temporal_rs. Beyond just temporal_rs, I think the Temporal integration in V8 and Kiesel was a good proof of concept for Rust based libraries over FFI using Diplomat.
- giancarlostoro 11mo ago> plenty of Rust projects have found good use for it as they find it easy to embed and use, so we’re happy. I could easily see something similar to MongoDB being birthed out of Boa. MongoDB uses v8 for querying.
- nekevss 11mo agoHuh! TIL. I'll have to look into that, I'm curious how it works. Although, now that I think about it, that does make sense.
- Sytten 11mo agoHi! I am one of the maintainer of rquickjs and llrt. Are you looking to build node-like modules anytime soon? I think we could easily port most of the modules I wrote for llrt to your engine. If we could get rid of the C code in our app, that would make me very happy.
- nekevss 11mo agoHi! I'm not aware of any plans to build node-like modules, but I think we have the basic support to potentially build them out ... but I could be overlooking or missing something. I'm not personally familiar with them. But defining and using a macro should hopefully be fairly straightforward in Rust with the macros from our latest release (https://boajs.dev/blog/2025/10/22/boa-release-21#boa_module https://boajs.dev/blog/2025/10/22/boa-release-21#boa_module). If we're missing something, feel free to let us know. Any runtime functionality that has been implemented is available in `boa_runtime`. I've mentioned this elsewhere in the thread, but this crate is not a runtime itself (yet). Currently, it's a collection of runtime features like `console` and `fetch`.
- g-mork 11mo ago> I saw a Boa snake at a zoo once and knew I wanted to name my next project after it Top tier reasoning, literally makes me want to use it
- deleted 11mo ago[deleted]