wasm3 is a free, open source cloud infrastructure management project written in C and released under MIT. It has 8,028 GitHub stars, 538 forks and 18 open issues, and was last pushed 17 hours ago. On this registry it ranks #28 of 70 tracked projects in Cloud Infrastructure Management, with 5 head-to-head comparisons available.

What is wasm3?

Wasm3 is a fast, MIT-licensed WebAssembly interpreter written in C that runs across x86, ARM, RISC-V, MIPS, Xtensa and other architectures β€” from ESP8266 microcontrollers and OpenWrt routers to browsers and Linux servers β€” and it is aimed at developers and embedded engineers who need to execute portable Wasm or WASI code where a full-size runtime will not fit.

What it is

Wasm3 is an interpreter for WebAssembly, the binary instruction format that allows code compiled from languages such as C, Rust and Go to run on a target machine without being recompiled for it. The project lives in the WebAssembly and WASI ecosystem, and it describes itself as the most universal WASM runtime: it passes the WebAssembly spec testsuite and runs many WASI applications, while needing as little as roughly 64KB for code and 10KB of RAM. It is written in C, released under the MIT licence, and can be compiled to WebAssembly itself, so that wasm3 can execute wasm3.

The concrete problem it solves is footprint and portability. On constrained hardware β€” a router running OpenWrt, Yocto or Buildroot, a single-board computer, or an MCU such as the Arduino, ESP8266, ESP32 or Particle β€” a heavier runtime cannot be deployed. Wasm3 fills that gap by interpreting Wasm in a small memory budget rather than requiring a JIT, and by exposing the same engine as a library so host applications in another language can embed it directly.

Key capabilities

  • Executes Wasm and WASI modules and passes the WebAssembly spec testsuite, with minimum useful requirements of about 64KB for code and 10KB of RAM.
  • Runs on x86, x86_64, ARM, RISC-V, PowerPC, MIPS, Xtensa and ARC32 across Linux, Windows, OS X, FreeBSD, Android and iOS.
  • Targets embedded and network platforms including OpenWrt, Yocto and Buildroot for routers and modems, Raspberry Pi and Orange Pi boards, and MCUs such as Arduino, ESP8266, ESP32 and Particle.
  • Self-hosts: wasm3 can be compiled to WebAssembly and execute wasm3, and it supports Wasm and WASI self-hosting.
  • Implements the Lime1 extensions, including Import/Export of Mutable Globals, Non-trapping float-to-int conversions, Sign-extension operators, Multi-value and Extended constant expressions.
  • Supports Wasm proposals including Bulk memory operations, Exception handling, Multiple memories, Memory64, Table64, Reference types, Tail call, Custom page size, Compact Import section and Deterministic profile; Typed function references is partial.
  • Provides extras such as structured execution tracing, big-endian support, gas metering and guard-page memories, and is usable as a library from Python3, Rust, C/C++, D, GoLang, Zig, Perl, Swift, .Net, Nim, Arduino, PlatformIO, Particle and QuickJS.

Who uses it and how

  • Embedded and IoT developers run Wasm modules on ESP8266, ESP32, Arduino and Particle hardware, where the interpreter's small memory footprint is the deciding constraint.
  • Edge and network deployments place it on OpenWrt, Yocto and Buildroot systems, so routers and modems can execute sandboxed modules without a large runtime.
  • Serverless and container-oriented teams use it as a sandbox for untrusted code, matching the project's containers, serverless and sandbox topics.
  • Smart-contract environments use the built-in gas metering to bound execution time and cost of untrusted modules.
  • Application developers embed the engine through the documented bindings rather than shipping a standalone binary, with Python3 via pywasm3 and Rust via wasm3-rs among the listed options.

Getting started

Installation follows the project's own instructions in docs/Installation.md, with performance details recorded separately in docs/Performance.md and platform coverage in docs/Hardware.md. The engine can also be consumed directly as a library, with bindings documented for Python3, Rust, C/C++, GoLang, Zig, Perl, Swift, .Net, Nim and Arduino.

How it compares

No competing runtime is named in the facts provided, and no list of paid products that wasm3 replaces is given, so it stands alone in this registry entry. Use the platform and footprint figures above, not a comparison table, to judge fit.

When to use it β€” and when not to

Wasm3 suits projects that must run Wasm or WASI on small or unusual hardware, or that want to embed an interpreter as a library. Prospective users should know it is in a minimal maintenance phase: the maintainer states that new feature development has stopped, that incoming pull requests will still be reviewed and merged, and that contributions matter more than before, so anyone needing new proposals implemented on a schedule should not depend on it. Typed function references is only partial, and the project publishes benchmarks with the caveat that your mileage may vary.

project readme (upstream, from github) β€” read inline

[!NOTE] I regret to inform the community that since my house was destroyed by russians who invaded my country, Wasm3 will enter a minimal maintenance phase. At this time, I am unable to continue the development of new features. However, I am committed to keeping the project alive and will actively review and merge incoming Pull Requests. I deeply appreciate your understanding and support during this difficult period. Your contributions to Wasm3 are now more valuable than ever.

Wasm3

StandWithUkraine GitHub issues Build status Fuzzing Status GitHub license

A fast WebAssembly interpreter and the most universal WASM runtime.
See CoreMark 1.0 and independent benchmarks. Your mileage may vary.

X (formerly Twitter) Follow Discord

Installation

Please follow the installation instructions.

Wasm3 can also be used as a library for:

Python3 β”‚ Rust β”‚ C/C++ β”‚ D β”‚ GoLang β”‚ Zig β”‚ Perl
Swift β”‚ .Net β”‚ Nim β”‚ Arduino, PlatformIO, Particle β”‚ QuickJS

Status

wasm3 passes the WebAssembly spec testsuite and is able to run many WASI apps.

Minimum useful system requirements: ~64Kb for code and ~10Kb RAM

wasm3 runs on a wide range of architectures (x86 x86_64 ARM RISC-V PowerPC MIPS Xtensa ARC32 ...) and platforms:

  • Linux,

Windows, OS X, FreeBSD, Android, iOS

  • OpenWrt, Yocto, Buildroot (routers, modems, etc.)
  • Raspberry Pi, Orange Pi and other SBCs
  • MCUs: Arduino, ESP8266, ESP32, Particle, ... see full list
  • Browsers. Wasm3 can be compiled to WebAssembly itself!
  • wasm3 can execute wasm3 (self-hosting)

Features

Status           Features
⭐ Ready [Lime1][WasmLime1]: Import/Export of Mutable Globals Non-trapping float-to-int conversions Sign-extension operators Multi-value Extended constant expressions bulk-memory-opt call-indirect-overlong
⭐ Ready [Proposals][WasmStatus]: Bulk memory operations Exception handling Multiple memories Memory64+Table64 Reference types Typed function references (partial) Tail call Custom page size Compact Import section Deterministic profile
✨ Ready Extra: Structured execution tracing Big-Endian support Gas metering Wasm and WASI self-hosting Guard-page memories `Linear memory limit (](https://wasmcloud.dev)

Further Resources

Demos
[Installation instructions](./docs/Installat

readme truncated β€” read the full docs on github

Frequently asked questions

Is wasm3 free to use?

wasm3 is open source under the MIT licence. There is no licence fee and no seat count β€” you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does wasm3 do?

πŸš€ A fast WebAssembly interpreter and the most universal WASM runtime

What is wasm3 written in?

wasm3 is primarily written in C. Its source is publicly available at https://github.com/wasm3/wasm3, and it has 8,028 GitHub stars.