6.0.0
emscripten-core/emscripten6.0.0Jun 4, 2026by sbc100
Upgrading?
Release notes summary
This major release updates the Emscripten SDK, introducing new compiler flags, updating dependencies, and changing default behaviors for dynamic libraries and threading. It also removes support for very old browser engines.
Key Highlights
- Windows tool launchers changed from .bat/.ps1 to .exe
- Minimum browser versions bumped (Chrome 74->85, etc.) removing old browser support
- Streaming Fetch max chunk size capped at 8MB to fit in Wasm memory
- Added support for -m64 compiler flag
- Updated musl libc, libpng, and Closure Compiler
Breaking Changes
- Windows scripts referencing `emcc.bat` must be updated to `emcc`
- Old browser support removed; features like mutable-globals can no longer be disabled
- `PThread.runningWorkers` field removed, use `PThread.pthreads` instead
- `FAKE_DYLIBS` disabled by default, changing shared library behavior
- POSIX `pause()` now returns 0 instead of EINTR
New Features
- Added `-m64` compiler flag support
- IDBFS autopersistence now supports global callback `IDBFS.onAutoPersistStateChanged`
Full Release Notes
## What's Changed
- On Windows, Emscripten now ships `.exe` tool launchers, rather
than `.bat` and/or `.ps1`. This means that any scripts that explicitly
reference, e.g. `emcc.bat`, will need to be updated to just `emcc` (or
`emcc.exe`). For the time being you can still get the old `.bat` files by
running `tools/maint/create_entry_points.py --bat-files`. (#24858)
- When performing a streaming Fetch operation, the max chunk size of downloaded
bytes that is handed over to the Wasm side from JS is now capped to maximum
of 8 megabytes. This ensures that a streaming Fetch stays streaming, rather
than transferring the whole (potentially large) file as one huge chunk, which
might not fit in the WebAssembly memory. (#26898)
- The minimum versions of browser engines supported by emscripten's generated
code were bumped, allowing us to remove our internal support for transpilation
via babel:
MIN_CHROME_VERSION: 74 -> 85
MIN_FIREFOX_VERSION: 68 -> 79
MIN_SAFARI_VERSION: 12.2 -> 14.1
This allows us to assume that features such as mutable-globals and sign-ext
are universally available. Disabling these is no longer possible in
emscripten. If you still need to support extremely old browsers, you can
manually transpile the output of emscripten (e.g. using babel for JS and
binaryen for wasm). (#26677)
- musl libc updated from v1.2.5 to v1.2.6. (#26860)
- libpng port updated from 1.6.55 to 1.6.58. (#26592 and #26983)
- The `-m64` compiler flag is now honored, and works as an alias for
`-sMEMORY64` and/or `--target=wasm64`. (#26765)
- The autopersistence feature in IDBFS mount now supports registering a global
callback `IDBFS.onAutoPersistStateChanged = active => {}`, which will be
notified of all IDBFS sync start and end events. (#26895)
- google-closure-compiler was updated to 20260429.0.0. (#26869)
Closure compiler now provides a native macOS arm64 binary for Apple Silicon,
in addition to having native binaries for Win-x64, Linux-x64 and Linux-ARM64.
For other platforms for which Closure compiler does not ship a native binary,
e.g. Intel x64 Macs and Windows-on-ARM, downloading Java SE Development Kit
21.0.11 from https://www.oracle.com/europe/java/technologies/downloads/#java21
is required in order to use Emscripten's Closure Compiler integration.
- The `FAKE_DYLIBS` setting is now disabled by default. This means that
`-shared` will produce real dynamic libraries by default (`-sSIDE_MODULE` is
implied). Also, if you include real dynamic libraries in your link command
emscripten will now automatically produce a dynamically linked program
(`-sMAIN_MODULE=2` is implied). (#25930)
- The `PThread.runningWorkers` field was removed from the `PThread` object.
If you have JS code that was depending on this you can transition to using the
`PThread.pthreads` object. (#26998)
- The POSIX `pause()` function will now return 0 rather than EINTR. (#27044)
## Contributors
Thanks to the following contributors: @sbc100 (106) @juj (26) @kleisauke (19) @brendandahl (5) @aheejin (3) @garymathews (3) @HCL-JasonR (3)
@dschuff (2) @kripken (2) @vittorioromeo (2) @guybedford (1) @soilSpoon (1) @tlively (1)
## New Contributors
* @HCL-JasonR made their first contribution in https://github.com/emscripten-core/emscripten/pull/26542
* @vittorioromeo made their first contribution in https://github.com/emscripten-core/emscripten/pull/26846
* @soilSpoon made their first contribution in https://github.com/emscripten-core/emscripten/pull/26814
* @garymathews made their first contribution in https://github.com/emscripten-core/emscripten/pull/26891
* @guybedford made their first contribution in https://github.com/emscripten-core/emscripten/pull/26967
**Full Changelog**: https://github.com/emscripten-core/emscripten/compare/5.0.7...6.0.0Related Repositories
ggml-org/llama.cpp★ 132,131
LLM inference in C/C++
LadybirdBrowser/ladybird★ 66,637
Truly independent web browser
ClickHouse/ClickHouse★ 50,563
ClickHouse® is a real-time analytics database management system
LizardByte/Sunshine★ 42,550
Self-hosted game stream host for Moonlight.
deskflow/deskflow★ 30,072
Share a single keyboard and mouse between multiple computers.