mil-tokyo/webdnn
mil-tokyo/webdnn has 2,003 GitHub stars and 148 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 00:39 UTC. Last push 2026-10-16.
The Fastest DNN Running Framework on Web Browser
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalWebDNN
WebDNN version 2 runs neural network inference directly in the web browser. The major difference from WebDNN 1.x is that WebDNN 2.x accepts ONNX models as input, allowing an ONNX model to be loaded straight into the browser without Python preprocessing. Offline model optimization is also available.
Supported backends (acceleration technologies)
- WebGPU — current WGSL-based implementation. Works on modern Chrome / Edge (and on Safari / Firefox where WebGPU is enabled).
- WebGL — uses WebGL2 when available, with a WebGL1 fallback.
- WebAssembly — requires an emscripten build of the kernels. See docs/emscripten-setup.md.
Environment
- Node.js 20+ (see
.nvmrc) - Python 3.10+ via uv — only needed for model optimization and generating test fixtures
- emscripten 3.1+ — only needed to build the WebAssembly backend
Setup
npm install
uv sync # only if you use the Python graph transpiler / optimizer
Build
npm run build:all
Build outputs (in dist/):
dist/webdnn.js— UMD bundle (globalWebDNN) that loads unoptimized ONNX modelsdist/webdnn-core.js— loads ONNX models optimized offline by WebDNNdist/op-*.js— operator bundles, loaded dynamically at runtimedist/types/— TypeScript type declarations
build:all runs WGSL shader generation (shader:webgpu) and operator-entry generation (makeShaderList, requires Python 3) before the Vite build. The WebAssembly backend is not built by build:all; building it requires emscripten (see docs/emscripten-setup.md).
Basic usage
Load dist/webdnn.js with a <script> tag to add a global WebDNN object. Assuming the ONNX model model_directory/model.onnx exists, run it with an input tensor of shape [1, 2]:
const runner = await WebDNN.load("model_directory/");
const inputDataArray = new Float32Array([5.1, -2.3]);
const inputTensor = new WebDNN.CPUTensor([1, 2], "float32", inputDataArray);
const [outputTensor] = await runner.run([inputTensor]);
console.log(outputTensor.data); // Float32Array
See example/minimum for a complete minimal working example.
Test
See docs/testing.md for the full testing guide.
npm test # unit tests (vitest, no GPU required)
npm run fixtures # generate ONNX test fixtures (uv, Python)
npm run test:e2e # Playwright E2E (CPU / WebGPU / WebGL, automated)
npm run server # static server for the manual browser runner
For the manual browser runner, open http://localhost:8080/test/model_test/runner/standard.html, check the backend you want to test, and click the Test button.
npm run fixtures generates the ONNX models and input/output tensors used by the
tests. (The legacy test/model_test/make_models.py, which depends on PyTorch,
remains only for large-model generation and is not part of the standard flow.)
Explore related projects
freeCodeCamp/freeCodeCamp
freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.
458,676 starsdonnemartin/system-design-primer
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
377,155 starsreact/react
The library for web and native user interfaces.
252,277 starsvuejs/vue
This is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core
212,625 stars