v150 · Web APIs · demo

Privacy Architecture Comparison

Trace exactly what happens to your audio in the classic cloud path versus the new on-device path — and what each means for user privacy and application design.

live speech privacy probe

Check the Web Speech surface in this document, then highlight the architecture that this browser can use for the selected language pack.

Probe has not run yet.

Recognition constructor
Not checked
Local processing flag
Not checked
Language pack APIs
Not checked
Selected pack status
Not checked
Permissions Policy
Not checked
Network fallback
Not checked
Run the probe to see constructor support, local-processing controls, language-pack status, and policy fallback notes.
Classic path — Cloud recognition
🎤
Microphone captures audio
Raw PCM audio stream starts in browser memory.
Audio encoded & sent to Google servers
The audio is compressed and transmitted over HTTPS to Google's speech recognition infrastructure.
data leaves device
🏢
Server-side transcription
Google's ASR model processes the audio. Transcription accuracy is typically higher but involves Google's infrastructure.
network required
📝
Transcript returned to browser
The text result is sent back. Round-trip latency adds 200–800ms for typical connections.
Chrome 150+ — On-device recognition
🎤
Microphone captures audio
Raw PCM audio stream starts in browser memory — same as before.
🔒
Local ASR model processes audio
The browser's built-in on-device model transcribes audio entirely in the browser process. Audio never leaves the device.
stays on device
Transcript available immediately
No network round-trip. Interim results are available faster for short utterances.
no network needed
📝
Same API result delivered
The SpeechRecognitionResult object looks identical to the cloud path. Set processLocally when the app requires local-only processing.
same interface

Feature comparison

Characteristic Cloud recognition On-device (Chrome 150+)
Audio leaves device? Yes — sent to Google No — stays local
Internet required? Yes No after the language pack is installed
Latency +200–800ms network RTT Lower for short phrases
Accuracy High (large cloud model) Good (compact on-device model)
Supported platforms All Chrome platforms Windows, macOS, Linux (Chrome 150)
Code change needed? Set processLocally and check the pack status
Works offline? No Yes, once the chosen pack is available
// The result API is identical in both modes
const Recognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new Recognition();
recognition.lang = 'en-US';
recognition.interimResults = true;

// Chrome 150+ can require local processing for privacy-sensitive flows.
if ('processLocally' in recognition) {
  recognition.processLocally = true;
}

const packStatus = await Recognition.available?.({
  langs: [recognition.lang],
  processLocally: true,
  quality: 'dictation',
});

if (packStatus === 'downloadable' || packStatus === 'downloading') {
  await Recognition.install?.({
    langs: [recognition.lang],
    processLocally: true,
    quality: 'dictation',
  });
}

recognition.onresult = event => {
  // Same result format regardless of cloud or on-device
  const text = event.results[event.results.length - 1][0].transcript;
  console.log(text);
};

recognition.start();

see also