HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
emscripten-core
emscripten
C++2011–2026
emscripten-core / emscripten

emscripten

Emscripten: An LLVM-to-WebAssembly Compiler

123Distinct people
148Mentions
0Explicit recommenders
27.8KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Emscripten: An LLVM-to-WebAssembly Compiler

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 6:01:08 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year148 dated mentions

Observed mentions: 2011-04-16 12:05:53 UTC to 2026-06-13 18:10:02 UTC.

051015202011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 13 mentions; 3 submissions, 10 comments20112012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 20 mentions; 4 submissions, 16 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 21 mentions; 0 submissions, 21 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 13 mentions; 1 submissions, 12 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 16 mentions; 2 submissions, 14 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 10 mentions; 1 submissions, 9 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 17 mentions; 1 submissions, 16 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20182019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC13310
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC20416
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC21021
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC13112
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC16214
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC1019
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC17116
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC202
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC303
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC413
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC615
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC303
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC303
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC505
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC909
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC303

What Hacker News says

17 sources
People should look at existing emscripten projects to see what the future will be like since compiling to asm.js is already pretty mature (just a bit slow and bloated as noted in the article). Any emscripten project can compile to WASM trivially by adding a `-s WASM=1` compilation flag. Example projects: - OCR (tesseract): http://tesseract.projectnaptha.com/ - Computer vision (opencv): https://docs.opencv.org/master/d5/d10/tutorial_js_root.html - Physics engines, retro games/emulators, entire operating systems, and many many more: https://github.com/kripken/emscripten/wiki/Porting-Examples-...
In Introduction to WebAssembly: why should we care?
The plan for emscripten is actually to replace its own wasm compiler with LLVM, and possibly drop its asm.js compiler in favor of running wasm2asm on LLVM's wasm output: https://github.com/kripken/emscripten/issues/5827 Aside from keeping emscripten's code smaller / more maintainable and allowing the team to focus more on its role as high-level tooling, this should improve the size and performance of emscripten output since IIRC it's currently missing out on a lot of optimization opportunity by producing wasm as transpiled asm.js.
In Rust: Enable WebAssembly backend by default
Interesting with the VFSync site, nice to see some standardization on this. I used to work on on-demand file systems in Emscripten, but it never worked well, especially because you can't have binary XHR outside webworkers. https://github.com/kripken/emscripten/commit/e2046bb8ce2b2cc... But I don't understand, why is VFSync superior to something like NFS? It seems that Bellard is trying to set up a hosting site for VFSync, so that people can easily share images. I dreamt about having something like that, combined with copy-on-write, which would make it possible to make small changes to a big filesystem and share them, without having to upload the full system. Kind of like with Docker. I wonder if that would be compatible with the VFSync model.
In JSLinux – Run Linux or other Operating Systems in your browser
Hey thanks for finding my project! I haven't posted about it much, so its cool to see it being noticed. For those curious, https://github.com/satoshinm/NetCraft is my first project with WebAssembly/emscripten. It was surprisingly easy to port from Michael Fogleman's Craft (https://github.com/fogleman/Craft/). I briefly tried porting a few other open source block-style engines without success, but Craft being written in plain C with only a few libraries is relatively straightforward. The initial requirement is to refactor the main loop, from while(1) to emscripten_set_main_loop, a common step for most all emscripten ports. Then update the cmake build file to build with the Emscripten.cmake module, and you're almost done. Emscripten's GLFW3 wrapper covers nearly all of Craft's usage. I posted a fairly minimal pull request showing the basic
Read the rest
changes needed: https://github.com/fogleman/Craft/pull/175 After that, the other major change is networking. Craft used a separate thread to listen for network data using blocking sockets and parse message boundaries. But on the web platform with WebSockets, networking is even easier, I use emscripten_set_socket_message_callback() to get called when a new, complete message arrives. Easy as pie. The harder part is the remaining long tail of minor bugs. At this point, the web port of Craft was functional, but difficult to play, a death by a thousand cuts. Emscripten's GLFW implementation had a few bugs related to cursor focus and keyboard handling, but I developed test cases and submitted fixes (https://github.com/satoshinm/emglfwbugs), which were all merged into emscripten's incoming branch. Until they were merged I built against a patched emscripten. If anyone wants to get their hands dirty with emscripten, I highly recommend it. You can write the game in C, but the APIs are bridged to JavaScript, and it was fun to extend it and add new API for HTML5 platform features. I implemented the glfw joystick API (https://github.com/kripken/emscripten/pull/5175) on top of the HTML5 Gamepad API, and drop callbacks on top of the HTML5 File Drop API (https://github.com/kripken/emscripten/pull/5206), and started but have yet to finish the glfw monitor API on top of the HTML5 Screen API (which reminds me I ought to finish https://github.com/kripken/emscripten/pull/5205...). This means existing games written using GLFW (a popular multi-platform library for OpenGL, see http://www.glfw.org) with these features should port to the web using emscripten automatically. After the web port, I continued to enhance https://github.com/satoshinm/NetCraft merging open pull requests from https://github.com/fogleman/Craft and developing new features and fixes. Blocks no longer break instantly, but instead are mined by holding down the mouse button, drawing a growing block break indicator until it breaks, and so on. Up until last month, recently taking a break (to investigate a few other, semi-related projects). However, it is still very playable in the current state. A live demo can be found at https://satoshinm.github.io/NetCraft/, but the more interesting possibility in my opinion is multiplayer. Craft's original Python server backend can be connected to over the web (/server servername), using a websocket proxy, but I also wrote a Bukkit plugin to bridge a small chunk of the Minecraft world: https://github.com/satoshinm/WebSandboxMC. Last month I ran a server on a VPS (for 1 month), backed by a variant of the open source Glowstone server (https://github.com/GlowstoneMC/Glowstone), with this custom plugin and it peaked at a couple dozen users, running decently smooth. I also experimented with hosting on Heroku, it is less stable and deletes when the dyno shuts down, but works (for a smaller number of users): http://netcraft.herokuapp.com I don't know if Craft is the answer, but I definitely agree, a web-based block style game is extremely appealing. The next major missing piece I see is extensibility, allowing outside developers to conveniently and cleanly create and distribute new content. Minetest is way further in this regard, I have not looked into it, but at least the filesystem and networking should be feasible to port to emscripten (emscripten has its own virtual filesystems), and shared memory may benefit from the upcoming SharedArrayBuffer technology: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
In Show HN: Teachcraft – Learn Python through Minecraft
When I was working on it the accepted solution was to compile as linux and statically link musl into the wasm binary, leaving mostly __syscallN symbols unresolved. As such it's a matter of implementing those on an as-needed basis (in javascript for emscripten and in java here). I at least successfully got sqlite opening a database in a pure java transpile that way. While it's a possibly inelegant approach on the face of it linux does at least have an aggressive 'dont break userspace' attitude and there is longstanding prior art for this on freebsd. see: https://github.com/kripken/emscripten/blob/6dc4ac5f9e4d8484e...
In Show HN: Asmble – Compile WebAssembly to the JVM
There is already SDL2 support for emscripten, and emscripten can compile to WebAssembly with the WASM flag flipped on. So basically just use emcc with -s WASM=1 -s USE_SDL=2 for WebAssembly + SDL2. The test_sdl2* tests in emscripten's test suite have working samples in them, https://github.com/kripken/emscripten/blob/master/tests/test... A full SDL1 testcase is in the tutorial, http://kripken.github.io/emscripten-site/docs/getting_starte...
In WebAssembly consensus and end of Browser Preview
Thanks for the hint about the device pixel ratio, I haven't thought of that (although it's 'accidentally alright' if on HighDPI devices rendering doesn't happen at full resolution since the GPUs often don't have enough fillrate). The function implementations are fairly easy to find in the emscripten SDK, e.g.: emscripten_get_element_css_size(): [1] emscripten_hide_mouse(): [2] It's also very easy to inject your own JS 'inline' into C/C++ in case the standard functions don't quite do the right thing with EM_ASM: [3] [1] https://github.com/kripken/emscripten/blob/6dc4ac5f9e4d8484e... [2] https://github.com/kripken/emscripten/blob/6dc4ac5f9e4d8484e... [3] https://kripken.github.io/emscripten-site/docs/porting/conne...
In Emscripten/HTML integration tips

Showing the 15 most recent of 17 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.