Skip to content

Commit 673ac32

Browse files
committed
Initial pass at blog post for next release
1 parent 7752d46 commit 673ac32

File tree

1 file changed

+208
-0
lines changed

1 file changed

+208
-0
lines changed

blog/boa-release-21.md

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
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

Comments
 (0)