aboutsummaryrefslogtreecommitdiff
path: root/UseCases.md
blob: 6e04ab84390b79bf689a56e3275f867532b90f41 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Use Cases

WebAssembly's [high-level goals](HighLevelGoals.md) define *what* WebAssembly
aims to achieve, and in *which order*. *How* WebAssembly achieves its goals is
documented for [Web](Web.md) and [non-Web](NonWeb.md) 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 WebAssembly.
* Main frame in WebAssembly, but the UI is in JavaScript / HTML.
* Re-use existing code by targeting WebAssembly, embedded in a larger
  JavaScript / HTML application. This could be anything from simple helper
  libraries, to compute-oriented task offload.