block / block/buzz

feat(desktop): dictation in the message composer with live on-device transcription

Open
#2,708 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.