Multiplayer Rendering Engine
Real-time collaborative design tool with thousands of objects syncing across users. Rust compiled to WASM enables sub-frame sync latency and complex vector rendering that JavaScript couldn't achieve.
Browser-Based CAD Application
40+ years of C++ CAD code running natively in browsers via Emscripten. Full desktop feature parity including 3D modeling, rendering, and file format support—no installation required.
In-Browser 3D Globe Rendering
Photorealistic 3D globe with real-time terrain rendering, street view integration, and smooth navigation. C++ core compiled to WASM for GPU-accelerated graphics previously only possible in native apps.
Edge Computing Workers
WASI-based serverless platform executing WASM at the edge in 200+ data centers worldwide. Sub-millisecond cold starts with secure sandboxed execution—the future of server-side WASM.
What WebAssembly Actually Enables
WebAssembly isn't a programming language—it's a compilation target that lets you run code at near-native speed in browsers. Understanding what WASM enables helps you identify where it actually matters for your product.
Browser-Based Desktop-Class Applications
WASM makes applications possible that couldn't exist as web apps before:
- Design tools — Figma, Photopea, and Canva use WASM for real-time rendering and manipulation
- CAD software — AutoCAD and OnShape run full engineering applications in-browser
- 3D and mapping — Google Earth renders complex terrain with GPU acceleration via WASM
- Video and audio editing — Clipchamp (Microsoft), Kapwing, and Descript process media client-side
Real example: Figma's multiplayer engine is written in Rust and compiled to WASM. It syncs thousands of design objects across multiple users with sub-frame latency—something impossible with JavaScript's single-threaded execution model.
Games and Interactive Experiences
WASM enables console-quality gaming in browsers:
- Game engines — Unity and Unreal export to WASM for browser-based gaming
- Game preservation — Archive.org runs vintage games via WASM emulation
- Interactive applications — Complex simulations, physics engines, and creative tools
Real example: Unity WebGL builds compile to WASM, enabling games like Hearthstone and Angry Birds to run in browsers without plugins—the successor to Flash and Java applets.
Heavy Computation in the Browser
When you need to crunch numbers client-side:
- Image processing — Filters, transformations, and AI-powered features
- Video encoding/decoding — FFmpeg compiled to WASM for client-side transcoding
- Scientific computing — Data visualization, simulations, and numerical analysis
- Cryptography — Secure client-side encryption without JavaScript performance overhead
Real example: Photopea is essentially Photoshop running in your browser via WASM. It handles PSD files with hundreds of layers, real-time filters, and complex selections—all without uploading images to a server.
Porting Existing Codebases
WASM lets companies bring decades of code to the web:
- Desktop applications — Port C++ or Rust applications to run in browsers
- Game libraries — Bring existing game engines to web platforms
- Legacy systems — Run COBOL, Fortran, or other legacy code via WASM compilation
Real example: AutoCAD has 40+ years of C++ code. Rather than rewriting for the web, they compiled to WASM and now offer a full CAD application in the browser with feature parity to the desktop version.
Languages That Compile to WASM
This is the critical insight: you're not hiring WASM developers, you're hiring developers who use languages that compile to WASM.
Rust → WASM (Best Choice for New Projects)
| Aspect | Details |
|---|---|
| Maturity | Excellent—first-class WASM support |
| Tooling | wasm-bindgen, wasm-pack, trunk |
| Binary Size | Smallest—Rust's zero-cost abstractions compile efficiently |
| Use Cases | New WASM projects, performance-critical applications |
Why Rust dominates new WASM projects: No garbage collector means no runtime overhead. Rust produces tiny WASM binaries (often under 100KB) compared to languages that need to include runtime. Figma chose Rust for WASM specifically because of bundle size and predictable performance.
C/C++ → WASM (Best for Porting Existing Code)
| Aspect | Details |
|---|---|
| Maturity | Mature—Emscripten has been around since 2011 |
| Tooling | Emscripten (emcc), WASI SDK |
| Binary Size | Variable—depends on runtime requirements |
| Use Cases | Porting existing C/C++ codebases, games, CAD software |
Why C++ is used for ports: Billions of lines of existing C++ code. Emscripten lets companies bring desktop applications to browsers without rewrites. AutoCAD, Google Earth, and Unity all use C++ → WASM compilation.
Go → WASM (Growing Support)
| Aspect | Details |
|---|---|
| Maturity | Good—supported since Go 1.11 |
| Tooling | Native Go compiler, TinyGo for smaller binaries |
| Binary Size | Large—includes Go runtime (~2MB minimum) |
| Use Cases | Go teams who want browser components, CLI tools in browser |
Why Go WASM is less common: Bundle size. A "Hello World" in Go WASM is ~2MB because it includes the Go runtime and garbage collector. TinyGo reduces this significantly but lacks full Go compatibility. Choose Go WASM when your team knows Go and binary size isn't critical.
AssemblyScript → WASM (TypeScript-like Syntax)
| Aspect | Details |
|---|---|
| Maturity | Good—designed specifically for WASM |
| Tooling | AssemblyScript compiler, similar to TypeScript tooling |
| Binary Size | Small—designed for WASM from the start |
| Use Cases | Teams who want WASM benefits with familiar syntax |
Why AssemblyScript exists: It's TypeScript syntax that compiles to WASM. Easier learning curve than Rust for JavaScript developers, but you give up some performance and the Rust ecosystem. Good for teams that want WASM benefits without learning Rust.
When WASM Matters (And When It Doesn't)
This is what separates senior candidates from junior ones: knowing when NOT to use WASM.
WASM Is Worth It When:
- CPU-bound operations — Image processing, video encoding, complex calculations
- Predictable performance — Gaming, real-time collaboration, audio processing
- Large existing codebase — Porting desktop applications to web
- Security requirements — Sandboxed execution, memory-safe runtimes
WASM Isn't Worth It When:
- DOM manipulation — WASM can't access the DOM directly; it must call JavaScript
- Simple web applications — The complexity isn't justified for CRUD apps
- I/O-bound workloads — Network requests, database queries—WASM doesn't help
- Small computations — The overhead of crossing the JS/WASM boundary can exceed gains
Critical insight: WASM shines for sustained computation but has overhead for frequent small operations. If your code calls JavaScript functions constantly, WASM might actually be slower than pure JavaScript.
The JS/WASM Boundary Problem
Every call between JavaScript and WASM has overhead—data serialization, context switching, and memory copying. Good WASM developers design to minimize boundary crossings:
- Batch operations — Process arrays in WASM, return results to JS
- Shared memory — Use SharedArrayBuffer for zero-copy data sharing
- Strategic boundaries — Keep computation in WASM, use JS for DOM and I/O
This is a key interview topic: candidates should understand that WASM isn't "faster JavaScript"—it's a different execution model with specific tradeoffs.
The WASM Developer Market Reality
Why "WASM Developer" Roles Are Rare
Most companies don't hire "WASM Developers." They hire:
- Rust developers who compile to WASM
- C++ developers who port existing code to WASM
- Systems engineers who understand browser performance constraints
WASM-specific knowledge (wasm-bindgen, Emscripten configuration, memory management patterns) is typically 10-15% of the job. The other 85-90% is the source language and domain expertise.
What to Actually Hire For
| If You're Building | Hire This | WASM is... |
|---|---|---|
| New browser performance tool | Rust developer | Primary output target |
| Port of desktop C++ app | C++ developer with Emscripten | Compilation target |
| Game with Unity/Unreal | Game developer | Handled by engine |
| Performance-critical component | Systems programmer | One of several concerns |
The Supply/Demand Reality
Supply is very low: Few developers have production WASM experience because few applications need it. Most web development doesn't require WASM at all.
Demand is also low: Only companies building performance-critical browser applications need WASM expertise. This isn't React or Python—it's a specialized tool for specialized problems.
What this means: When you do need WASM expertise, you're competing for a tiny talent pool. But you probably don't need dedicated "WASM developers"—you need systems programmers who can learn WASM tooling.
Technical Concepts Recruiters Should Know
Memory Management
WASM has its own linear memory that JavaScript can read/write. Understanding how data moves between JS and WASM is crucial for performance:
- Copying data — Simple but slow for large datasets
- Shared memory — Fast but requires careful synchronization
- Memory views — JavaScript TypedArrays pointing into WASM memory
Threading with Web Workers
WASM can run in Web Workers for true parallelism:
- SharedArrayBuffer — Share memory between WASM instances
- Atomics — Thread-safe operations on shared memory
- Worker pools — Distribute computation across CPU cores
WASI (WebAssembly System Interface)
WASM isn't just for browsers anymore:
- Server-side WASM — Cloudflare Workers, Fastly Compute@Edge
- Portable binaries — "Write once, run anywhere" for server code
- Plugin systems — Sandboxed extensions (e.g., Envoy proxy filters)
WASI is growing fast. If candidates mention WASI experience, that's a positive signal—they're tracking where WASM is heading, not just where it's been.
Evaluating WASM Candidates
What to Test For
- Source language proficiency — Rust/C++ skills matter more than WASM specifics
- Understanding of browser constraints — Main thread blocking, memory limits
- JS/WASM interop decisions — When to cross the boundary, how to minimize overhead
- Toolchain knowledge — Can they build, debug, and profile WASM applications?
- Pragmatic judgment — Do they know when NOT to use WASM?
What Not to Over-Test
- WASM bytecode knowledge — Almost nobody writes raw WAT/WASM
- Every WASM feature — Threads, SIMD, etc. can be learned as needed
- Ecosystem memorization — Tooling changes fast; learning ability matters more
Portfolio Signals to Look For
✅ Positive signals:
- WASM projects with clear performance justification
- Bundle size optimization experience
- Contributions to wasm-bindgen, Emscripten, or similar tools
- Understanding of when they chose NOT to use WASM
🚫 Warning signs:
- "Used WASM because it's cool" without performance data
- No understanding of JS/WASM boundary costs
- Only completed tutorial projects
- Claims WASM is always faster than JavaScript