Back to projects

Personal project · Open source

SpeakType

Push-to-talk voice typing that works everywhere. Press a hotkey, speak, press again — your words appear wherever you're typing.

SpeakType demo — press hotkey, speak, text appears in any app
Download for macOSView on GitHub

Why I built it

I live in Cursor, terminals, and browsers. When I'm drafting a long prompt for an AI agent or writing a detailed PR comment, typing forces me to compress my thinking. I self-edit before the sentence is even finished. Speaking doesn't have that filter — I explain the full context, the edge cases, the “actually, also do this” parts that never make it through my fingers.

Existing dictation tools are either locked to one app, send your voice to the cloud, or require a subscription. I wanted something different: a global hotkey, local Whisper inference, and paste into whatever window already has focus. So I built SpeakType — first as a Python CLI for cross-platform use, then as a polished macOS widget with Tauri for the experience I actually wanted on my own machine.

Works everywhere

One hotkey pastes into Cursor, VS Code, Terminal, Slack, Gmail, GitHub — whatever has focus. No app switching.

Private by default

Audio and transcription stay on your machine. No accounts, no telemetry, no cloud unless you explicitly configure one.

Push-to-talk

Press ⌘+Option+L, speak naturally, press again. Your full thought lands — not the truncated version you'd type.

How it works

  1. 1Press the hotkey(⌘+Option+L on macOS, F9 on CLI) — a tiny floating widget shows you're recording.
  2. 2Speak naturally. Explain the full task — the widget captures audio locally via your microphone.
  3. 3Press again. Whisper transcribes on your machine. Text is copied and pasted into the focused window — with smart terminal detection (⌘+Shift+V in terminals, ⌘+V elsewhere).

Under the hood

# macOS widget pipeline

Hotkey → cpal audio capture → whisper.cpp sidecar

→ hallucination filter → clipboard → focus target window → paste

# Python CLI pipeline

Hotkey → sounddevice → Silero VAD → faster-whisper

→ smart paste → optional local FastAPI server

The widget in action

SpeakType widget idle state
Floating widget — always within reach
SpeakType recording with waveform
Live waveform while you speak
SpeakType transcribing
Local Whisper processes your audio
SpeakType success state
Text pasted — back to work

Built for real workflows

Privacy, by design

No accounts. No telemetry. No cloud transcription unless you explicitly point the CLI at an external API. Audio never leaves your machine during normal use. The only network call is a one-time model download from Hugging Face — after that, you can dictate on a plane.

Permissions needed: Microphone + Accessibility (for paste simulation). That's it — no screen recording, no full disk access.

Get it

MIT licensed · Built by Ahsan KhanStar on GitHub