Packages
erlang_wasmtime
0.1.1
Wasmtime bindings for Erlang: run WebAssembly natively, call Erlang from the guest
Current section
Files
Jump to
Current section
Files
erlang_wasmtime
CHANGELOG.md
CHANGELOG.md
# Changelog
## 0.1.1 (2026-08-29)
- Wasmtime archives come from `wasmtime-runtime-<version>-r<revision>`
releases (`scripts/wasmtime-runtime.rev`); a build recipe change gets a
new revision instead of replacing pinned assets. Revision 2 rebuilds every
archive with the recipe this release ships: the FreeBSD full library now
has LTO and panic abort like Wasmtime's own releases.
- Hex package lists the C header, the precompiled shims and the examples;
ex_doc covers every guide, the design note, contributing and releasing.
## 0.1.0 (2026-08-29)
First release.
- Compile modules from binary or text, list imports and exports.
- Instantiate with Erlang-backed host functions, WASI preview 1 with explicit
capabilities, memory and table caps.
- Call exports with integer, float and v128 values; traps reported by kind.
- Interrupt a call with a timeout or from another process.
- Read and write linear memory from Erlang.
- One OS thread per instance; callers never block inside a NIF.
- Wasmtime 48.0.1, downloaded at build time and linked statically.
- Ownership: Erlang holds a handle, the instance is owned by the handle and by
its detached worker thread; messages carry an Erlang reference, never a
resource term. No destructor blocks a scheduler.
- A call `timeout` cancels the request by id; its result is dropped in the
NIF. A caller that dies has its running call interrupted and its queued
calls dropped. A host function calling the instance it runs on is refused
with `kind => reentrant`. Interrupting a guest parked in a host function
reports `kind => interrupt`.
- Values cross the boundary through the raw C API so `v128` works; the typed
path aborts the process on it.
- `serialize/1` and `deserialize/1` for Wasmtime's precompiled form.
- `read_memory/4`, `write_memory/4`, `memory_size/2` address an exported
memory by name.
- `host => Pid` routes host calls to a dedicated process; `handle_host_call/2`
serves them there.
- Worker threads get a 4 MB stack on every platform.
- `call_async/3` and `await/2,3`.
- Fuel metering: `compile/2` with `fuel => true`, `call/4` with `fuel`,
`fuel_remaining/1`; `validate/1`; `trace` frames on trap errors;
`global_get/2`, `global_set/3`, `table_size/2`, `table_grow/3`.
- Compile options: `opt_level` and `proposals` in `compile/2` and
`validate/2`, `deserialize/2` for matching options, `module_options/1`.
One engine per option set, capped at 32.
- WASI stdio without files: `stdin => {binary, Bytes}`, `stdout`/`stderr =>
capture` read back with `read_output/1` under an `output_limit`;
`args`/`env => inherit`.
- Streams: `send/2` and `close/1` feed a running guest; `stdin`, `stdout`,
`stderr => stream` and the `erlang.send`/`erlang.recv` imports; output
arrives as `{wasmtime_stream, Ref, Kind, Bytes}` in the `stream` process;
`inbox_limit`; `ref/1`. Runtime-only builds load the stdin forwarding
shim precompiled per platform from `priv/shims`.
- A `stream` stdout or stderr reports itself to the guest as a terminal
(`fd_fdstat_get` shadowed like `fd_read`), so C libraries line-buffer it:
scripts need no flush and CPython no `-u`.
- `examples/transform`: user-defined event transforms, one QuickJS worker
per script over streams, with reload, timeouts and memory limits.
- References across the boundary: `funcref`, `externref` and GC values as
`ref()` terms in calls, host functions, globals and tables; `null` and
`{i31, N}`; `externref/2`, `externref_data/1`, `call_ref/3,4`,
`ref_info/1`, `table_get/3`, `table_set/4`, `table_grow/4`,
`struct_get/2`, `struct_set/3`, `array_len/1`, `array_get/2`,
`array_set/3`, `gc/1`. A dropped ref is unrooted by its destructor.
- Runtime-only builds (`WASMTIME_RUNTIME_ONLY=1`): no compiler, a 4 MB shared
library; `features/0` reports the linked library's capabilities and
`compile/1`, `{wat, _}`, `serialize/1` and the `wasi` option answer
`kind => unavailable` where absent. Automatic source build of the C API
for platforms without a prebuilt archive. FreeBSD archives published from
this repository.