Java (or any JVM) language binding for Wasmtime.
Some basic examples are working, but many API implementations are work in progress.
Gradle example:
repositories {
mavenCentral()
}
dependencies {
implementation "io.github.kawamuray.wasmtime:wasmtime-java:$LATEST_VERSION"
}
An artifact (JAR) of wasmtime-java
ships along with prebuilt JNI libraries for some major platforms, so just adding the above dependency provides you a self-contained wasmtime
runtime on supported platforms:
OS | Arch |
---|---|
Linux (ELF) | x86_64 |
Mac OS | x86_64 |
Mac OS | aarch64 |
Windows | x86_64 |
See examples for the full example.
public class HelloWasm {
public static void main(String[] args) {
try (Store<Void> store = Store.withoutData();
Engine engine = store.engine();
Module module = Module.fromFile(engine, "./hello.wat");
Func helloFunc = WasmFunctions.wrap(store, () -> {
System.err.println(">>> Calling back...");
System.err.println(">>> Hello World!");
})) {
Collection<Extern> imports = Arrays.asList(Extern.fromFunc(helloFunc));
try (Instance instance = new Instance(store, module, imports)) {
try (Func f = instance.getFunc("run").get()) {
WasmFunctions.Consumer0 fn = WasmFunctions.consumer(f);
fn.accept();
}
}
}
}
}
Run example:
$ ./gradlew -Pmain=examples.HelloWorld examples:run
$ ./gradlew build
Apache License Version 2.0