On-device · runs offline
Your face never leaves this tab.
Face detection and passive liveness run entirely in your browser — no upload, no server round-trip — powered by a pure-Rust engine compiled to WebAssembly. Start the demo and watch the network counter stay at zero.
Face detection + passive liveness, on your device
Press start to load the engine once (~5.6 MB) and turn on your camera. Nothing is uploaded.
Network requests since the camera turned on
0
Don't trust us — open your browser's Network tab and watch. Nothing is uploaded. You can even turn off Wi-Fi and the detection keeps running.
Passive liveness works best with your head and shoulders in frame — sit back, then hold a photo of a face to the camera and watch it flag as a spoof. 1:1 face match uses the same Rust → WebAssembly architecture and is coming next — it is not part of this demo.
YuNet detection (MIT) · MiniFASNet passive liveness (Apache-2.0) · tract-onnx · wasm SIMD · models embedded in the binary
How it works
Nothing to upload, because there is no upload.
Three pieces, all running on your device. Detection and liveness are the whole pipeline you see here — no network calls in the loop.
Detection runs on your CPU
A YuNet detector (MIT-licensed) compiled from Rust to WebAssembly finds the face and five landmarks in each frame — drawn live on the canvas. No frame is ever sent anywhere.
Passive liveness, single frame
A MiniFASNet anti-spoof ensemble (Apache-2.0) scores each frame genuine-or-spoof — no blink dance, no video upload. Hold up a photo of a photo and watch it flag.
Models embedded in the binary
Both models are compiled into the wasm with include_bytes!, so after one ~5.6 MB download there is nothing left to fetch. Turn off Wi-Fi and it keeps working.
Honest scope: this demo does face detection and passive liveness on-device. It is not 1:1 face match yet. That step is the same 112×112 network in the same Rust → WebAssembly engine — the runtime is proven; shipping it is a model-licensing decision, not a technical one. We will not imply full KYC matching runs offline until it does.
Why on-device matters
Privacy you can prove, not just promise.
When the biometric never crosses the network, the strongest claims about privacy and data residency become things you can demonstrate in a browser tab.
The biometric is never transmitted
Under India's DPDP Act you are the data fiduciary for every face you collect. When detection and liveness happen on the device, the raw biometric simply never crosses the network — the smallest possible attack surface and the strongest possible privacy story.
Data residency by construction
There is no server round-trip to region-lock, no upload to log or retain, and nothing for a subprocessor to hold. The computation is where the person is. That is data residency you can demonstrate, not just assert.
A pure-Rust engine, compiled to WebAssembly
The same engine that powers the cloud API is pure Rust with tract-onnx inference — no native onnxruntime — so it compiles straight to WebAssembly and runs in the browser unchanged. That is the moat: one codebase, server or edge.
The same engine, on the server or at the edge.
Call the cloud API for full 1:1 face match, liveness and the identity suite today, or read how the pure-Rust engine self-hosts as one binary. The edge is where it goes next.
1,000 free credits at signup · API key is shown once at signup.