The rapid improvement in JavaScript virtual machines combined with maturation of Web platform tools has given rise to sophisticated and demanding web applications such as interactive 3D maps, audio and video software, and games. The increasing ambition of these applications has made the efficiency and security of mobile code on the web more important than ever. Yet JavaScript has inconsistent performance and a number of other pitfalls, especially as a compilation target. Engineers from all major browser vendors have risen to the challenge and collaboratively designed a new low-level byte code for the web called WebAssembly. It offers compact representation, fast and simple validation and compilation, low to no-overhead safe execution, and easy interoperation with the web platform, including direct access to JavaScript and Web APIs. Rather than committing to a specific programming model, WebAssembly is an abstraction over modern hardware, making it both language- and platform-independent. We describe the motivation, design and formal semantics of WebAssembly and provide some preliminary experience with implementations.