A practitioner's tour of where WebAssembly earns its keep in 2026, from browser apps to edge compute, plus the places it still doesn't fit.
WebAssembly gets pitched as a JavaScript replacement, which it isn't, and as a universal runtime, which it partly is. The useful question is narrower: where does compiling to a portable, sandboxed binary buy you something you couldn't get otherwise? After a few years of shipping Wasm, the answer sorts into a handful of clusters. If you want the ground floor first, we wrote what is WebAssembly as the primer. This post is about where it pays off.
The original win, and still the clearest. Figma runs its rendering and geometry engine as Wasm compiled from C++. Photoshop on the web put a decades-old C++ codebase in the browser. AutoCAD did the same for CAD. Games shipped through Unity and Unreal export to Wasm targets. And ffmpeg.wasm lets you transcode video or crunch images entirely client-side, no upload round trip.
Why it fits: these are compute-bound workloads where JavaScript's dynamic dispatch and garbage collection cost real frames. Wasm gives near-native, predictable performance in a tight numeric loop, and you keep the existing native codebase instead of rewriting it.
Closely related, but worth separating. There is an enormous back catalog of battle-tested native libraries (image codecs, PDF renderers, crypto, physics, SQLite) that nobody wants to reimplement in JavaScript. Compile them to Wasm and they run in the page. SQLite's official Wasm build is a good example: a real database engine, in the browser, backed by the origin private file system.
Why it fits: portability without a rewrite. You get correctness from the mature C implementation and reach from the browser. The cost is the JS/Wasm boundary, where copying large buffers back and forth can eat your gains if you're careless.
This is the cluster that grew the most. Fastly Compute, Cloudflare Workers, and wasmCloud all lean on Wasm as the unit of deployment. A container cold-starts in hundreds of milliseconds to seconds. A Wasm module instantiates in microseconds because there's no OS image, no filesystem to mount, just a linear memory and a validated binary.
That difference reshapes edge computing. You can afford to spin up a fresh instance per request, close to the user, without the tail-latency penalty that makes traditional serverless painful. Multi-tenancy gets cheaper too, since thousands of modules share a process safely inside the sandbox.
Why it fits: microsecond cold starts and a security model that lets one process host untrusted code from many customers. If your workload is bursty, latency-sensitive, and geographically spread, this is the strongest case Wasm has today.
Wasm's sandbox is capability-based: a module can do nothing except what the host explicitly hands it. That makes it a natural fit for plugins you don't fully trust. Envoy uses Wasm filters so you can extend the proxy without recompiling it or crashing the data plane. Shopify Functions run merchant-supplied logic (discounts, shipping rules) as Wasm on Shopify's infrastructure. Databases and proxies increasingly expose Wasm extension points for the same reason.
Why it fits: you want third-party code in your critical path without giving it your process. The sandbox contains crashes and blocks the module from touching anything you didn't grant. Deterministic execution also means you can meter and time-limit it.
Here's the shape of a Shopify-style function, stripped down:
.wasm module.The merchant gets custom logic. The platform never risks arbitrary code loose in its checkout path.
The WebAssembly System Interface is what takes Wasm off the browser and onto the server as a general runtime. WASI Preview 2 and the component model matured enough that you can compile a service once and run the same artifact across runtimes like Wasmtime and WasmEdge, on any CPU architecture. The pitch is "build once, run anywhere" done properly, with a sandbox by default instead of a container's opt-in isolation.
Why it fits: portability plus isolation without a full OS image. It's compelling for plugin hosts, function runtimes, and constrained environments. It is not yet a drop-in replacement for containers running a normal Linux service, because the ecosystem of libraries expecting full POSIX is still catching up.
Several chains (Polkadot, NEAR, CosmWasm on Cosmos) compile smart contracts to Wasm rather than inventing a bespoke VM. It's a good match: contracts must be deterministic, sandboxed, metered by gas, and portable across nodes. Wasm gives you all four properties off the shelf, plus real toolchains so developers write Rust instead of a niche contract language.
Why it fits: determinism and metering are first-class, and the sandbox is the whole point when you're executing adversarial code from strangers.
Running models in the browser has gone from novelty to normal. ONNX Runtime Web and libraries built on Wasm (with SIMD and threads) run inference locally, so image classification, transcription, or a small language model runs on the user's device. Data never leaves the machine, which is a privacy and cost win, and there's no inference server to scale.
Why it fits: Wasm SIMD gets enough throughput for small and mid-size models, and the sandbox means you ship to untrusted client machines safely. For large models you'll want WebGPU doing the heavy lifting, with Wasm coordinating.
Worth being blunt. DOM-heavy UI work is still JavaScript's job; routing every DOM call through the Wasm boundary is slower, not faster. Garbage-collected languages had a rough time until WasmGC landed, and tooling there is still uneven. WASI's library ecosystem doesn't yet match what a container gives a normal backend service. If your service is a standard CRUD API talking to Postgres, a container is simpler and you lose nothing.
Reach for Wasm when you have a compute-bound workload, untrusted code to sandbox, or a cold-start problem at the edge. Those three are where it wins clearly today. Treat server-side WASI as promising but still early for general backend work, and don't force Wasm into UI glue where JavaScript already does the job.
One language note: most of the serious Wasm toolchains we reach for compile from Rust, which is no accident given its no-runtime, no-GC profile. If you're weighing that choice, our Rust vs Go comparison covers the trade-offs. The absence of a required garbage collector is exactly why Rust and C/C++ produce the smallest, fastest modules, and why they dominate the use cases above.
Get the latest tutorials, guides, and insights on AI, DevOps, Cloud, and Infrastructure delivered directly to your inbox.
Explore more articles in this category
A practical look at why Go usually outruns Python at runtime, where Python holds its own, and how to pick per workload.
A grounded look at WebAssembly, the portable binary format that runs code at near-native speed inside a secure sandbox.
A practitioner's comparison of Rust and C++ across performance, memory safety, ecosystem, and the domains where each still earns its place.
Evergreen posts worth revisiting.