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.0

Related Repositories