Home

Awesome

wasmer-zig-api

Zig bindings for the Wasmer WebAssembly runtime.

This module is based on the zigwasm/wasmer-zig fork. The old API does not work with newer versions of zig, and the main goal of this project is to continue to support the module for newer versions of zig.

All WASI APIs are also implemented.

All tests from the "wasmer" lib C repository are also reimplemented on zig. You can learn more about the API of this module through rich examples.

The current module works with Zig 0.14.0+.

Wasmer C API test examples [WIP]

Running tests and examples

The WASMER_DIR environment variable is used to determine the presence and location of the Wasmer library. Ensure this variable is set correctly to avoid issues with library detection.

zig build test
zig build run -Dexamples=true

Using it

In your zig project folder (where build.zig is located), run:

zig fetch --save "git+https://github.com/Afirium/wasmer-zig-api#v0.2.0"

Then, in your build.zig's build function, add the following before b.installArtifact(exe):

    const wasmerZigAPI= b.dependency("wasmer_zig_api", .{
        .target = target,
        .optimize = optimize,
    });
    exe.root_module.addImport("wasmer", wasmerZigAPI.module("wasmer"));
    exe.linkLibC();
    exe.addLibraryPath(.{ .cwd_relative = "/home/path_to_your_wasmer/.wasmer/lib" });
    exe.linkSystemLibrary("wasmer");