v150 · web api · shipped
Web Speech API: On-Device Recognition Quality
A new quality member of the SpeechRecognitionOptions dictionary that lets developers request the semantic capability of an on-device speech model — command, dictation, or conversation — when checking availability or installing language packs. Ships in Chrome 150 on desktop.
at a glance
| Shipped in | Chrome 150 (desktop) |
|---|---|
| Status | Enabled by default (Finch: OnDeviceWebSpeechQuality) |
| Depends on | On-device speech recognition (Chrome 139+); processLocally: true |
| ChromeStatus | 5136859632107520 — 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.
the quality option
syntax
const availability = await SpeechRecognition.available({
langs: ["en-US"],
processLocally: true,
quality: "command", // "command" | "dictation" | "conversation"
});
quality belongs to the SpeechRecognitionOptions argument of SpeechRecognition.available() and SpeechRecognition.install(), not to a SpeechRecognition instance. The dictionary defaults to "command" when quality is omitted. Source: Web Speech API, SpeechRecognitionOptions dictionary.
quality values
| Value | Use case | Model requirements |
|---|---|---|
"command" | Short spoken commands — navigation, media controls, voice buttons | Lightest; fast, low latency |
"dictation" | Free-form text entry — composing messages, notes, form fields | Medium; handles full vocabulary |
"conversation" | Extended back-and-forth dialogue — meeting transcription, interviews | Heaviest; context-aware, most accurate |
Set processLocally: true in an availability check to require on-device recognition. quality sets the requested model capability floor; it does not configure the recognition instance. Source: Web Speech API, available(options).
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({
langs: ["en-US"],
processLocally: true,
quality: "dictation",
});
if (availability === "downloadable") {
// Offer an install control; only after user consent, call:
// await SpeechRecognition.install({ langs: ["en-US"], quality: "dictation" });
// Recheck availability after installation.
} else if (availability === "available") {
// A local model matching the requested quality is ready.
}
The spec defines "unavailable", "downloadable", "downloading", and "available". Source: Web Speech API, AvailabilityStatus values.
example: falling back gracefully
const availability = await SpeechRecognition.available({
langs: ["en-US"], processLocally: true, quality: "dictation",
});
if (availability === "available") {
const recognition = new SpeechRecognition();
recognition.lang = "en-US";
recognition.processLocally = true;
recognition.onresult = (event) => {
console.log(event.results[0][0].transcript);
};
recognition.start();
} else {
// Explain unavailable/downloading/downloadable status; ask before installing
// a language pack or using a remote speech service.
console.log(`Local dictation: ${availability}`);
}
browser support
| Chrome (desktop) | 150 (enabled by default) |
|---|---|
| Chrome (Android) | Not yet |
| Firefox | No signal |
| Safari | No signal |