Emscripten makes native code immediately available on the Web: a platform that is standards-based, has numerous independent compatible implementations, and runs everywhere from PCs to iPads.
For more demos, see the list on the wiki.
A high level view of the Emscripten toolchain is given below. The main tool is the Emscripten Compiler Frontend (emcc). This is a drop-in replacement for a standard compiler like gcc.
The Emscripten SDK (emsdk) is used to manage multiple SDKs and tools, and to specify the particular SDK/set of tools currently being used to compile code (the Active Tool/SDK). It can even “install” (download and build) the latest toolchain from GitHub!
Emsdk writes the “active” configuration to the Emscripten Compiler Configuration File (.emscripten). This file is used by emcc to get the correct current toolchain for building.
A number of other tools are not shown — for example, Java can optionally be used by emcc to run the closure compiler, which can further decrease code size.
The whole toolchain is delivered in the Emscripten SDK, and can be used on Linux, Windows or macOS.
Emscripten support for portable C/C++ code is fairly comprehensive. Support for the C standard library, C++ standard library, C++ exceptions, etc. is very good. SDL support is sufficient to run quite a lot of code. OpenGL support in Emscripten support is excellent for OpenGL ES 2.0-type code, and acceptable for other types.
There are also limitations that can make some code easier to port — read Portability Guidelines to determine where you may need to spend more effort.