Awesome Wasm
Collection of awesome things regarding WebAssembly (wasm) ecosystem.
Please read the contribution guidelines if you want to contribute.
Contents
- General Resources
- Online Playground
- Tutorials
- Compilers
- Non-Web Embeddings
- Projects
- Languages
- Tools
- Gists
- Examples
- Benchmarks
- Job Boards
- Articles
- Video
- Slides
- Community
- Books
- Papers
- Demos
- Resources in other languages
General Resources
Online Playground
- WebAssembly Explorer
- WebAssembly Playground
- WasmFiddle
- Assembleash - WebAssembly and Typescript-like languages playground
- Wat2Wasm
- Wasm2Wat
Tutorials
- Developer's Guide
- Wasmbyexample - Hands-On Introduction Examples and Tutorials for Webassembly
- Hands-On Webassembly: Try the Basics (2020)
- Using WebAssembly modules in C# (2020)
- First steps with WebAssembly in Rust (2020)
- WebAssembly threads in Firefox (2020)
- Using the import statement with an Emscripten-generated module in Vue.js (2020)
- Hit the Ground Running with WebAssembly (2019)
- Uno Platform Bootcamp - single-source WASM & Mobile app tutorial (2019)
- Porting Games to the Web with WebAssembly (2019)
- Level up Command-line Playgrounds with WebAssembly (2019)
- WebAssembly Physics and DOM objects (2018)
- egghead.io: Get Started Using WebAssembly (WASM)(2017)
- The Path to Rust on the Web (2017)
- WebAssembly 101: a developer first steps (2017)
- Emscripten/HTML Integration Tips (2017)
- Compiling Rust to WebAssembly Guide (2017)
- How to get a performance boost using WebAssembly (2017)
- Getting Started With WebAssembly in Node.js (2017)
- Build Your First Thing With WebAssembly (2016)
- WebAssembly — The missing tutorial (2016)
- Webassembly initial steps tutorial (2016)
- WebAssemblyMan – man page for WebAssembly.
Compilers
- Emscripten - LLVM-based project that compiles C and C++
- Binaryen - Binaryen is a compiler and toolchain infrastructure library for WebAssembly, written in C++
- Rust - A safe, concurrent, practical language
- ilwasm - CIL to WebAssembly compiler
- WebAssembly for the GNU Toolchain
- faust2 - Functional programming language for signal processing and sound synthesis
- Asterius - A Haskell to WebAssembly compiler
- PPCI.wasm - PPCI Can compile wasm to machine code and run it in the Python process
- TinyGo - Go for embedded devices and WebAssembly. Creates very small .wasm files.
- Bytecoder - A Rich Domain Model for Java Bytecode and Framework to interpret and transpile it to other languages such as JavaScript, OpenCL or WebAssembly
- AssemblyScript - Definitely not a TypeScript to WebAssembly compiler
Non-Web Embeddings
- WASI - The WebAssembly System Interface
- wasm3 - The fastest WebAssembly interpreter (x86, x64, ARM, MIPS, Xtensa)
- fizzy - Fast, deterministic, and pedantic WebAssembly interpreter written in clean C++17
- wamr - WebAssembly Micro Runtime (WAMR) is an AOT/JIT/interpreter focusing on small footprint
- wac - WebAssembly in C (x86)
- Asmble - WebAssembly on the JVM
- wasmachine - WebAssembly in a FPGA
- Olin - WebAssembly on the server
- Wasmer - Standalone JIT WebAssembly Runtime
- warpy - WebAssembly in RPython
- pywebassembly - WebAssembly interpreter written in pure Python
- py-wasm - WebAssembly interpreter written in pure Python
- pywasm - WebAssembly interpreter written in pure Python.
- wabt - WebAssembly toolkit and interpreter written in C++
- binaryen - WebAssembly toolkit and interpreter written in C++
- wagon - WebAssembly interpter written in Go
- wasmtime - Standalone WebAssembly Runtime
- embly - A serverless web application framework for collaboration and scale
- SSVM - WebAssembly Virtual Machine for AI and Blockchain applications
- Manticore - Symbolic execution engine with support for WebAssembly
- WAVM - WebAssembly virtual machine, designed for use in non-web applications
- windtrap - A WASM VM written in Elixir
Projects
Web frameworks-libraries
- asdom - DOM bindings for AssemblyScript, write DOM code just like in TypeScript, but compiled to WebAssembly, by LUME
- asm-dom - A minimal WebAssembly virtual DOM to build C++ SPA
- Blazor - Microsoft's web UI framework using C#/Razor and HTML, running client-side via WebAssembly
- Yew - Rust framework for making client web apps
- Perspective - Streaming pivot visualization via WebAssembly
- go-vdom-wasm - Webassembly VDOM to create web application using Golang(experimental)
- seed - A Rust framework for creating web apps
- Vugu - A modern UI library for Go+WebAssembly
- Vecty - Lets you build responsive and dynamic web frontends in Go using WebAssembly
- Zwitterion - A web dev server that lets you import anything*
Data processing
WebGL
- ammo.js - direct port of the Bullet physics engine to JavaScript using Emscripten
- glas - WebGL in WebAssembly with AssemblyScript, by LUME
- Particle System - an experiment designed to benchmark web technologies: ES6, Emscripten and Web Assembly
- Oryol - a small, portable 3D coding framework written in C++
webpack
- wasm-loader - WASM webpack loader
- cpp-wasm-loader - C/C++ to WASM Webpack loader optimized for small bundle sizes
Browserify
Node.js
- webassembly - A minimal toolkit and runtime to produce and run WebAssembly modules.
- wasm-pack - pack up the wasm and publish it to npm!
- go-wasm-cli - Minimalistic cli to create and run (with hot reload) Go application targeting WASM
- xwasm - WebAssembly Packager and WASM tooling for modern frontend
.NET
- Uno Platform - An implementation of Microsoft's UWP APIs for iOS/Android/WebAssembly, using C#/XAML on top of mono-wasm
- Ooui.Wasm - A Xamarin.Forms backend for WebAssembly, using C#/XAML on top of mono-wasm
Others
- wasm-init - Work environment and code generator for WebAssembly projects
- wasm - Python WebAssembly decoder & disassembler library
- MXnet.js - ASM.js build of MXNet, deep learning (neural nets and so) library
- YAKC - a multi-system 8-bit emulator written in C++
- Eufa - a high efficient utility functions library written in webassembly
- Argon2 in browser - Argon2 library compiled for browser runtime
- cld3-asm - Wasm based JS binding for Google compact language detector 3
- hunspell-asm - Wasm based JS binding for Hunspell spellchecker
- wasm-bindgen - Interoperating JS and Rust code
- ewasm - Ethereum flavored WebAssembly
- webm-wasm - Create webm videos in JavaScript via WebAssembly
- wasm-pdf – Generate PDF files with JavaScript/WASM
- go-web-app – Quickly setup Go + WebAssembly frontend apps
- gotemplate.io – Quicky test and visualize your Go templates live
- WasmBench - A large dataset of real-world WebAssembly binaries, collected from the Web, GitHub, NPM and more
Languages
Esoteric
Go
- Go - Go programming language WebAssembly support
- Compiling Go to WebAssembly
- VueGo - WebAssembly Vue.js wrapper written in Go
JavaScript-family
- AssemblyScript - A subset of TypeScript that compiles to WebAssembly
- Getting Started with AssemblyScript
- TurboScript - A TypeScript-like language that compiles to asm.js and WebAssembly (unmaintained)
- speedy.js - Accelerate JavaScript Applications by Compiling to WebAssembly (unmaintained)
Kotlin
Lua
OCAML
Python
- Pyodide - The Python scientific stack running in the browser
- PyScript - Run Python Code and the scientific stack in the browser
- python-wasm - WebAssembly CPython for Node.js and the browser built using Zig (no emscripten)
- Rocket game - Rocket, written in Rust, compiled to WASM, running in Python (using PPCI)
Rust
- Rusty Web
- parity-wasm - WebAssembly serialization/deserialization library in pure Rust
- wasmi - WebAssembly interpreter in pure Rust
- awesome-rust (has scattered references to targeting WASM)
Forth
WASM-like
- wah - a slightly higher-level language superset of webassembly
- Walt - Alternative Syntax for WebAssembly
- wam - Superset of wast syntax that is more convenient for humans to write directly
Other
- Lys - a functional language that compiles to WebAssembly
- Never - statically typed, embeddable functional programming language
Tools
Kits
- WABT - A suite of tools that help working with WASM binary files
- webassembly-binary-toolkit - The WABT tools installable as an npm package
Editor
- vim-wasm - WebAssembly filetype support for Vim
- vscode wast - WebAssembly(S-expression) support
- Atom language-wast
- vscode-wasm - WebAssembly toolkit for vscode
Gists
Examples
- The Windows 10 calculator running in WebAssembly
- webassembly-examples
- Factorial in WebAssembly
- WebAssembly vs. JavaScript Animation Demo
- Web DSP
- wasm-intro - Tiny WebAssembly Examples with LLVM/clang and C
- webassembly-examples - From Simple To Complex.
- D3 force layout with WebAssembly
- wasmBoy - Gameboy Emulator Library written in Web Assembly using AssemblyScript
- CppOpenGLWebAssemblyCMake - C++/OpenGL/OpenAL/GLFW/GLM based app built with CMake to native or WebAssembly
- WebAssembly A* Pathfinding
- HackerNews PWA with wasm-bindgen
- TiDB playground - writing SQL in an in-browser golang database in WebAssembly
- Made With Webassembly - Showcase of Awesome Production Applications, Side Projects, and Use Cases Made With Webassembly
- HandyTools - A tool providing features like base64 encoding/decoding, Unix time conversion, etc. Written in Go + WebAssembly
- WAsm Heatmap - Creates a heatmap layer for Leaflet.js with Go+WebAssembly+WebWorkers
- Modfy - Wasm Video Transcoder
Benchmarks
- WebAssembly Video Editor
- 3D skeletal animation system
- Cubes JS - Cubes (WebAssembly).
- JavaScript vs WebAssembly easy benchmark
- Performance Testing Web Assembly vs JavaScript
- A Real-World WebAssembly Benchmark by PSPDFKit
- Wasm vs. PNaCl Performance Benchmark by PDFTron
- JavaScript vs WebAssembly running in Browser/Nodejs
Job Boards
Articles
- WebAssembly and SIMD: A Match Made in the Browser (2020)
- WebAssembly at eBay: A Real-World Use Case (2019)
- How We Used WebAssembly To Speed Up Our Web App By 20X (Case Study) (2019)
- Practice your Go WebAssembly with a Game (2019)
- The world's easiest introduction to WebAssembly with Golang (2019)
- Why WebAssembly? (2018)
- Writing WebAssembly By Hand (2018)
- Ruby on WebAssembly (2018)
- Optimizing WebAssembly Startup Time - 4 simple yet effective solutions to reduce load time. (2018)
- WebAssembly: A New Hope (2017)
- Creating a WebAssembly module instance with JavaScript (2017)
- Memory in WebAssembly (and why it's safer than you think) (2017)
- WebAssembly table imports… what are they? (2017)
- WebAssembly Demystified (2017)
- A cartoon intro to WebAssembly (2017)
- Creating and working with WebAssembly modules (2017)
- What makes WebAssembly fast? (2017)
- Where is WebAssembly now and what's next? (2017)
- Web Games Platform: Newest Developments (2017)
- Why WebAssembly is Faster Than asm.js (2017)
- Firefox 52: Introducing Web Assembly, CSS Grid and the Grid Inspector (2017)
- Previewing the WebAssembly Explorer (2017)
- Why WebAssembly is a game changer for the web — and a source of pride for Mozilla and Firefox (2017)
- Introduction to WebAssembly (2017)
- What is WebAssembly? (2015)
- 7 Things You Should Know About WebAssembly (2015)
- WebAssembly: a binary format for the web (2015)
- Compiling to WebAssembly: It's Happening! (2015)
- The Future of Programming: WebAssembly & Life After JavaScript (2015)
- WebAssembly Everywhere
Video
- What is WebAssembly? By Some of its Creators (2019-08)
- Level up Your Web Apps with WebAssembly (PerfMatters Conference 2019-04)
- Go WebAssembly Tutorial - Building a Calculator (2018-08)
- Get Going with WebAssembly (2018-08)
- Build the future of the web with WebAssembly and more (Google I/O 2018-05)
- WebAssembly and the Death of JavaScript? (2018-02)
- Practical WebAssembly (2017-12)
- Real World WebAssembly (Chrome Dev Summit 2017-10)
- Andreas Rossberg - Bringing the Web up to Speed with WebAssembly (2017-06)
- Compiling for the Web with WebAssembly (Google I/O 2017-05)
- A Cartoon Intro to WebAssembly (2017-05)
- WebAssembly Demystified (2017-05)
- Meeting C++ 2016: Implementing a web game in C++14 - Kris Jusiak (2017-01)
- CppCon 2016: Dan Gohman "C++ on the Web: Let's have some serious fun." (2016-10)
- WebAssembly and the Future of the Browser (2016-09)
- NYLUG Presents: Luke Wagner -on- WebAssembly: A New Compiler Target For The Web (2016-06)
- Web Assembly - Nick Bray - BlinkOn 5 - (2015-11)
- Web Assembly - Nick Bray - GOTO 2015 - (2015-10)
- From ASM.JS to WebAssembly (2015-06)
- A Talk Near the Future of Python (a.k.a., Dave live-codes a WebAssembly Interpreter)
Slides
- Web Assembly for Dumb People (2020)
- Boost your web application with C++ (2016)
- WebAssembly (Do we all have to learn C now?)
- WebAssembly (2016)
- WebAssembly overview (2016)
- Emscripten and WebAssembly (2015)
- An intro to WebAssembly (2015)
Community
- W3C Community Group
- Stack Overflow
- Slack: WebAssembly Developers (click here to get an invitation)
- WasmWeekly - a weekly newsletter
- WebAssembly AMA
Books
- WebAssembly Reference Manual
- Learn WebAssembly - Build web applications with native performance using Wasm and C/C++
- Programming WebAssembly with Rust - Unified Development for Web, Mobile, and Embedded Applications
- Rust and WebAssembly
- WebAssembly in Action - Introduces the WebAssembly stack and walks you through the process of writing and running browser-based applications
- Level up with WebAssembly - A practical guide to building WebAssembly applications
- Hands-On Game Development with WebAssembly
Papers
- Bringing the Web up to Speed with WebAssembly
- The Web Assembles
- An Empirical Study of Real-World WebAssembly Binaries: Security, Languages, Use Cases
Demos
- Aphrós - finite volume solver for incompressible multiphase flows
- Cubes - direct port of the Bullet physics engine
- Basic4GL
- Symatem - an Ontology Engine, Visualizer, and Editor
- Funky Karts
- PSPDFKit for Web - a WebAssembly-based PDF viewer with annotation features
- Uno Platform Playground - a WebAssembly-based XAML playground
- Roslyn Quoter - a WebAssembly-based Roslyn-based C# code quoter
- wasmBoy Demo/Debugger - a Gameboy Emulation library written in Web Assembly using AssemblyScript
- DOOM 3 - Doom 3 WebAssembly port
- Squoosh.app - Compress and compare images with different codecs, right in your browser
- SketchUp - 3D modeling software
- WebViewer - a CAD, MS Office, and PDF SDK
Resources in other languages
Simplified Chinese
- WebAssembly 中文网
- WebAssembly 中文社区
- WebAssembly-cn Orgnization
- WebAssembly资料精选 - 中文版
- WebAssembly标准入门 - 第一本中文图书
- C/C++面向wasm编程 - 第一本中文开源图书
- 《深入浅出 WebAssembly》
Russian
- KharkivJS #5: Serious JS (Kharkiv, Ukraine, November 7, 2015) - WebAssembly: new era of Web (video)
- OdessaJS 2017 - Real world WebAssembly (video)
- Урок-введение по WebAssembly на примере игры "Жизнь" (article)
Spanish
License
To the extent possible under law, Matteo Basso has waived all copyright and related or neighboring rights to this work.