### *Work in progress*
npm install @cloudflare/workers-wasiAn experimental implementation of the WebAssembly System Interface designed to run on Cloudflare Workers
``typescript
import { WASI } from '@cloudflare/workers-wasi';
import mywasm from './mywasm.wasm';
const wasi = new WASI();
const instance = new WebAssembly.Instance(mywasm, {
wasi_snapshot_preview1: wasi.wasiImport
});
await wasi.start(instance);
``
Development
Install Rust and nvm then run`
nvm use --lts
Build and test
``
git clone --recursive git@github.com:cloudflare/workers-wasi.git
cd ./workers-wasi
make -j test
``
git clone --recursive git@github.com:cloudflare/workers-wasi.git
cd ./workers-wasi
cat ./Dockerfile | docker build -t workers-wasi-build -
docker run --rm -it -v $(pwd):/workers-wasi workers-wasi-build
We aim to be interchangeable with other WASI implementations. Integration tests are run locally using Miniflare against the following test suites:
- [x] (52/52) https://github.com/caspervonb/wasi-test-suite(28/42)
- [ ] https://github.com/bytecodealliance/wasmtime/tree/main/crates/test-programs/wasi-tests
An ephemeral filesystem implementation built on littlefs is included.
Both soft and hard links are not yet supported.
The following syscalls are not yet supported and return ENOSYSfd_readdir
- path_link
- path_readlink
- path_symlink
- poll_oneoff
- sock_recv
- sock_send
- sock_shutdown
-
Timestamps are captured using Date.now() which has unique behavior on the Workers platform for security reasons. This affects the implementation ofclock_res_get
- clock_time_get
- fd_filestat_set_times
- path_filestat_set_times`
-