the dictation button for developers

The key at the bottom-left of your Mac
finally does something.

Hold Fn. Say the thing. Release. Clean text lands at your cursor — in your terminal, your editor, your coding agent.
Transcribed and cleaned entirely on your Mac. No API key. No account. No cloud.

A ~16 MBdownload — not the 1.2 GB we used to ship (or the ~1 GB the bundle-a-model apps ship). The on-device models (Whisper + a cleanup LLM, ~1.1 GB) fetch once on first run, SHA-256-verified and resumable, then it's fully offline forever. GPLv3 — read every line before it reads you.

One command, no warnings. Install with Homebrew — no “damaged” dialog, no xattr, no Apple account:

$ brew install --cask todddickerson/funbutton/funbutton

No Homebrew? A one-line curl installer and the manual .dmg are right below.

zsh — funbutton is listening rec
~/src/api $ # hold fn, ramble like a human…
you said › “okay so um, git commit dash m… fix the race condition in the retry handler — no wait, in the backoff logic”
funbutton typed › git commit -m "fix race condition in backoff logic"
claude code $ # same button, prompting your agent…
you said › “uh refactor the auth middleware to use the new session store and and write the tests first”
funbutton typed › Refactor the auth middleware to use the new session store. Write the tests first.

Self-corrections resolved. Fillers gone. “dash m” becomes -m. Code mode knows you meant a flag; prose mode exists for the humans you Slack. It also reads the window you're in, so your identifiers and jargon come out spelled right — and that context stays on your Mac, never logged.

works where you work

  • Cursor
  • VS Code
  • Claude Code
  • Terminal
  • Slack
  • any cursor

No integrations. No plugins. It types wherever your cursor blinks.

how it works

Four steps. All of them on your machine.

01

Hold Fn

Or Right Option. Push-to-talk, so there's no toggle left running while you think out loud.

02

Whisper transcribes

On your Mac, with an on-device model you grab once on first run. Zero key. Works on a plane after that.

03

A local LLM cleans it up

An on-device model kills the fillers, resolves your self-corrections, and reads what's on your screen — the focused window, the file, your selection — so identifiers like getUserById and brand names come out spelled the way your code already spells them. Pin the mode per app or force Terminal; swap the model any time.

04

It types

Pastes at your cursor and restores your clipboard. Feels like you typed it, minus the typing.

Want more horsepower? Point cleanup at your own Ollama, bring a Groq key, or use our paid cloud models. All optional. The default path never phones home.

the honest table

Where this sits, exactly.

Handy and VoiceInk are excellent open-source projects. Go star them. We exist because nobody wakes up thinking about terminals, commit messages, and coding agents.

FunButtonHandyVoiceInkWispr Flow
Price$0 · $149 lifetime$0$25–49 lifetime$12–15/mo, forever
LicenseGPLv3MITGPLv3closed
Download size~16 MB downloadapp + modelapp + modelcloud
Works offlineafter first-run modelsyesyesno
AI cleanup on-deviceon-device, defaultoptionaloptional (cloud text)cloud only
API key or accountneverneverneveraccount required
Dev-first defaultsthe whole pointgeneric dictationgeneric Power Modegeneric prose
StackTauri + RustTauri + RustSwiftclosed

Wispr Flow raised ~$334M and still can't work on a plane. We hold that against them slightly less than the subscription.

gplv3, built in public

A dictation app hears everything you say. Read its source.

The desktop app is GPLv3. Every commit is public, including the embarrassing ones. If we ever do something shady with your audio, you can catch us in the diff.

github.com/todddickerson/funbutton →

install — pick one

1Homebrewrecommended
$ brew install --cask todddickerson/funbutton/funbutton

No “damaged” dialog, no xattr, no Apple account. Update anytime with brew upgrade --cask funbutton.

2curl one-liner
$ curl -fsSL https://funbutton.ai/install.sh | bash

No Homebrew? One line, same result — and you can read exactly what it does first at funbutton.ai/install.sh.

3Manual .dmgthe DIY path
↓ Download .dmg (Apple Silicon)

This build is unsigned, so macOS mislabels the download as “damaged” until you clear quarantine on both the .dmg and the app:

$ xattr -cr ~/Downloads/FunButton_0.1.8_aarch64.dmg
$ xattr -cr /Applications/FunButton.app

Brew and the one-liner already do this for you — this step is only for the manual download. Real signing is on the way (Developer ID pending): see SIGNING.md.

Then: grant Microphone · Accessibility · Input Monitoring, pick your hotkey, hold it, talk. The on-device models (~1.1 GB) fetch once on first run.

Release notes in your inbox. Nothing else.

New builds, breaking changes, and the occasional apology. No drip campaign — we don't have a marketing team.

pricing

Pay once. Pay monthly. Or don't pay at all.

Free forever on the bundled local models, your own Groq key, or Ollama. Pro adds premium cleanup models and 50K words/mo included. Lifetime is one-time and never goes up after we hit the next ladder rung.

Free

$0forever
  • Fully local: on-device Whisper + LLM
  • ~16 MB download · models fetch on first run
  • Unlimited usage, or BYO Groq / Ollama
  • GPLv3 — open source desktop
Download alpha

Pro

most popular
$79/yr

or $9/mo

  • 50K premium cleanup words/mo (Haiku 4.5)
  • Sonnet, Opus, GPT-4.1 selectable
  • Metered overage with user-set cap
  • Auto top-up OFF by default

Lifetime

$149once

first 1,000 customers

  • Groq fast tier unlimited forever
  • Premium cleanup pay-as-you-go
  • Price climbs to $199 then $249
  • No recurring charges on the base

Premium models priced per 10K words: Haiku $0.40 · Sonnet $0.60 · Opus $0.99 · GPT-4.1 $0.50. Cap defaults to $0 (hard stop, fast-tier fallback). You can raise the cap up to $100/mo at any time.