VoicePen is a small offline macOS app for dictation, voice sessions, and meeting recording.
I built it for myself because I wanted something simple, comfortable, and free: quick push-to-talk dictation, a normal sessions/history flow, and a meeting recording mode with local transcription and experimental speaker diarization. I could not find that exact mix without subscriptions, cloud transcription, or too much product ceremony, so I decided to make it and keep the project in an open-source spirit.
It is still early and personal, but useful enough to share.
- Push-to-talk dictation: hold the hotkey, speak, and VoicePen inserts the final text into the active app.
- Sessions: keep local history for ordinary dictation sessions.
- Meetings: record microphone plus system audio, transcribe locally, and optionally add timecodes and speaker labels.
- Custom dictionary: normalize names, product terms, and recurring recognition mistakes.
- Local-first privacy: no cloud transcription, no analytics, and no runtime data collection.
VoicePen is an early macOS build for my own workflow and a small Friends & Family circle. Expect rough edges, but also a bias toward practical fixes over big platform ideas.
- macOS 15 or newer on Apple Silicon.
- Microphone permission.
- Accessibility permission for text insertion and global hotkeys.
- System Audio Recording permission for Meeting Mode.
- Xcode installed for local development.
If you received VoicePen.app or VoicePen.zip:
- Unzip the file.
- Move
VoicePen.appto/Applications. - Right-click
VoicePen.app. - Click
Open. - Confirm opening the app if macOS warns that it is from an unidentified developer.
Use right-click -> Open on the first launch. Unsigned development builds can be blocked by Gatekeeper; if that happens, run:
xattr -dr com.apple.quarantine /Applications/VoicePen.app
open /Applications/VoicePen.appmake resolve-packages
make build
make runRun tests:
make testDevelopment tooling lives in Docs/development.md, and
test guidance lives in Docs/testing.md.
VoicePen uses a spec-driven workflow for product behavior. Before changing how
the app behaves, update or create the relevant spec in Specs/.
The short version:
- Find the relevant spec in
Specs/index.md. - Update acceptance criteria before implementation.
- Add or update focused tests for the changed behavior.
- Implement the smallest useful change.
- Run
make testbefore handoff for production behavior changes.
Presentation-only and README changes do not need a spec.
VoicePen stores downloaded models here:
~/Library/Application Support/VoicePen/Models/
VoicePen stores settings, history, dictionary entries, and meeting transcripts in a local SQLite database:
~/Library/Application Support/VoicePen/VoicePen.sqlite
Optional proxy settings for model downloads can be configured here:
~/.voicepen/config.toml
VoicePen is free because I wanted this workflow to exist without another subscription. Feedback, issues, and pull requests are welcome. I may add a "buy me a beer" link later for people who want to support the work, but the app should stay useful without paying for it.
- Release and signing notes:
Docs/releasing.md - Architecture decisions:
Docs/adr/ - Product specs:
Specs/