For AI agents: the complete documentation index is available at /tc39-atlas/en/llms.txt, the full documentation bundle is available at /tc39-atlas/en/llms-full.txt, and this page is available as Markdown at /tc39-atlas/en/proposals/year/2025/proposal-float16array.md.
  • English
  • Float16 on TypedArrays, DataView, Math.f16round S4

    Proposal details
    Proposal overview

    This proposal adds Float16Array typed arrays, DataView getFloat16/setFloat16 methods, and Math.f16round to JavaScript for half-precision floating-point support. It aims to address use cases in canvas color, GPU operations, WebGL, and WebGPU where full precision is unnecessary and memory is limited.

    Note

    The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.

    Float16Array

    A proposal to add float16 (aka half-precision or binary16) TypedArrays to JavaScript.

    Status

    Authors: Kevin Gibbons

    Champions: Leo Balter, Kevin Gibbons

    This proposal is at Stage 4 of the TC39 process as of the February 2025 meeting: it is finished, has landed in ecma262, and is shipping in browsers. Any further discussion should happen elsewhere.

    Spec text is available here.

    Implementations

    This proposal is ready for engines to implement and ship. See this issue for current status of implementations.

    Motivation

    • Explicit request from the Color on the Web CG, for their use case with float-backed canvases.
    • Useful for GPU operations, where full precision often isn't necessary and memory constraints are serious.
      • WebGPU supports float16. It exposes/consumes raw ArrayBuffers. When those contain 32-bit floats, the pattern is to wrap the buffer in new Float32Array(...); that doesn't work when they contain 16-bit floats.
      • Increasingly relevant with new tools like Stable Diffusion, where full-precision representations don't fit in VRAM on many machines.
    • WebGL/WebGL2 support float16.
    • ARM and IA-32 and Intel® 64 architectures support float16 intrinsics.
    • Faking it in userland has serious performance costs.

    Proposal

    This would add a new kind of TypedArray, Float16Array, to complement the existing Float32Array and Float64Array. It would also add two new methods on DataView for reading and setting float16 values, as getFloat16 and setFloat16, to complement the existing similar methods for working with full and double precision floats, as well as Math.f16round, to complement the existing Math.fround.

    Userland

    @petramoriken has a package implementing Float16Array which gets 100k+ downloads/week on npm. See that repository for examples of some of the limitations and downsides of trying to do this purely in userland - notably the impossibility of integrating correctly with other web platform features like WebGL's HALF_FLOAT buffers and structuredClone.