#20232·ckeditor5

Voice input (dictation) using the Web Speech API

Author: shayan-m81Created Sep 5, 2026Updated Sep 14, 2026
Labelstype:feature

Provide a description of the new feature

What is the expected behavior of the proposed feature?

The problem

People who dictate rather than type have no first-party dictation option in CKEditor 5. They currently rely on OS-level dictation or browser extensions, whose interaction with the editor can be fragile. #15585 is one example of that problem — this proposal is not a fix for that issue, but a separate first-party approach.

What I have

I have built and shipped a Web Speech API dictation plugin for CKEditor 5. It is currently running in production in an HR application, with real users dictating in Persian. The same implementation also supports English.

A toolbar button starts dictation. Recognized text is inserted through CKEditor's insertText command using the current selection, keeping the edit within CKEditor's normal editing flow.

A footer shows the current recognition state and a live microphone level meter so users can tell whether the microphone is active and receiving audio.

Why this is more than a thin Web Speech API wrapper

A naive integration using continuous = true and consuming event.results was not reliable enough for longer dictation sessions.

During development and production usage, we encountered several failure modes, including empty final results, recognition sessions that remained active but stopped producing useful transcripts, restart races around start(), and watchdog logic that could leave a session stuck.

The current implementation explicitly handles these cases and has been used for longer continuous dictation sessions in production. I can provide traces, tests, recordings, and more implementation details if useful.

Known limitations

  • SpeechRecognition is not consistently available across all major browsers. The current implementation detects support and disables the feature with an explanation when recognition is unavailable.
  • Where recognition is performed depends on the browser and platform and may involve a remote recognition service. Experimental Web Speech API capabilities such as processLocally, SpeechRecognition.available(), and SpeechRecognition.install() also make on-device recognition possible where supported, but this cannot currently be assumed to be available.
  • The feature requires microphone permission and an appropriate secure browser context.

Questions before I do any porting

  1. Is first-party dictation something you would consider accepting upstream in CKEditor 5?
  2. If the feature is useful but not a fit for the main project, would you prefer it to remain a third-party/community plugin?
  3. Would relying on browser/platform-provided speech recognition be acceptable for a CKEditor feature, or is that itself a blocker for upstream inclusion?

I am willing to adapt the existing implementation to CKEditor's package conventions, coding style, test and coverage requirements, manual tests, accessibility expectations, translations, and maintenance requirements.

Since the existing implementation is substantial and already running in production, I would rather ask about the intended direction before spending time porting it into the CKEditor repository.

Happy to provide a recording, technical traces, or a live demo if that would help evaluate the proposal.


If you'd like to see this feature implemented, add a reaction to this post.