Bump minimum Node version - Update engines fields in package.json - Add .nvmrc file - Refer to it in README
This repository contains interesting AI workloads running on the Web, using WebAssembly (Wasm), WebGPU, and in future WebNN or other underlying technologies. Those workloads help us to evaluate the performance of the implementation, e.g., in browsers or JavaScript and WebAssembly runtimes.
The runner, which allows to select workloads, including ones from external sources, and collects and displays metrics, is based on the Speedometer runner. See the Speedometer repo for a more detailed explanation, e.g., in which phases workloads are run and measured.
.nvmrc for the recommended version, or run nvm use), and Git LFS (only needed to download the experimental Gemma model). Run npm install to install the dependencies of the runner.npm run build in the root directory. This will install dependencies and build all workloads in resources/. Alternatively, you can also manually run npm install and npm run build inside each resources/<workload-group>/ sub-directory to produce output in resources/<workload-group>/dist/.npm run dev in the root directory.resources/transformers-js/ and resources/litert-js.resources/shared/, which is depended-upon as a local package.resources/default-tests.mjs.npm install and npm run build inside resources/<workload-group>/ to produce output in dist/.npm run dev in the root directory to start the server.http://localhost:8080/resources/<workload-group>/dist/<workload>.html (e.g. http://localhost:8080/resources/transformers-js/dist/feature-extraction-cpu.html) to run the workload automatically.The runner supports a number of options to control how the benchmarks are run. They can be set via URL parameters or more conveniently via the developer menu.
To enable the developer menu, append ?developerMode to the URL, e.g. http://localhost:8080/?developerMode. Then click on the red box in the top left corner to show this:
You can select workloads by tag (e.g. all #wasm or #webgpu workloads) and change parameters of the runner in it. Changing them in the developer menu should be immediately reflected in the URL, producing e.g. http://localhost:8080/?iterationCount=1&tags=wasm
A full list of the runner options can be found in params.mjs.
iterationCount URL parameter or Iterations in the developer menu).subIterationCount URL parameter or Sub-iterations in the developer menu).The benchmark UI displays results at three levels of detail:
sub-iter-1 from Iteration 0 to Iteration 4).Each individual sub-iteration represents a single inference run (a single call to the model's execution function using the same input data).
Here are the versions of key libraries in different branches:
main (v0.2.0)
4.0.12.4.0version-0.1.0
3.7.52.4.0version-0.0.1
3.7.50.2.1See the CONTRIBUTING file for how to help out.
Every file containing source code must include copyright and license information. This includes any JS/CSS files that you might be serving out to browsers. (This is to help well-intentioned people avoid accidental copying that doesn't comply with the license.)
BSD 2-clause header:
Copyright 2025 Google LLC Use of this source code is governed by a BSD-style license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd
Workloads from third party projects or files from the original Speedometer runner may have different, but compatible licenses (e.g., Apache 2). The respective subdirectories should have the appropriate LICENSE file.