Abstract
WebAssembly (WASM) promises to run code in the browser from a binary (coded in Rust, Go, C, ...) are fulfilled. Its qualities (speed, efficiency, security, polyglot) meant that WebAssembly could be run on a wide variety of platforms (other than the JavaScript VM) for many use cases, such as:
- Plugins for applications (for example, Zellij)
- Filters for proxies (for example, Envoy)
- User-defined functions for databases (for example, ScyllaDB)
- Functions for FaaS (for example, Fermyon Platform)
This is made possible by the WASI (WebAssembly System Interface) specification, which allows WASM code to be executed in various contexts. The execution of WASM modules by a Go application, with WASI runtimes SDKs, was until recently "acrobatic".
This gap is now filled by the Extism project, which allows writing WASM plugins in various languages for your Go (but not only) applications.
In this presentation, I will explain how to develop a Go http server with WASM plugins in TinyGo, Rust and JavaScript. The first steps to develop a FaaS.