feat(desktop): dictation in the message composer with live on-device transcription
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
## Problem
The composer is keyboard-only. Buzz already ships an on-device STT stack (sherpa-onnx + Parakeet) for huddles, but there is no way to speak a message.
## Proposal
Adds dictation to the message composer, inspired by the Claude Code implementation. The user can click the mic button in the composer toolbar, hold Space, or press ⌃Space to start dictating; words stream into the composer live as they speak. Release the key (or click the mic again) to stop, or press Enter while dictating to send the message as soon as the trailing words land.
- Three ways in: click the mic button in the composer toolbar (click again to stop), hold plain Space for ~800 ms (a quick tap still types a space), or hold ⌃Space for an instant start.
- A live transcript streams in with the caret hidden. Release the held key to stop; the trailing phrase finishes decoding and commits.
- Enter while dictating stops the session and sends once every in-flight word has arrived, so the last words aren't cut off and the message can't double-send.
- A Voice & dictation section under Personal settings offers Standard (parakeet-en) or Enhanced (parakeet-v3). The chosen model downloads on select with progress, and dictation uses the already-ready model until the download completes.
Everything runs locally, so no audio leaves the machine.
## Scope
Desktop only. Reuses the existing huddle model registry and STT pipeline; huddle behavior is untouched.
I have this working in a branch and will open a PR against this issue.
Contributor guide
Research direction
Start at the desktop message composer toolbar and trace the existing huddle model registry and STT pipeline. Review the Voice & dictation settings flow and the composer’s dictation states. Done means local transcription streams into the composer, the specified start and stop controls work, model downloads report progress, and sending waits for trailing words without double-sending.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100