Introduction

Firefox can now hear you without sending your voice anywhere. Firefox 160, released by Mozilla on November 10, 2026, ships the recognition half of the Web Speech API (SpeechRecognition) on desktop. It does on-device, real-time speech-to-text in 40 languages, and any website can call it from JavaScript. Firefox has no cloud recognition at all: the audio stays on your computer. Mozilla doesn't use its own model. Firefox downloads NVIDIA Parakeet and Nemotron 3.5 ASR Streaming checkpoints (both open weights) as quantized GGUF files and runs them with parakeet.cpp on top of ggml. You can try it today in Firefox 160 for Windows, macOS and Linux. It isn't on Android yet.

The sources are Mozilla's Firefox 160 release notes, the MDN Firefox 160 developer notes, the implementation bug (1940906), and the model manifest in the Firefox source tree.

What Shipped

  • API: standard SpeechRecognition, plus the newer on-device methods SpeechRecognition.available() and SpeechRecognition.install(), which check for and download language packs
  • Local only: Firefox removed its old online recognition backend. Recognition runs locally, and remote (cloud) recognition isn't supported
  • Languages: 40, per Mozilla's release note. English gets its own small models, and everything else goes through one multilingual model
  • Platforms: desktop only. Android is tracked separately and isn't enabled yet
  • Consent: the first install() call shows a Firefox permission prompt with the download size before any model is fetched. It needs a user click (transient activation)
  • Kill switch: on-device speech recognition sits under Firefox's AI Controls settings. If you turn it off, pages get "unavailable" and a notification bar points you back to the setting
  • Model management: downloaded models appear in about:addons under "Manage On-Device AI Models," with a link to each upstream Hugging Face card

The Models Inside

The manifest picks the first model that matches the page's language tag:

  • English streaming: nvidia/parakeet_realtime_eou_120m-v1. A 120M cache-aware RNN-T model that also detects end of utterance. Firefox ships it as realtime_eou_120m-v1-q5_k.gguf, about 141 MB
  • English offline options: nvidia/parakeet-tdt_ctc-110m in q4_k through f16 builds, 131–268 MB, for batch CTC transcription
  • Multilingual streaming: nvidia/nemotron-3.5-asr-streaming-0.6b as nemotron-3.5-asr-streaming-0.6b-q5_k.gguf, about 785 MB. The manifest maps more than 100 locale tags to it, but NVIDIA's card only claims quality for a subset. The strongest tier is English, Spanish, French, Italian, Portuguese, Dutch, German, Turkish, Russian, Arabic, Hindi, Japanese, Korean, Vietnamese and Ukrainian. Polish, Swedish, Czech, Chinese, Hungarian, Romanian and the other Nordic and Central European languages count as "broad coverage"

How It Runs

  • Engine: Mozilla vendored mudler/parakeet.cpp (MIT) and ggml's Metal backend into Firefox
  • Isolation: inference runs in a new sandboxed HWInference process. It's separate from web content and set up for hardware acceleration (Metal on macOS)
  • Latency: audio goes to the model in about 40 ms blocks instead of 0.5 s. Per Mozilla's patch notes, end-to-end delay is now limited by the streaming model, roughly 180 ms
  • Results: finalized words stream back as results, with per-word confidence averaged into each result's confidence score
  • Fingerprinting care: download progress is deliberately not shown to the page. Only the completion result comes back

Try It

Open any page in Firefox 160, open the console (Ctrl+Shift+K) and paste this. The install() call needs a click, so the script waits for one.

document.body.addEventListener('click', async () => {
  const opts = { langs: ['en-US'], processLocally: true };
  const state = await SpeechRecognition.available(opts);
  console.log('model state:', state);
  if (state !== 'available') {
    console.log('installed:', await SpeechRecognition.install(opts));
  }
  const rec = new SpeechRecognition();
  rec.lang = 'en-US';
  rec.processLocally = true;
  rec.interimResults = true;
  rec.continuous = true;
  rec.onresult = (e) => {
    const r = e.results[e.results.length - 1];
    console.log(r.isFinal ? 'FINAL' : 'partial', r[0].transcript, r[0].confidence);
  };
  rec.start();
}, { once: true });

Click anywhere on the page, approve the model download prompt, allow the mic, and talk. Swap 'en-US' for 'ja-JP' or 'de-DE' to pull the multilingual Nemotron model instead. That's a much bigger download, so try it on a good connection.

Where It Fits

This is the same model family that has been showing up all over our ASR coverage. That includes the much larger Nemotron 3.5 Transcribe and community fine-tunes like Norwegian Parakeet. What's new is distribution. A major desktop browser now ships an open-weights streaming ASR stack, and any web app can use it with no API key, no server and no per-minute bill. Voice-agent and dictation builders who depend on cloud STT for the "listen" step now have a free local option in Firefox.

Conclusion

Firefox 160 makes on-device speech recognition a normal web feature. The models are NVIDIA's open checkpoints, the runtime is open source, and the audio never leaves your computer. There are limits: English gets the small fast models, other languages need a 785 MB download, mobile isn't supported yet, and Mozilla hasn't published accuracy numbers for its quantized builds. For voice demos and dictation tools you want to keep off the cloud, it's worth testing today.

—Anabel ♡