6.0.3
emscripten-core/emscripten6.0.3Jul 13, 2026by emscripten-bot
Upgrading?
Release notes summary
This release addresses critical bug fixes for string handling and coverage mapping, introduces support for FMA intrinsics, and refactors the async I/O system. It also includes a new configuration option for self-initializing ES modules.
Key Highlights
- Added support for compiling FMA intrinsics (32 variants) with `-msimd128 -mfma`
- New `AUTO_INIT` setting to opt ES modules into self-initialization via top-level await
- Refactored async `poll()`/`select()` implementation onto a per-inode readiness wait-queue
- Fixed `UTF8ToString` with `GROWABLE_ARRAYBUFFERS` set for resizable heap buffers
- Updated compiler-rt and libunwind to LLVM 22.1.8
Breaking Changes
- The `stream_ops.poll` FS-backend handler signature changed from `poll(stream, timeout)` to `poll(stream)`
- The `AUTO_INIT` setting disables `INCOMING_MODULE_JS_API` as module-level configuration is unavailable
New Features
- FMA intrinsics support (32 variants)
- AUTO_INIT setting for ES modules
- Async I/O readiness wait-queue implementation
Full Release Notes
## What's Changed - Fixed `UTF8ToString` with `GROWABLE_ARRAYBUFFERS` set. String decoding now copies the data when the heap buffer is resizable, just like it does in the shared memory case. (#27242) - Added support for compiling FMA intrinsics. All 32 FMA intrinsics are supported, with 256-bit variants emulated via two 128-bit operations. Pass ``-msimd128 -mfma`` to enable. With ``-mrelaxed-simd -mfma``, Wasm relaxed SIMD FMA is used. (#27183) - New `AUTO_INIT` setting to opt an instance ES module (`MODULARIZE=instance` or `WASM_ESM_INTEGRATION`) into self-initialization via top-level await on import, rather than exporting a default `init` function. Since there is no init/moduleArg, module-level configuration is unavailable: `INCOMING_MODULE_JS_API` is disabled and passing a non-empty one is an error. - The async `poll()`/`select()` implementation was refactored onto a per-inode readiness wait-queue. As part of this, the (undocumented) `stream_ops.poll` FS-backend handler signature changed from `poll(stream, timeout)` to `poll(stream)` returning the current readiness mask; out-of-tree custom FS backends with a `poll` handler must update. (#27226) - compiler-rt and libunwind were updated to LLVM 22.1.8. (#27245, #27246) - `-fcoverage-mapping` is currently broken due to a mismatch between the version of LLVM used and the imported version of compiler-rt. We hope to fix this in the next release. (#27261) - The default value for `GROWABLE_ARRAYBUFFERS` was reverted to `0` since we found issues with Web API compatibility. (#27260) ## Contributors Thanks to the following contributors: @sbc100 (38) @guybedford (11) @aheejin (7) @brendandahl (4) @kleisauke (3) @tlively (2) @duerrbaby (1) @fanchenkong1 (1) @heyparth1 (1) @hoodmane (1) @JAicewizard (1) @pavelsavara (1) @tomayac (1) @WebCoder49 (1) @Young-Lord (1) ## New Contributors * @fanchenkong1 made their first contribution in https://github.com/emscripten-core/emscripten/pull/27183 * @duerrbaby made their first contribution in https://github.com/emscripten-core/emscripten/pull/27073 * @Young-Lord made their first contribution in https://github.com/emscripten-core/emscripten/pull/27256 * @heyparth1 made their first contribution in https://github.com/emscripten-core/emscripten/pull/27242 * @WebCoder49 made their first contribution in https://github.com/emscripten-core/emscripten/pull/27326 **Full Changelog**: https://github.com/emscripten-core/emscripten/compare/6.0.2...6.0.3
Related Repositories
ggml-org/llama.cpp★ 132,124
LLM inference in C/C++
LadybirdBrowser/ladybird★ 66,636
Truly independent web browser
ClickHouse/ClickHouse★ 50,562
ClickHouse® is a real-time analytics database management system
LizardByte/Sunshine★ 42,547
Self-hosted game stream host for Moonlight.
deskflow/deskflow★ 30,072
Share a single keyboard and mouse between multiple computers.