| Feature | What it adds | Edition | Node 22.23 / 24.19 / 26.11 (measured) |
|---|---|---|---|
| Resizable buffers | new ArrayBuffer(n, { maxByteLength }), resize(), resizable, maxByteLength |
ES2024 | yes / yes / yes |
| Transfer | transfer(), transferToFixedLength(), detached |
ES2024 | yes / yes / yes |
| Copying methods | toSorted, toReversed, with on typed arrays |
ES2023 | yes / yes / yes |
| Float16 | Float16Array, DataView getFloat16/setFloat16, Math.f16round |
ES2025 | no / yes / yes |
| Base64 and hex | toBase64, fromBase64, toHex, fromHex, setFromBase64, setFromHex |
stage 4 (July 2025), ES2026 | no / no / yes |
Resizable buffers. A buffer created with maxByteLength can resize() in place up to that cap. A length-tracking view (new Uint8Array(buffer)) follows the buffer. A view with a fixed length or offset goes out of bounds when the buffer shrinks below it: length, byteLength, and byteOffset read 0 and methods throw TypeError. It recovers if the buffer grows back.
Transfer. buffer.transfer(newLength?) moves the bytes into a new buffer (truncated or zero-extended) and detaches the original: detached is true, byteLength is 0, and every view on it reports length 0. transfer keeps resizability, transferToFixedLength drops it. It is the language-level form of what postMessage(buf, [buf]) and structuredClone(buf, { transfer: [buf] }) already do.
Copying methods. Typed arrays gained toSorted, toReversed, and with, which return a new typed array instead of mutating.
Float16. Half-precision floats (1 sign, 5 exponent, 10 fraction bits) for compact numeric storage. Math.f16round(x) rounds a Number to the nearest representable half, and Float16Array stores them. Range tops out at 65504.
Base64 and hex. Built-in encoders replace the btoa(String.fromCharCode(...)) workaround, with alphabet: 'base64url', omitPadding, and a lastChunkHandling option for decoding.