Speech synthesisBaseline · Widely available
The SpeechSynthesis API converts text to speech with artificial voices.
Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Sep 5, 2018. Widely available since Mar 5, 2021.
Browser support
DesktopChrome
1–32Not supported
33+Supportedsince Feb 20, 2014
Current: 155Edge
12–13Not supported
14+Supportedsince Aug 2, 2016
Current: 154Firefox
1–48Not supported
49+Supportedsince Sep 20, 2016
Current: 157Safari
1–6Not supported
7+Supportedsince Oct 22, 2013
Current: 27MobileChrome Android
18–32Not supported
33+Supportedsince Feb 26, 2014
Current: 155Firefox Android
4–61Not supported
62+Supportedsince Sep 5, 2018
Current: 157Safari iOS
1–6Not supported
7+Supportedsince Sep 18, 2013
Current: 27How to use
This feature is Baseline widely available — use it freely, no fallback needed.
Example
Full syntax and examples are on MDN: SpeechSynthesis.
Feature detection
JS · check before using
if ("SpeechSynthesis" in globalThis) {
// SpeechSynthesis is available
} else {
// load a polyfill or use a fallback
}Documentation (MDN)
Specification
Usage share
Sub-features
Support for each part of the feature (42). The overall table above shows when the whole feature works.
| Sub-feature | Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS |
|---|---|---|---|---|---|---|---|
| SpeechSynthesis | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.cancel | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.getVoices | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.pause | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.paused | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.pending | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.resume | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.speak | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.speaking | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesis.voiceschanged_event | 33 | 14 | 49 | 16 | 33 | 62 | 16 |
| SpeechSynthesisErrorEvent | 33 | ≤18 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesisErrorEvent.SpeechSynthesisErrorEvent | 71 | 79 | 49 | 16 | 71 | 62 | 16 |
| SpeechSynthesisErrorEvent.error | 33 | ≤18 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesisEvent | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesisEvent.SpeechSynthesisEvent | 71 | 14 | 49 | 16 | 71 | 62 | 16 |
| SpeechSynthesisEvent.charIndex | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesisEvent.charLength | 77 | 15 | 53 | 16 | 77 | 62 | 16 |
| SpeechSynthesisEvent.elapsedTime | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesisEvent.name | 33 | 14 | 49 | 7 | 33 | 62 | 7 |
| SpeechSynthesisEvent.utterance | 33 | 14 | 49 | 16 | 33 | 62 | 16 |