From an end-user perspective, N64 WASM is magical. You navigate to a website (many public projects exist on GitHub Pages or independent emulation archives). You click "Load ROM," select a .z64 or .v64 file from your device, and within seconds, the game boots.
What you get:
What you lose:
Developers took the stable, dynarec-equipped core of Mupen64Plus and compiled it to WASM using Emscripten (a toolchain for compiling C++ to WebAssembly). The result: A core that interprets N64 ROMs and spits out OpenGL calls. Those OpenGL calls are then translated into WebGL (or WebGL 2) for rendering in the browser.
The first working demos around 2017-2018 were choppy. Super Mario 64 ran at 15-20 FPS. Ocarina of Time had broken audio. But the proof-of-concept was monumental: an N64 game running without a single plugin or server-side rendering.
The watershed moment for N64 WASM was the release of simple64-web (a fork of the highly accurate simple64 emulator) and the continued work on mupen64plus-wasm. For the first time, you could play Super Mario 64 with accurate depth buffering, The Legend of Zelda: Ocarina of Time with correct fog and lens flares, and GoldenEye 007 with the original framebuffer effects—all without installing a plugin, a driver, or a ROM launcher.
Why does WASM make this possible now?
If you want to experience N64 WASM today, here are the key projects (note: none host ROMs for legal reasons; you must supply your own legally obtained dumps):
Most N64 WASM projects are not written from scratch. They are ports of established, open-source emulators—specifically Mupen64Plus and ParaLLEl.