https://github.com/bjorn3/browser_wasi_shim
A WASI shim for in the browser
https://github.com/bjorn3/browser_wasi_shim
Last synced: 4 days ago
JSON representation
A WASI shim for in the browser
- Host: GitHub
- URL: https://github.com/bjorn3/browser_wasi_shim
- Owner: bjorn3
- License: apache-2.0
- Created: 2021-09-05T15:17:10.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-02-13T16:08:51.000Z (3 months ago)
- Last Synced: 2025-05-12T05:11:45.854Z (7 days ago)
- Language: TypeScript
- Size: 1.01 MB
- Stars: 343
- Watchers: 12
- Forks: 44
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# A pure javascript shim for WASI
Implementation status: A subset of wasi_snapshot_preview1 is implemented. The rest either throws an exception, returns an error or is incorrectly implemented.
## Usage
```
npm install @bjorn3/browser_wasi_shim --save
``````javascript
import { WASI, File, OpenFile, ConsoleStdout, PreopenDirectory } from "@bjorn3/browser_wasi_shim";let args = ["bin", "arg1", "arg2"];
let env = ["FOO=bar"];
let fds = [
new OpenFile(new File([])), // stdin
ConsoleStdout.lineBuffered(msg => console.log(`[WASI stdout] ${msg}`)),
ConsoleStdout.lineBuffered(msg => console.warn(`[WASI stderr] ${msg}`)),
new PreopenDirectory(".", [
["example.c", new File(new TextEncoder("utf-8").encode(`#include "a"`))],
["hello.rs", new File(new TextEncoder("utf-8").encode(`fn main() { println!("Hello World!"); }`))],
]),
];
let wasi = new WASI(args, env, fds);let wasm = await WebAssembly.compileStreaming(fetch("bin.wasm"));
let inst = await WebAssembly.instantiate(wasm, {
"wasi_snapshot_preview1": wasi.wasiImport,
});
wasi.start(inst);
```## Building
```
$ npm install
$ npm run build
```## Running the demo
The demo requires the wasm rustc artifacts and the xterm js package. To get them run:
```
$ git submodule update --init
$ cd examples && npm install
```Run the demo with a static web server from the root of this project:
```
$ npx http-server
```And visit [http://127.0.0.1:8080/examples/rustc.html]() in your browser.
A more complete demo by [@LyonSyonII](https://github.com/LyonSyonII) which runs
miri inside the browser can be found at . (source
at )## Testing
```
$ python3 -m pip install -r ./test/wasi-testsuite/test-runner/requirements.txt
$ npm test
```## License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or
http://opensource.org/licenses/MIT)at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you shall be dual licensed as above, without any
additional terms or conditions.