Skip to Content
Features

Wasmer Runtime Features

Wasmer is powered by WebAssembly .

Wasmer runs WebAssembly through a backend, and ships several depending on your needs. They fall into two groups by how they execute your code:

  • Compiler backends: Wasmer compiles your WebAssembly to native machine code itself, then runs it directly on the CPU:

    • Singlepass: very fast compilation, ideal for blockchain smart contracts 
    • Cranelift: moderate compilation speed, good runtime performance
    • LLVM: slow compilation, excellent runtime performance
  • Engine backends: Wasmer doesn’t compile anything itself; it hands your WebAssembly to an existing engine to run. This is what lets Wasmer work where generating native machine code isn’t allowed, such as on iOS or inside a web page:

    • V8: delegates to Google’s V8 engine. ideal for iOS, Android, and development
    • Browser: delegates to the browser’s own WebAssembly engine, so Wasmer can run client-side inside a web page

Why run Wasmer in a browser when browsers already run WebAssembly? Because the browser’s built-in WebAssembly API only runs bare modules. It provides no files, stdin/stdout, arguments, or environment. The Browser backend lets Wasmer supply that missing operating-system layer (WASIX) in the page, so a full program (for example, a CLI tool, an interpreter like Python) can run entirely client-side.

Each of these backends supports different features and has varying support for operating systems and chipsets.

WebAssembly Features

  • Bulk-memory operations: e.g. instructions with behavior similar to C’s memmove and memset in WebAssembly;
  • Multi-value return: return multiple values from functions making data transfer between host and guest simpler;
  • Import & export of mutable globals: adds ability to import and export mutable globals;
  • Non-trapping float-to-int conversions: adds a convention for saturating operations, to avoid introducing trapping;
  • Sign-extension operations: adds five new integer instructions for sign-extending 8-bit, 16-bit, and 32-bit values;
  • Reference types: easier and more efficient interop with host environment;
  • SIMD: Single Instruction, Multiple data: do heavy number crunching more quickly and/or with lower power usage.
  • Threads: adds a new shared linear memory type and some new operations for atomic memory access;

Wasmer features

  • Caching: compiled WebAssembly modules can be reused so subsequent runs of a Wasm file will have very little start up time;
  • Metering: computation time and other resources can be monitored and limits set to control how the Wasm code runs. This is also known as “gas metering”;
  • Profiling: generate profiling data for WebAssembly code to analyze performance using tools like Linux perf;

Support of features by backend

WebAssembly features:

  • ✅ Supported
  • 🔄 In the works
  • ❌ Not yet supported (please ping us if you need this feature!)
SinglepassCraneliftLLVM
Bulk memory operations
Multi-value return11
Import & export of mutable globals
Non-trapping float-to-int conversions
Sign-extension operations
Wide Arithmetic
Reference types🔄
SIMD
Relaxed SIMD
Threads
Exceptions🔄
Async Functions
Extended Constant Expressions
Tail Call

Wasmer features:

FeaturesSinglepassCraneliftLLVM
Caching
Metering
Profiling

Backend support by Operating System

LinuxmacOSWindowsiOSAndroidBrowser
Cranelift
LLVM
Singlepass
V8
Browser

Backend support by Instruction Set Architecture (ISA)

x86_64arm64riscv64gcriscv32gcloongarch64
Cranelift
LLVM
Singlepass
V8
Browser

Footnotes

  1. Known multi-value limitations  2

Last updated on