← Chrome 150 reference

v150 · web api · shipped

Web Speech API: On-Device Recognition Quality

A new quality property on SpeechRecognitionOptions that lets developers declare the semantic complexity of their use case — command, dictation, or conversation — so the browser can match the on-device speech model to the task and report whether a model of sufficient quality is available. Ships in Chrome 150 on desktop.

at a glance

Shipped inChrome 150 (desktop)
StatusEnabled by default (Finch: OnDeviceWebSpeechQuality)
Depends onOn-device speech recognition (Chrome 139+); processLocally: true
ChromeStatus5136859632107520 — Web Speech API: On-Device Recognition Quality

context: on-device speech in Chrome

Chrome 139 shipped on-device speech recognition for desktop via the processLocally: true option on SpeechRecognition. This ensures audio and transcripts never leave the user's device. On-device models range widely in capability — a small command model can recognise "play", "stop", "next" reliably but may fail on free-form dictation; a large model handles meetings and conversations but requires significant RAM and a capable CPU.

Before Chrome 150, there was no way for a site to express which tier of model it needs, or to learn whether a suitable model is installed. A site requesting transcription for meeting notes would silently receive lower-quality results if only a command model was available. The quality property solves this.

Source: chromestatus.com — Web Speech API: On-Device Recognition Quality.

the quality property

syntax

const recognition = new SpeechRecognition();
recognition.processLocally = true;     // required for quality to apply
recognition.quality = "command";       // "command" | "dictation" | "conversation"

quality values

ValueUse caseModel requirements
"command"Short spoken commands — navigation, media controls, voice buttonsLightest; fast, low latency
"dictation"Free-form text entry — composing messages, notes, form fieldsMedium; handles full vocabulary
"conversation"Extended back-and-forth dialogue — meeting transcription, interviewsHeaviest; context-aware, most accurate

When processLocally is false or unset, the quality property is ignored — quality selection for cloud models is handled by the service.

Source: Intent to Prototype thread, blink-dev, January 2026.

checking model availability

The static SpeechRecognition.available() method (shipping Chrome 150) accepts quality options so sites can confirm a suitable model is installed before starting recognition:

const availability = await SpeechRecognition.available({
  lang: "en-US",
  processLocally: true,
  quality: "dictation",
});

if (availability === "no") {
  // No local dictation-quality model. Offer to install or fall back.
  await SpeechRecognition.install({ lang: "en-US", quality: "dictation" });
} else if (availability === "available") {
  // Model ready — start recognition.
  recognition.start();
}

The returned value is one of "readily", "available" (download needed), or "no" (device cannot support this quality).

example: falling back gracefully

const recognition = new SpeechRecognition();
recognition.lang = "en-US";
recognition.processLocally = true;
recognition.quality = "dictation";

const avail = await SpeechRecognition.available({
  lang: "en-US",
  processLocally: true,
  quality: "dictation",
});

if (avail === "no") {
  // Device cannot support dictation-quality locally.
  // Fall back to cloud or command-quality model.
  recognition.processLocally = false;
  recognition.quality = "command";
}

recognition.onresult = (e) => {
  textarea.value += e.results[0][0].transcript;
};
recognition.start();

browser support

Chrome (desktop)150 (enabled by default)
Chrome (Android)Not yet
FirefoxNo signal
SafariNo signal
Source: chromestatus.com browser positions, May 2026.

see also