Use Cases

WebAssembly’s high-level goals define what WebAssembly aims to achieve, and in which order. How WebAssembly achieves its goals is documented for Web and non-Web platforms. The following is an unordered and incomplete list of applications/domains/computations that would benefit from WebAssembly and are being considered as use cases during the design of WebAssembly.

Inside the browser

  • Better execution for languages and toolkits that are currently cross-compiled to the Web (C/C++, GWT, …).
  • Image / video editing.
  • Games:
    • Casual games that need to start quickly.
    • AAA games that have heavy assets.
    • Game portals (mixed-party/origin content).
  • Peer-to-peer applications (games, collaborative editing, decentralized and centralized).
  • Music applications (streaming, caching).
  • Image recognition.
  • Live video augmentation (e.g. putting hats on people’s heads).
  • VR and augmented reality (very low latency).
  • CAD applications.
  • Scientific visualization and simulation.
  • Interactive educational software, and news articles.
  • Platform simulation / emulation (ARC, DOSBox, QEMU, MAME, …).
  • Language interpreters and virtual machines.
  • POSIX user-space environment, allowing porting of existing POSIX applications.
  • Developer tooling (editors, compilers, debuggers, …).
  • Remote desktop.
  • VPN.
  • Encryption.
  • Local web server.
  • Common NPAPI users, within the web’s security model and APIs.
  • Fat client for enterprise applications (e.g. databases).

Outside the browser

  • Game distribution service (portable and secure).
  • Server-side compute of untrusted code.
  • Server-side application.
  • Hybrid native apps on mobile devices.
  • Symmetric computations across multiple nodes

How WebAssembly can be used

  • Entire code base in Web Assembly.
  • Main frame in Web Assembly, but the UI is in JavaScript / HTML.
  • Re-use existing code by targeting Web Assembly, embedded in a larger JavaScript / HTML application. This could be anything from simple helper libraries, to compute-oriented task offload.