What happened to WebAssembly

Expectations vs. Reality

  • Many commenters say early hype imagined WASM as a universal, cross‑platform compile target replacing JS and even containers; reality feels smaller: “Figma runs faster” and niche infra wins.
  • Several compare it to the JVM story: huge theoretical promise, but it settles into important, bounded roles rather than “holy grail” ubiquity.

WASM vs JavaScript (and asm.js)

  • Debate over how “groundbreaking” WASM is versus compiling to JS or asm.js; some call it “just an optimization,” others argue asm.js was a fragile hack and WASM is cleaner, faster to start, and more robust.
  • Benchmarks show mixed results: JS can beat WASM in some compute cases due to sophisticated JITs; others report 2–4x speedups in real apps (image editors, complex UIs, games).
  • Key technical arguments: deterministic integer types, SIMD, better load/store model, optional GC, and no mandatory JS‑style GC overhead.

Browser Integration & JS Replacement

  • Strong desire in part of the community for WASM to directly access the DOM and “replace JS”; others insist this was never a design goal.
  • Today most frameworks still drive the DOM via JS “glue” or virtual DOM layers, which is seen as a major limitation for building full apps and for performance.
  • Some fear full‑canvas or WASM‑only UIs would damage accessibility and make ad‑blocking/scraping harder.

WASI, Containers, and Server-Side

  • Mixed views on WASI as a container replacement: proponents like the sandbox and instant startup; critics say it’s a small, oddly renamed POSIX subset that doesn’t solve packaging, networking, or orchestration.
  • Friction noted around multiple WASI versions, component model churn, and lack of cross‑engine uniformity.

Tooling, Standards, and Ecosystem

  • Tooling is repeatedly called immature: debugging often “printf‑level,” DWARF support stagnant, C/C++ and Rust toolchains awkward, multithreading constrained by browser security headers.
  • Standards politics (WASI, component model, UTF‑8 vs UTF‑16, GC model, SIMD vs flexible vectors) are seen as slowing progress and creating fragmentation and bad blood.

Binary Size & Runtimes

  • Disagreement over WASM bundle size: some experience multi‑MB artifacts; others show kilobyte‑scale Rust/Go/TinyGo examples with careful optimization.
  • A recurring complaint: every WASM app must ship its own runtime/stdlib (ICU, TZDB, libc, language runtime), whereas JS gets these “for free” in the browser.

Where WASM Clearly Shines

  • Widely cited strengths:
    • Porting large native codebases (C/C++, Rust, Java, Go) to the browser with little change.
    • High‑performance media, games, graphics, numerical code, and emulators.
    • Safe plugin and sandboxed execution (e.g., edge functions, user-defined logic, smart contracts).
    • Hidden but critical infra in build tools, editors, libraries, and specific web apps.

Sentiment Summary

  • One camp sees WASM as a quiet success: ubiquitous in niches, great for sandboxed native code, doing exactly what it was designed for.
  • Another camp is disappointed: JS remains central, DOM access is indirect, WASI/container dreams are unfulfilled, tooling is rough, and hype about “replacing JS” or matching NaCl/native performance hasn’t materialized.