Skip to content

Latest commit

 

History

History
107 lines (78 loc) · 2.22 KB

File metadata and controls

107 lines (78 loc) · 2.22 KB

hyperlight-wasm http example

This is a minimal example of a hyperlight-wasm host application. It implements just enough of the wasi:http api to run the sample_wasi_http_rust server.

Prerequisites

  1. Rust, including the x86_64-unknown-none target (which may be installed via e.g. rustup target add x86_64-unknown-none)
  2. clang
  3. just (optional, but recommended)

If you want to follow the manual build instructions, you will also need:

  1. wasm-tools
  2. cargo-component
  3. hyperlight-wasm-aot

Simple setup

Building

# Install JS dependencies
npm install
just build

Running

# Run Rust
just run-rust

# Run JS
just run-js

From another terminal, you can then test the server:

curl http://localhost:3000/
curl -w'\n' -d "hola mundo" http://127.0.0.1:3000/echo
curl -I -H "x-language: spanish" http://127.0.0.1:3000/echo-headers
# get the content of .gitignore from github.com/jprendes/hyperlight-wasm-http-example
curl -w'\n' http://127.0.0.1:3000/proxy

Manual setup

Building

Compile the WIT and set the environment variables used when building (both the host and the guest):

wasm-tools component wit hyperlight.wit -w -o hyperlight-world.wasm

Build Rust:

cargo build

Build JS:

npm run build

Running

Build the guest component:

cargo component build --release \
    --manifest-path guest_rust/Cargo.toml \
    --target-dir target

AOT compile it:

cargo install hyperlight-wasm-aot
hyperlight-wasm-aot compile --component \
    target/wasm32-wasip1/release/sample_wasi_http_rust.wasm \
    out/sample_wasi_http_rust.aot

You can then run the server:

Rust:

cargo run -- out/sample_wasi_http_rust.aot

JS:

cargo run -- out/sample_wasi_http_js.aot

Try it yourself!

GitHub codespaces