|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +tags: [post] |
| 4 | +title: "Boa release v0.21" |
| 5 | +description: "Boa release v0.21" |
| 6 | +authors: boa-dev |
| 7 | +--- |
| 8 | + |
| 9 | +## Summary |
| 10 | + |
| 11 | +Boa v0.21 is now available! After 9 months of development we are very |
| 12 | +happy to present you the latest release of the Boa JavaScript engine. |
| 13 | +Boa makes it easy to embed a JS engine in your projects, and you can |
| 14 | +even use it from WebAssembly. See the [about](/about) page for more |
| 15 | +info. |
| 16 | + |
| 17 | +In this release, our conformance has grown from 89.92% to 93.94% in the |
| 18 | +official ECMAScript Test Suite (Test262). Our growth in conformance is |
| 19 | +driven by increased conformance for Temporal (discussed further below) |
| 20 | +with the rest of the development effort being focused on performance and |
| 21 | +runtime features. We will continue to implement more of the |
| 22 | +specification; however, as of the current moment, Boa's conformance |
| 23 | +aligns with the major browser engine's conformance, so future increases |
| 24 | +in conformance will be minor or bound to the feature size going forward. |
| 25 | + |
| 26 | +You can check the full list of changes [here][changelog], and the full |
| 27 | +information on conformance [here][conformance]. |
| 28 | + |
| 29 | +<!--truncate--> |
| 30 | + |
| 31 | +## Feature Highlights |
| 32 | + |
| 33 | +### Temporal |
| 34 | + |
| 35 | +There has been a lot of progress made on Temporal, the new Stage 3 |
| 36 | +date/time proposal. With this release, Boa's conformance on Temporal |
| 37 | +grew from 40.67% to 97.06%. As of this moment, Boa is the second most |
| 38 | +conformant Temporal implementation behind SpiderMonkey with others soon |
| 39 | +to follow. |
| 40 | + |
| 41 | +The implementation is backed by the `temporal_rs` date/time Rust |
| 42 | +library, which we went over briefly in our June |
| 43 | +[blog post](./2025-06-15-temporal-impl-1.md) with hopefully another post |
| 44 | +in the not too distant future. So far, `temporal_rs` has been used in |
| 45 | +both V8 and Keisel to implement Temporal as well. |
| 46 | + |
| 47 | +Temporal can be used from `boa_cli` or enabled in `boa_engine` with the |
| 48 | +`experimental` or `temporal` feature. |
| 49 | + |
| 50 | +You can also try out Temporal directly in Rust using `temporal_rs`: |
| 51 | + |
| 52 | +``` |
| 53 | +cargo add temporal_rs |
| 54 | +``` |
| 55 | + |
| 56 | +#### Special thanks |
| 57 | + |
| 58 | +Special thanks to all the student's from University of Bergen as well as |
| 59 | +Shane Carr ([@sffc](https://github.com/@sffc)) and Manish Goregaokar |
| 60 | +([@manishearth](https://github.com/@manishearth)) from ICU4X for their |
| 61 | +contributions and help with `temporal_rs`. |
| 62 | + |
| 63 | +### New Set methods |
| 64 | + |
| 65 | +Boa now supports the new set methods added in ES2025. |
| 66 | + |
| 67 | +These new methods are: |
| 68 | + |
| 69 | +- `Set.prototype.intersection(other)` |
| 70 | +- `Set.prototype.union(other)` |
| 71 | +- `Set.prototype.difference(other)` |
| 72 | +- `Set.prototype.symmetricDifference(other)` |
| 73 | +- `Set.prototype.isSubsetOf(other)` |
| 74 | +- `Set.prototype.isSupersetOf(other)` |
| 75 | +- `Set.prototype.isDisjointFrom(other)` |
| 76 | + |
| 77 | +Thanks to [@Hemenguelbindi](https://github.com/@Hemenguelbindi) for |
| 78 | +their work on this feature. |
| 79 | + |
| 80 | +### Float16 support for TypedArrays, Dataview and Math built-ins |
| 81 | + |
| 82 | +Boa now supports `f16` types for the TypedArray, Dataview, and Math |
| 83 | +built-ins. |
| 84 | + |
| 85 | +```javascript |
| 86 | +const x = new Float16Array([37, 42]); |
| 87 | +console.log(x[1]); // 42 |
| 88 | +``` |
| 89 | + |
| 90 | +### Error.isError |
| 91 | + |
| 92 | +Boa now supports `Error.isError`, which is accepted for ES2026. |
| 93 | + |
| 94 | +```javascript |
| 95 | +let check = Error.isError(new Error()); // returns true |
| 96 | +``` |
| 97 | + |
| 98 | +### Math.sumPrecise |
| 99 | + |
| 100 | +Boa now supports `Math.sumPrecise`, which is accepted for ES2026. |
| 101 | + |
| 102 | +```javascript |
| 103 | +let sum = Math.sumPrecise([1.0, 2.5]); |
| 104 | +console.log(sum); // 3.5 |
| 105 | +``` |
| 106 | + |
| 107 | +## Boa Runtime |
| 108 | + |
| 109 | +Work on Boa's runtime crate has continued with additional APIs added. |
| 110 | + |
| 111 | +### Additional APIs |
| 112 | + |
| 113 | +Additional APIs added the the Runtime crate include: |
| 114 | + |
| 115 | +- `fetch` |
| 116 | +- `setTimeout` |
| 117 | +- `setInterval` |
| 118 | +- `clearInterval` |
| 119 | +- `queueMicrotask` |
| 120 | + |
| 121 | +### Conformance testing |
| 122 | + |
| 123 | +We've added some support for conformance testing runtime features |
| 124 | +against the Web Platform Tests (WPT). |
| 125 | + |
| 126 | +## Performance |
| 127 | + |
| 128 | +### Register VM |
| 129 | + |
| 130 | +With this release, Boa's virtual machine (VM) moved from a stack based |
| 131 | +VM to a register based VM. |
| 132 | + |
| 133 | +## New Contributors |
| 134 | + |
| 135 | +TODO |
| 136 | + |
| 137 | +## Looking Forward |
| 138 | + |
| 139 | +### Garbage collector rewrite |
| 140 | + |
| 141 | +This has been long overdue. Boa's garbage collector is a forked and |
| 142 | +modified verison of `rust-gc`, and we have long been pushing our forked |
| 143 | +gc to its limits. |
| 144 | + |
| 145 | +We have seen plenty of evidence that simply swapping allocators can |
| 146 | +increase Boa's performance, and work on this will hopefully resume soon. |
| 147 | +If you're interested in garbage collectors and/or would be interested in |
| 148 | +helping out, feel free to join our GC room on [Matrix]. |
| 149 | + |
| 150 | +### Runtime functionality |
| 151 | + |
| 152 | +The `boa_runtime` crate was initially meant to contain functionality |
| 153 | +that was not meant to exist in the core engine, primarily our console |
| 154 | +implementation. Noticeably, we have since added more runtime features to |
| 155 | +the crate with more expected in the next release. |
| 156 | + |
| 157 | +Our current plan is if there is enough interest and the crate becomes |
| 158 | +too large, we will split `boa_runtime` into it's own repository. If you |
| 159 | +are interested in implementing any runtime features, feel free to reach |
| 160 | +out. |
| 161 | + |
| 162 | +## How can you support Boa? |
| 163 | + |
| 164 | +Boa is an independent JavaScript engine implementing the ECMAScript |
| 165 | +specification, and we rely on the support of the community to keep it |
| 166 | +going. If you want to support us, you can do so by donating to our [open |
| 167 | +collective]. Proceeeds here go towards this very website, the domain |
| 168 | +name, and remunerating members of the team who have worked on the |
| 169 | +features released. |
| 170 | + |
| 171 | +If financial contribution is not your strength, you can contribute by |
| 172 | +asking to be assigned to one of our [open issues], and asking for |
| 173 | +mentoring if you don't know your way around the engine. Our |
| 174 | +[contribution guide] should help you here. If you are more used to |
| 175 | +working with JavaScript or frontend web development, we also welcome |
| 176 | +help to improve our web presence, either in [our website], or in our |
| 177 | +[testing representation] page or benchmarks page. You can also |
| 178 | +contribute to our Criterion benchmark comparison GitHub [action]. |
| 179 | + |
| 180 | +We are also looking to improve the documentation of the engine, both for |
| 181 | +developers of the engine itself and for users of the engine. Feel free |
| 182 | +to contact us in [Matrix]. |
| 183 | + |
| 184 | +[open collective]: https://opencollective.com/boa |
| 185 | +[open issues]: |
| 186 | + https://github.com/boa-dev/boa/issues?q=is%3Aopen+is%3Aissue+no%3Aassignee |
| 187 | +[contribution guide]: |
| 188 | + https://github.com/boa-dev/boa/blob/main/CONTRIBUTING.md |
| 189 | +[our website]: https://github.com/boa-dev/boa-dev.github.io |
| 190 | +[testing representation]: https://github.com/boa-dev/boa/issues/820 |
| 191 | +[action]: https://github.com/boa-dev/criterion-compare-action |
| 192 | +[Matrix]: https://matrix.to/#/#boa:matrix.org |
| 193 | + |
| 194 | +## Thank You |
| 195 | + |
| 196 | +Once again, big thanks to [all the contributors][contributors] of this |
| 197 | +release!!! |
| 198 | + |
| 199 | +[contributors]: |
| 200 | + https://github.com/boa-dev/boa/graphs/contributors?from=2024-12-05&to=2025-08-30&type=c |
| 201 | +[changelog]: https://github.com/boa-dev/boa/blob/v0.21/CHANGELOG.md |
| 202 | +[conformance]: https://boajs.dev/boa/test262/ |
| 203 | +[feed]: https://boajs.dev/blog/rss.xml |
| 204 | +[collective]: https://opencollective.com/boa |
| 205 | +[easy_issues]: |
| 206 | + https://github.com/boa-dev/boa/issues?q=is%3Aopen+is%3Aissue+label%3AE-Easy |
| 207 | +[first_issues]: |
| 208 | + https://github.com/boa-dev/boa/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22 |
0 commit comments