I played around for a while with Blazor (C# Web assembly) and wasn’t a massive fan.
The debugging experience was awful.
Lots of runtime gotchas, it’s limited to one thread, so anything that creates a thread will fail at runtime (but not ‘normal’ async stuff). What code creates a thread? No idea until it fails at runtime.
Yes, you can share a dto project between front end and backend, but anything else will eventually trip you up.
It’s still a cool idea though, will try it again at some point.
For many of these, WebAssembly is critical to either their entire product or a major feature.
But I think this alone is not very convincing. We don’t yet see major websites entirely built with webassembly-based frameworks.
Why should it be necessary to build things only in wasm for the web? JS is a really good language for building frontends. There is a reason why lots of companies prefer building native applications with React. People always complain about framework bloat with JS, but then we want to hype up shipping huge wasm binaries? Just for basic interaction in a UI?
Wasm is doing great, inside and outside the browser. But it won’t replace JS because there’s no reason to do so.
I agree with your gist but…
JS is a really good language for building frontends.
Disagree. I think there is an entire ecosystem built out of coping with it being an awful language. That being said, the ecosystem is pretty good at adding first class features to a third rate language and your points stand. I don’t want anything to do with JS in the back end, though NodeJS isn’t entirely awful.
This makes questions like “how fast is WebAssembly” a bit hard to answer. […] What people actually mean is “how useful are the constructs of this language to efficient mappings of modern hardware” and “what is the current landscape of systems taking advantage of these constructs”.

Me after realizing the premise I hinged my entire essay on was faulty and just writing around it instead of starting over
It is used where it is applicable. For regular web pages it is overkill that only complicates everything with no gain at all.
Great article. I think wasm is one of the more interesting things to happen in the last few decades in computer science, though there are many. I think it’s here to stay for sure, but am always curious where the adoption curve will go.
I don’t know much about wasm, but isn’t it the equivalent of bytecode? That’s just a compiler and an interpreter. How is that a significant development in the last few decades in CS?
It isn’t interesting for being bytecode. Rather for being the first universal sandboxed runtime for the browser and elsewhere. Being able to write in many languages and compile to wasm targets is awesome. Safety guarantees and performance are both great too. And it can run in tiny environments.
Maybe we should get away from “browser than can run apps” and move towards “app sandbox that also happens to render html”.
Except that it isn’t really the first iteration of any of those things. Java did most of 'em more than a quarter century ago: browser-embedable, multiple languages could target the JVM, and, yes, sandboxed—the only issue was startup (not runtime) performance. That wasm doesn’t share those startup performance woes makes it useful, but not revolutionary.
As for tiny environments, a typical desktop system from around 1999 is somewhat similar to a Pi Zero W in terms of ability.
The sandboxes are different. The embeddable Java plugin sandbox was a bit different and susceptible to confused deputy and other attacks. So yeah, I guess you can say it is iterative but they’re kind of worlds apart. You can run thousands of wasm modules in a single process and have them all be completely isolated. Its performance and security gains, portability, and usability are all superb.
I guess I can’t really defend it well, but I think it is interesting and important.
It’s kinda cool as in you can compile a bunch of languages to wasm, so instead of being locked to JavaScript (/typescript) you can instead code in e.g. rust, have all the advantages of the compiler and still run in the browser.






