Wasmer logo

Build Status License Join the Wasmer Community Number of downloads from crates.io Read our API documentation

# Wasmer Interface Types Wasmer is a standalone JIT WebAssembly runtime, aiming to be fully compatible with WASI, Emscripten, Rust and Go. [Learn more](https://github.com/wasmerio/wasmer). This crate is an implementation of [the living WebAssembly Interface Types standard](https://github.com/WebAssembly/interface-types). ## Encoders and decoders The `wasmer-interface-types` crate comes with an encoder and a decoder for the WAT format, and the binary format, for the WebAssembly Interface Types. An encoder writes an AST into another format, like WAT or binary. A decoder reads an AST from another format, like WAT or binary. ## Instructions Very basically, WebAssembly Interface Types defines a [set of instructions](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/working-notes/Instructions.md), used by adapters to transform the data between WebAssembly core and the outside world ([learn mode](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.md)). Here is the instructions that are implemented by this crate: | Instruction | WAT encoder/decoder | Binary encoder/decoder | Interpreter | Comment | |-|-|-|-|-| | `arg.get` | ✅ | ✅ | ✅ | | | `call-core` | ✅ | ✅ | ✅ | | | `s8.from_i32` | ✅ | ✅ | ✅ | | | `s8.from_i64` | ✅ | ✅ | ✅ | | | `s16.from_i32` | ✅ | ✅ | ✅ | | | `s16.from_i64` | ✅ | ✅ | ✅ | | | `s32.from_i32` | ✅ | ✅ | ✅ | | | `s32.from_i64` | ✅ | ✅ | ✅ | | | `s64.from_i32` | ✅ | ✅ | ✅ | | | `s64.from_i64` | ✅ | ✅ | ✅ | | | `i32.from_s8` | ✅ | ✅ | ✅ | | | `i32.from_s16` | ✅ | ✅ | ✅ | | | `i32.from_s32` | ✅ | ✅ | ✅ | | | `i32.from_s64` | ✅ | ✅ | ✅ | | | `i64.from_s8` | ✅ | ✅ | ✅ | | | `i64.from_s16` | ✅ | ✅ | ✅ | | | `i64.from_s32` | ✅ | ✅ | ✅ | | | `i64.from_s64` | ✅ | ✅ | ✅ | | | `u8.from_i32` | ✅ | ✅ | ✅ | | | `u8.from_i64` | ✅ | ✅ | ✅ | | | `u16.from_i32` | ✅ | ✅ | ✅ | | | `u16.from_i64` | ✅ | ✅ | ✅ | | | `u32.from_i32` | ✅ | ✅ | ✅ | | | `u32.from_i64` | ✅ | ✅ | ✅ | | | `u64.from_i32` | ✅ | ✅ | ✅ | | | `u64.from_i64` | ✅ | ✅ | ✅ | | | `i32.from_u8` | ✅ | ✅ | ✅ | | | `i32.from_u16` | ✅ | ✅ | ✅ | | | `i32.from_u32` | ✅ | ✅ | ✅ | | | `i32.from_u64` | ✅ | ✅ | ✅ | | | `i64.from_u8` | ✅ | ✅ | ✅ | | | `i64.from_u16` | ✅ | ✅ | ✅ | | | `i64.from_u32` | ✅ | ✅ | ✅ | | | `i64.from_u64` | ✅ | ✅ | ✅ | | | `string.lift_memory` | ✅ | ✅ | ✅ | `#memidx` is not supported; `#encoding` is not supported but UTF-8 is assumed | | `string.lower_memory` | ✅ | ✅ | ✅ | `#memidx` is not supported; `#encoding` is not supported but UTF-8 is assumed | | `string.size` | ✅ | ✅ | ✅ | `#encoding` is not supported but UTF-8 is assumed | | `record.lift` | ✅ | ✅ | ✅ | | | `record.lower` | ✅ | ✅ | ✅ | | | `call-adapter` | ❌ | ❌ | ❌ | | | `defer-call-core` | ❌ | ❌ | ❌ | |