Socket
Book a DemoInstallSign in
Socket
Back
Security News

TC39 Advances 11 Proposals for Math Precision, Binary APIs, and More

TC39 advances 11 JavaScript proposals, with two moving to Stage 4, bringing better math, binary APIs, and more features one step closer to the ECMAScript spec.

TC39 Advances 11 Proposals for Math Precision, Binary APIs, and More

Sarah Gooding

August 6, 2025

At its 109th meeting in late July, TC39, the committee responsible for evolving the JavaScript language, advanced 11 proposals across various stages of the ECMAScript standardization process. Notably, two proposals reached Stage 4, meaning they’re now considered complete and will be included in the next official version of JavaScript.

Several others moved to Stage 3, a strong signal that they’re nearing final approval and are already being implemented in engines and tooling. From fixing long-standing math issues to simplifying binary data handling, these proposals could have a real impact on how developers write and reason about code.

Thanks to TC39 co-chair Rob Palmer, we know which proposals are moving forward, and the notes should be available within two weeks.

Let’s take a look at the proposals most likely to shape how JavaScript is written in the near future. Here are a few of the highlights:

Math.sumPrecise to Stage 4#

This proposal adds Math.sumPrecise(iterable), a method that performs numerically accurate summation using a precision-safe algorithm. Unlike the common .reduce((a, b) => a + b) approach, which can silently lose accuracy due to floating-point rounding, Math.sumPrecise produces the mathematically correct result, similar to Python’s math.fsum. It only accepts iterables of numbers and returns -0 for empty input to preserve floating-point identity rules.

Uint8Array base64/hex to Stage 4#

This proposal introduces new methods for converting between Uint8Array and base64 or hexadecimal strings, including toBase64(), fromBase64(), toHex(), and fromHex(). These methods provide a standardized, built-in way to encode and decode binary data without relying on external libraries. Additional options allow for base64url encoding, strict padding rules, and low-level buffer writes using setFromBase64() and setFromHex(). With Stage 4 approval, these APIs will now part of the ECMAScript standard.

Iterator Sequencing to Stage 3#

This proposal adds Iterator.concat(...), a built-in way to combine multiple iterators and values into a single iterable sequence. It simplifies patterns that currently require custom generator functions and brings JavaScript in line with other languages and libraries that support iterator chaining.

Upsert to Stage 3#

This proposal lets you get or set a default value in a Map or WeakMap without overwriting existing entries, using a new getOrInsert method.

Immutable ArrayBuffer to Stage 3#

This proposal adds new APIs to create ArrayBuffers whose contents cannot be changed, resized, detached, or transferred. With methods like .transferToImmutable() and .sliceToImmutable(), developers can create truly read-only binary data structures, enabling safer memory usage, better performance in certain systems (e.g. embedded or zero-copy contexts), and support for freezing TypedArray views.

Intl Era/Month Code to Stage 2.7#

This proposal adds standardized support for representing eras (like "AD" or "CE") and month codes (like "M01" for January) in Intl.DateTimeFormat. It enables consistent formatting and parsing of calendar-related data across locales and aligns with existing Unicode standards.

Keep trailing zeros in Intl.NumberFormat and Intl.PluralRules to Stage 2#

This proposal ensures that trailing zeros in numeric string inputs—like "1.0"—are preserved during formatting and plural category selection. It improves precision and display consistency, especially for applications that rely on decimal significance (e.g. finance or measurement), without affecting behavior for Number or BigInt inputs.

Import Bytes to Stage 2#

This proposal allows importing binary files directly as Uint8Array instances using import syntax with a { type: "bytes" } modifier, simplifying how raw data is loaded in JavaScript.

Also Notable: Three New Proposals Enter Stage 1#

Three proposals, Module Import Hook and new Global, Array.getNonIndexStringProperties, and Object.getOwnPropertySymbols options, were accepted into Stage 1, the entry point for new ideas under active exploration by the committee.

Go Behind the Scenes with TC39#

For a rare behind-the-scenes look at how JavaScript evolves, check out this timely episode of The Weekly Dev's Brew. In this conversation, host Jan-Niklas Wortmann interviews Daniel Ehrenberg, VP of Ecma International and long-time TC39 contributor, about how new language features are born. They walk through the TC39 proposal process, the challenges of reaching consensus, backwards compatibility considerations, and browser vendor representation. They also cover the politics of proposal stages and how syntax changes really get made.

Subscribe to our newsletter

Get notified when we publish new security blog posts!

Try it now

Ready to block malicious and vulnerable dependencies?

Install GitHub AppBook a Demo

Related posts

Back to all posts
SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.