Skip to content

module-federation/workers-wasi

 
 

Repository files navigation

Workers WASI

Work in progress

An experimental implementation of the WebAssembly System Interface designed to run on Cloudflare Workers

Usage

import { WASI } from '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 [email protected]:cloudflare/workers-wasi.git
cd ./workers-wasi
make -j test

Build with Docker

git clone --recursive [email protected]: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

Testing

We aim to be interchangeable with other WASI implementations. Integration tests are run locally using Miniflare against the following test suites:

Notes

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 ENOSYS

  • fd_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 of

  • clock_res_get
  • clock_time_get
  • fd_filestat_set_times
  • path_filestat_set_times

TODO (remove)

Misc TODO:

  • path_rename (update old path for existing open fds)
  • clean up tmp_alloc() - wrap all exports
  • fix preopens interface (use object), and update options docs
  • document difference between nodejs options and ours (streams/fs)
  • complete memfs.cc todos
  • fd_close (stdio)
  • fd_renumber (stdio)
  • fd_read/fd_write does not work with renumbering stdio
  • update file timestamps appropriately

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 48.1%
  • TypeScript 43.1%
  • Makefile 5.5%
  • JavaScript 1.8%
  • Other 1.5%