// the take
A 2017-2018 proof-of-concept from Miguel de Icaza exploring how to compile Mono and C# assemblies straight to WebAssembly using LLVM's experimental wasm32 backend (clang + lld) instead of Emscripten. It's for people interested in compiler/runtime internals and how Mono's WebAssembly support originally got bootstrapped, not for anyone who wants to ship C# in a browser today.
Skips Emscripten entirely and drives LLVM's wasm32 target directly, which is a much smaller and more transparent dependency chain than the usual Emscripten pipeline. The incremental build mode (compiling runtime/mscorlib to wasm separately then linking with lld) is a real engineering idea aimed at sub-second iteration, not just a toy. It's historically the seed that led to the official Mono WebAssembly runtime now underpinning Blazor WebAssembly in .NET, so the design choices here are worth reading as a precursor.
Last pushed in 2018 and explicitly labeled a work-in-progress that never reached an alpha, let alone 1.0 — it's dead. Building it means compiling custom forks of LLVM, a forked Mono compiler/runtime, and a forked musl libc from source, with no CI and no prebuilt artifacts; those forks have had no updates in years and almost certainly won't build against current toolchains. Per the project's own TODO list, garbage collection doesn't work (no stack scanning), and there's no support for threads, sockets, or a debugger — it's missing core runtime functionality, not just polish. Anyone wanting this capability should just use the official Mono wasm runtime in Blazor WebAssembly, which supersedes this entirely.
We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →