Skip to main content

WebAssembly (Wasm)

Bacalhau supports running programs compiled to WebAssembly (Wasm). This guide explains how to run Wasm programs on Bacalhau.

Prerequisites​

  1. Install the Bacalhau client
  2. A Wasm program compiled for WebAssembly System Interface (WASI) Snapshot 1

Limitations​

  • Supports only WASI Snapshot 1 compatible programs
  • No multi-threading (WASI doesn't expose interfaces for it)

Running a Wasm Program​

Basic Usage​

Run a local Wasm file:

bacalhau wasm run program.wasm

Run a program with arguments:

bacalhau wasm run program.wasm arg1 arg2

Run with environment variables:

bacalhau wasm run program.wasm -e VAR1=value1 -e VAR2=value2

Working with Input Data​

Provide input data from a URL:

bacalhau wasm run program.wasm --input https://example.com/data.txt:/inputs/data.txt

Provide input data from a local file:

bacalhau wasm run program.wasm --input ./local-file.txt:/inputs/file.txt

Working with Output Data​

Wasm programs can write output to:

  • Standard output (stdout)
  • The filesystem at /outputs (default output location)
  • Custom output locations specified with the -o flag
bacalhau wasm run program.wasm -o results:/custom/path

Creating Wasm Programs for Bacalhau​

1. Use Filesystem Operations Instead of Network Calls​

Wasm programs on Bacalhau can't make network requests. Instead:

  • Read input data from the filesystem (typically /inputs)
  • Write output data to the filesystem (typically /outputs)

2. Compile Your Program for WASI​

You need to compile your program to be WASI-compatible. For example, with Rust:

rustup target add wasm32-wasi
cargo build --target wasm32-wasi --release

The resulting Wasm file can be run on Bacalhau.

Viewing Job Results​

Check job status:

bacalhau job list --id-filter JOB_ID

View job output:

bacalhau job logs JOB_ID

See job details:

bacalhau job describe JOB_ID