| `--enable_wasm_threads` | build with multi-thread support |
| `--enable_wasm_simd` | build with SIMD support |
To get all build artifacts of ONNX Runtime WebAssembly, it needs 4 times of build with the combinations of ON/OFF of the 2 flags. A full list of build artifacts are as below:
| file name | `--enable_wasm_threads` | `--enable_wasm_simd` |
ONNX Runtime WebAssembly can be built with flag `--minimal_build`. This will generate smaller artifacts and also have a less runtime memory usage. An ORT format model is required. A detailed instruction will come soon. See also [ORT format Conversion](../reference/ort-model-format.md).
> A: unittest requires C++ exceptions to work properly. However, for performance concern, we disabled exception catching in emscripten. So please specify `--skip_tests` in Release build.
Q: unittest fails on Debug build with debug info.
> A: building with debug info will generate very huge artifacts (>1GB for unittest) and failed to load in Node.js. So please specify `--skip_tests` in build with debug info.
## Build onnxruntime-web (NPM package)
### Prerequisites
- [Install](https://nodejs.org/) Node.js (14.0+)
- (Optional) Use nvm ([Windows](https://github.com/coreybutler/nvm-windows)/[Mac/Linux](https://github.com/creationix/nvm)) to install Node.js
- Chrome or Edge browser for running tests.
### Build Instructions
1. Install NPM packages
1. in `<ORT_ROOT>/js/`, run `npm ci`.
2. in `<ORT_ROOT>/js/common/`, run `npm ci`.
3. in `<ORT_ROOT>/js/web/`, run `npm ci`.
2. Prepare ONNX Runtime WebAssembly artifacts.
You can either use the prebuilt artifacts or build it by yourself.
- Setup by script.
In `<ORT_ROOT>/js/web/`, run `npm run pull:wasm` to pull WebAssembly artifacts for latest master branch from CI pipeline.
- Download artifacts from pipeline manually.
you can download prebuilt WebAssembly artifacts from [Windows WebAssembly CI Pipeline](https://dev.azure.com/onnxruntime/onnxruntime/_build?definitionId=161&_a=summary). Select a build, download artifact "Release_wasm" and unzip. See instructions below to put files into destination folders.
- Build WebAssembly artifacts.
1. Build ONNX Runtime WebAssembly
Follow [instructions above](#build-onnx-runtime-for-webassembly) for building ONNX Runtime WebAssembly.
2. Copy following files from build output folder to `<ORT_ROOT>/js/web/dist/` (create the folder if it does not exist):
* ort-wasm.wasm
* ort-wasm-threaded.wasm (build with flag '--enable_wasm_threads')
* ort-wasm-simd.wasm (build with flag '--enable_wasm_simd')
* ort-wasm-simd-threaded.wasm (build with flags '--enable_wasm_threads --enable_wasm_simd')
3. Copy following files from build output folder to `<ORT_ROOT>/js/web/lib/wasm/binding/`:
* ort-wasm.js
* ort-wasm-threaded.js (build with flag '--enable_wasm_threads')
* ort-wasm-threaded.worker.js (build with flag '--enable_wasm_threads')
3. Use following command in folder `<ORT_ROOT>/js/web` to build: