2024
Released emscripten-glfw 3.4.0.20241230 with the following changes:
- Added support for offscreen canvas (check example_offscreen_canvas for a comprehensive example)
Released re-cmake v1.8.0 with the following changes:
- Added support for optional patch metadata files (rsmeta) introduced in SDK 4.6.0
In addition, I updated the following projects accordingly:
- Updated RE Quickstart to use SDK 4.6.0
- Updated RE Blank Plugin to use SDK 4.6.0
Released emscripten-glfw 3.4.0.20241221 with the following changes:
- Added support for pthread (check example_pthread for a comprehensive example)
Released emscripten-ports v2024.12.11 with the following changes:
- Upgraded ImGui to 1.91.6
- Added
disableDefaultFontoption to the port to enable theIMGUI_DISABLE_DEFAULT_FONTdefine thus disabling building the default font completely (saves almost 25k in the final build)
- Added
Released SAM-SPL 64 v1.6.1 with the following changes:
- Fixed Audio Unit name collision
Released Jamba 7.1.3 with the following changes:
- Use
FetchContent_Populate/FetchContent_MakeAvailablewithSOURCE_SUBDIRoption (see CMake discussion)
Released SAM-SPL 64 v1.6.0 with the following changes:
- Fixed a crash when exporting the sample
- Make sure that the exported file is saved with the proper file extension
- Migrated to Jamba 7.1.2 / VST SDK 3.7.12
- Removed support for VST2
Released Jamba 7.1.2 with the following changes:
- Migrated Jamba to use VST3 SDK 3.7.12 (release notes). Please check other release notes to see what has changed since 3.7.8 (the previous SDK version supported by Jamba).
- Fixed deprecated CMake warnings with
FetchContent_Populate - Fixes issues with some DAWs on Windows when using the bundle format
- Fixes the
create-plugin.pytool on Windows
Proudly announcing the release of a brand-new project emscripten-ports.
The goal of this project is to collect ports that are not part of Emscripten.
The first port released is for ImGui, a bloat-free Graphical User interface for C++ with minimal dependencies.
Released emscripten-glfw 3.4.0.20241004 with the following changes:
- Implemented custom cursors (
glfwCreateCursor)- uses a canvas to draw the cursor image into it and convert it into a URL (
canvas.toDataURL()) - uses the CSS property syntax:
cursor: url(xxx) xhot yhot, autowhen callingglfwSetCursorwith a custom cursor
- uses a canvas to draw the cursor image into it and convert it into a URL (
Published a blog post
properly introducing emscripten-glfw.
You can read about the history of the project and some of the primary features.

Pushed WebGPU Shader Toy update: v2024.09.08
- Added a History menu to undo/redo Shader level changes.
- Added a Quick Export shortcut (
Cmd + S/Ctrl + S). - Added the ability to reset the settings only.
- Added a way to import a shader given a URL.
- Moved some examples outside the code and imported via URL.
- Added 2 examples: Fire and Marble.
Released emscripten-glfw 3.4.0.20240907 with the following changes:
- Fixed Meta/Super key workaround to also handle the rare (but possible) use-case of having other keys down before pressing the Meta/Super key
Pushed WebGPU Shader Toy update: v2024.08.18
- Added support for macOS keyboard shortcuts.
- Changed the “Compile Shader” shortcut to be
Ctrl + D(resp.Cmd + D) asCmd + Spaceis already taken. - Added an alternate way of rendering the shader in fullscreen mode: holding the
Altkey preserves the size/ratio of the shader window. - Upgraded
emscripten-glfwtov3.4.0.20240817which enables using macOS shortcuts and copy/paste in any text field (not just the editor).
Released emscripten-glfw 3.4.0.20240817 with the following changes:
- Major clipboard changes: the clipboard now uses the browser events to handle cut, copy and paste
- Added a way to tweak the timeouts for the Super + Key workaround (Super is also known as Meta or Cmd)
- Added a way to set which keys are allowed to be handled by the browser
- Added a convenient API to open a URL (
emscripten::glfw3::OpenURL) - Added a convenient API to detect if the runtime platform is Apple (
emscripten::glfw3::IsRuntimePlatformApple), mostly used for keyboard shortcuts (Ctrl vs. Cmd). - Added
GLFW/emscripten_glfw3_version.hwithEMSCRIPTEN_GLFW_VERSIONdefine for compilation time version detection EMSCRIPTEN_USE_PORT_CONTRIB_GLFW3port define now also contains the version
Breaking changes:
- The clipboard async API has been removed.
- Check the Clipboard support section for details on how to deal with the clipboard in your application.
Released emscripten-glfw 3.4.0.20240804 with the following changes:
- Fixed
nullptrissue when clipboard is empty - Fixed the internal clipboard being wiped on asynchronous callback error
The source code for WebGPU Shader Toy is now available on github.
Released emscripten-glfw 3.4.0.20240731 with the following changes:
- Added
emscripten_glfw_get_clipboard_stringthe C version ofemscripten::glfw3::GetClipboardStringto retrieve the clipboard asynchronously - Added a helper class
emscripten::glfw3::FutureClipboardStringto greatly simplify the more frequent use-cases GetClipboardString::value()now returns the internal clipboard in case of error, instead of throwing exception- Added
optimizationLeveloption to the emscripten port
Pushed WebGPU Shader Toy update: v2024.07.29
- Added the ability to swap the panes
Released emscripten-glfw 3.4.0.20240727 with the following release notes:
- Introduced C++ API (namespace
emscripten::glfw3) included withGLFW3/emscripten_glfw3.h:- provides a more correct API with sensible defaults (ex:
std::string_view/std::optional<std::string_view>vschar const *which may or may not benullptr) - allow for C++ only API (ex:
std::future) - the C API is still available if you would rather stick to it
- provides a more correct API with sensible defaults (ex:
- Implemented
emscripten::glfw3::GetClipboardString(C++ only) which provides a way of fetching the global clipboard in a browser environment (glfwGetClipboardStringis not the right API due to the asynchronous nature of the underlying platform API). - The cursor position is no longer clamped to the window size, and as a result, can have negative values or values greater than the window size. Note that GLFW implements a similar behavior on the macOS desktop platform.
- Implemented
glfwSetWindowPosCallback - Added support for GLFW Window Attribute
GLFW_HOVERED - Fixed #6:
emscripten_glfw_make_canvas_resizabledoes not clean up properly. - Fixed an issue with opacity: when using opacity, the handle is not working unless its z-index is higher than the canvas z-index
Pushed WebGPU Shader Toy update: v2024.07.21
- In automatic layout mode, added the ability to resize the two panes easily by clicking and dragging the space between them. Double-clicking will revert to an even split.
Pushed WebGPU Shader Toy update: v2024.07.19
- Added the ability to duplicate a shader (right-click on its name for a popup, or select the option in the
Shadermenu) - Handle error cases in dialogs (empty name, duplicate name, invalid size, etc…)
- Added
Ctrl + AandCtrl + Eshortcuts for beginning / end of line shortcuts (Select All is nowCtrl + Shift + A)</li>
Pushed WebGPU Shader Toy update: v2024.07.15
- Tweaked keyboard navigation: make sure that the editor always has preference
- Limit the size of the error message window
- Tweaked version number to make it more readable
Pushed WebGPU Shader Toy update: v2024.07.14
- Added the ability to take a screenshot
- : take a screenshot instantly (use the previous/default format)
- : open the menu to select a format and a filename
- Added the ability to enable/disable shader rendering ()
I am very happy to announce the release of WebGPU Shader Toy, a tool for experimenting with WebGPU fragment shaders and the WebGPU Shading Language (WGSL)
- Here is the product page
- Since this tool runs in your browser, you can try it

Released emscripten-glfw 3.4.0.20240625 with the following release notes:
- Implemented workaround for #4: Using Super + “Key” on macOS results in “Key” not being released.
Due to the broken state of javascript handling the
Super/Metakey, there is no good solution. The workaround implemented, releases all keys whenSuperis released. Although not a perfect solution, it guarantees that the state is eventually consistent:- if “Key” was released while “Super” was held, then when “Super” gets released, “Key” is released (later than when actually released, final state is consistent: “Key” in
Releasestate) - if “Key” is still held when “Super” is released, “Key” is released when “Super” gets released, but immediately gets a down event (Up/Down event, final state is consistent”: “Key” in
Pressedstate)
- if “Key” was released while “Super” was held, then when “Super” gets released, “Key” is released (later than when actually released, final state is consistent: “Key” in
Released re-mock update: v1.6.0
- Added support for
device_categoriesininfo.luawhich was added as a new requirement with Reason 13 - Deprecated automatic support for
std::filesystem::pathinfmtdue to UTF8: usepath.u8string()instead
Released RE Edit update: 1.6.4:
- Added support for
device_categorieswhich was added as a new requirement to Reason 13
Released re-cmake update: v1.7.2
- Updated
re-mockversion (added support fordevice_categories)
Released emscripten-glfw 3.4.0.20240617 with the following release notes:
- Fixed #3:
glfwGetKeymust return one ofGLFW_PRESSorGLFW_RELEASE
Released emscripten-glfw 3.4.0.20240616 with the following release notes:
- Implemented
glfwGetClipboardString. Note that due to the async (and restrictive) nature of thenavigator.clipboard.readTextcall, this synchronous API returns whatever was set via a previous call toglfwSetClipboardStringand ignores the external clipboard entirely.
Released emscripten-glfw 3.4.0.20240601 with the following release notes:
- Fixed #2: Dynamically changing HiDPI awareness does not trigger content callback
Released emscripten-glfw 3.4.0.20240514 with the following release notes:
- Implemented
glfwSetClipboardString
Released emscripten-glfw 3.4.0.20240501 with the following release notes:
- Fixed issue when calling
glfwGetWindowContentScalewithnullptr - Renamed javascript api/impl since these names are not unique to avoid potential conflicts
- Added
glfw3native.htoGLFW. Although not used (at this moment) by this implementation, this allows calling code to include it if necessary since it is part of a normal GLFW installation.
Released emscripten-glfw 3.4.0.20240318 with the following release notes:
- Fixed joystick/gamepad code that was improperly mapping
GLFW_GAMEPAD_AXIS_LEFT_TRIGGERGLFW_GAMEPAD_AXIS_RIGHT_TRIGGER,GLFW_GAMEPAD_BUTTON_LEFT_THUMBandGLFW_GAMEPAD_BUTTON_RIGHT_THUMB GLFW_GAMEPAD_AXIS_LEFT_TRIGGERandGLFW_GAMEPAD_AXIS_RIGHT_TRIGGERare now properly represented as an analog value in the range[-1.0, +1.0]- Please note the change in version numbering which from now on will be tied to the GLFW version implemented + date of release of this port to avoid confusion
I released emscripten-glfw 1.1.0 which implements GLFW 3.4 APIs:
- Upgraded to GLFW 3.4
- GLFW 3.4 features implemented
glfwGetPlatformandglfwPlatformSupporteduses theGLFW_PLATFORM_EMSCRIPTENconstant defined inemscripten-glfw3.h(officially reserved value is0x00060006)glfwInitHintsupports the new hintGLFW_PLATFORM- Supports all 10 cursors
- Implemented
glfwGetWindowTitle - Use
GLFW_SCALE_FRAMEBUFFERto enable (resp. disable) Hi DPI support - Changed the functions that can report
GLFW_FEATURE_UNAVAILABLEfailure to report this error instead of a warning
- GLFW 3.4 features not implemented
GLFW_MOUSE_PASSTHROUGHis not supportedGLFW_CURSOR_CAPTUREDcursor input mode is not supported (not possible in a browser context)glfwInitAllocatoris implemented as noop (could be supported for the C++ part only if there is demand, not javascript)GLFW_POSITION_XandGLFW_POSITION_Yare not supported (same asglfwSetWindowPos)GLFW_ANGLE_PLATFORM_TYPEis not supported (no direct access in browser, but implementation is most likely using it anyway)
- Since GLFW 3.4 introduces a proper constant to handle Hi DPI Awareness (
GLFW_SCALE_FRAMEBUFFER), the prior constant used by this port (GLFW_SCALE_TO_MONITOR) is still accepted, but it is now deprecated. In addition, due to the fact thatGLFW_SCALE_FRAMEBUFFERdefaults toGLFW_TRUE, this port is now Hi DPI aware by default and needs to be explicitly turned off (glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_FALSE)) if this is the desired behavior.
Note: These changes are available in emscripten 3.1.56 (released on 2024/03/14) via the contrib port contrib.glfw3
I released emscripten-glfw 1.0.5 with a critical bug fix:
- Fixed memory corruption with joystick
Note: These changes are available in emscripten 3.1.55 (released on 2024/03/01) via the contrib port contrib.glfw3
Released 1.6.3:
- Fixed issue with contrast not being saved
I am very happy to announce the 1.0 release of my new free and open source project emscripten-glfw which is a port of glfw written in C++ for the web/webassembly platform.
Check out the live demo.
