|  | # WebGPU Sample | 
|  |  | 
|  | This experimental sample demonstrates one way to target the web platform with | 
|  | IREE, using WebGPU. The output artifact is a web page that loads separately | 
|  | provided IREE `.vmfb` (compiled ML model) files and allows for calling | 
|  | functions on them. | 
|  |  | 
|  | ## Quickstart | 
|  |  | 
|  | **Note**: you will need a WebGPU-compatible browser. Chrome Canary with the | 
|  | `#enable-unsafe-webgpu` flag is a good choice (you may need the flag or an | 
|  | origin trial token for `localhost`). | 
|  |  | 
|  | 1. Install IREE's host tools (e.g. by building the `install` target with CMake) | 
|  | 2. Install the Emscripten SDK by | 
|  | [following these directions](https://emscripten.org/docs/getting_started/downloads.html) | 
|  | 3. Initialize your Emscripten environment (e.g. run `emsdk_env.bat`) | 
|  | 4. From this directory, run `bash ./build_sample.sh [path to install] && bash ./serve_sample.sh` | 
|  | 5. Open the localhost address linked in the script output | 
|  |  | 
|  | To rebuild most parts of the sample (C runtime, sample HTML, CMake config, | 
|  | etc.), just `control + C` to stop the local webserver and rerun the script. | 
|  |  | 
|  | ## How it works | 
|  |  | 
|  | [Emscripten](https://emscripten.org/) is used (via the `emcmake` CMake wrapper) | 
|  | to compile the runtime into WebAssembly and JavaScript files. | 
|  |  | 
|  | Any supported IREE program, such as | 
|  | [simple_abs.mlir](../../../samples/models/simple_abs.mlir), is compiled using | 
|  | the WebGPU compiler target. This generates WGSL shader code and IREE VM | 
|  | bytecode, which the IREE runtime is able to load and run using the browser's | 
|  | WebGPU APIs. | 
|  |  | 
|  | ### Asynchronous API | 
|  |  | 
|  | [`iree_api_webgpu.js`](./iree_api_webgpu.js) | 
|  |  | 
|  | * exposes a Promise-based API to the hosting application in | 
|  | [`index.html`](./index.html) | 
|  | * preinitializes a WebGPU adapter and device | 
|  | * includes Emscripten's JS code and instantiates the WebAssembly module |