Intelligent voice dictation for macOS. Press a shortcut to start, speak, press again — your text is transcribed and pasted instantly.
- Toggle dictation —
Cmd+Shift+Spaceto start recording, press again to transcribe and paste - Cancel anytime —
Cmd+Shift+Cto cancel without pasting - 5 STT engines — OpenAI, Groq, Voxtral (Mistral), Gemini (Google), or Parakeet (100% local) — switch freely in settings
- AI reformulation — Clean up grammar, remove hesitations and repetitions
- Auto-translation — Translate to French, English, Spanish, German, Italian, or Portuguese
- Floating overlay — Minimal animated pill with real-time audio waveform
- Native macOS look — Dark glassmorphism theme, animated gradients, transparent title bar
- Bilingual UI — English and French
| Engine | Transcription model | Reformulation model | API key |
|---|---|---|---|
| OpenAI | gpt-transcribe |
gpt-4o-mini |
platform.openai.com |
| Groq | whisper-large-v3-turbo |
llama-3.3-70b-versatile |
console.groq.com |
| Voxtral (Mistral) | voxtral-mini-2602 |
mistral-small-latest |
console.mistral.ai |
| Gemini (Google) | gemini-3.5-transcribe |
gemini-2.5-flash-lite |
aistudio.google.com |
| Parakeet (NVIDIA, local) | parakeet-tdt-0.6b-v3 via ONNX Runtime |
provider of your choice (optional) | none — model (~670 MB) downloaded from the settings |
Parakeet runs 100% locally: no audio ever leaves your machine. It supports 25 European languages with automatic language detection. The model is loaded at startup so the first dictation is instant. Reformulation and translation stay optional — pick any chat provider in the settings, or leave its key empty and the transcription is pasted as-is (still fully local).
Transcription and reformulation are two separate steps, and the settings let you pick who does the second one regardless of who did the first. It defaults to Automatic, which follows the STT engine — the behaviour before it was configurable.
Naming one explicitly is what makes the interesting combinations possible: cloud transcription with on-device rewriting, or a cheap transcriber paired with a stronger rewriter. Leave the chosen provider's key empty and the transcription is simply pasted as-is.
Pairing Parakeet with Apple Intelligence as the reformulation provider keeps the entire pipeline on the machine — audio and text alike, no API key, no network. It uses the model built into macOS through the FoundationModels framework, so there is nothing extra to download.
It needs macOS 26 or later on a device with Apple Intelligence enabled; the option is hidden elsewhere. If the model turns out to be unavailable at dictation time, the raw transcription is pasted and the reason is shown — it is never quietly sent to an online service instead.
Download the latest release from GitHub Releases.
| Platform | File |
|---|---|
| macOS | .dmg |
| Windows | .msi |
| Linux | .deb, .AppImage |
macOS: The app is not notarized by Apple, so Gatekeeper blocks it on first launch. After installing, run:
xattr -cr /Applications/Dictea.appThen open the app normally.
Builds are signed with a stable self-signed certificate. It does nothing for Gatekeeper — the app still comes from an unidentified developer — but it keeps the app's code identity constant from one version to the next, so the Microphone and Accessibility permissions you grant survive updates.
They did not before: an ad-hoc signature pins the app's identity to the hash of that exact binary, so every update looked like a different app to macOS and dropped the grants. The microphone re-prompted, Accessibility did not — it just denied silently, and the automatic paste stopped working with no explanation.
Moving to the signed builds changes the identity one last time, so the permissions have to be granted once more. In the Accessibility settings, remove Dictea from the list and add it back; unchecking and rechecking leaves the stale entry in place.
- macOS 10.15+
- Rust — rustup.rs
- Node.js 18+ and pnpm
make install # Install dependencies
make dev # Development mode (hot reload)make buildThe .dmg and .app bundle will be in src-tauri/target/release/bundle/.
| Shortcut | Action |
|---|---|
Cmd + Shift + Space |
Start / stop & paste |
Cmd + Shift + C |
Cancel (no paste) |
src-tauri/src/
├── lib.rs # App state, Tauri commands, config, shortcuts
├── audio/ # Microphone capture (cpal, 48kHz → 16kHz)
├── stt/ # STT engines (OpenAI, Groq, Voxtral, Gemini, Parakeet)
└── pipeline/ # Real-time streaming pipeline
ui/
├── App.tsx # Root component with i18n provider
├── components/
│ ├── SettingsView.tsx # Settings layout + sidebar
│ ├── OverlayView.tsx # Floating waveform pill
│ └── pages/ # Dictation, Engine, Shortcut, Settings
├── hooks/useConfig.ts # Config loading & auto-save
├── i18n/ # FR + EN translations
└── types.ts # Shared types & constants
| Component | Technology |
|---|---|
| Desktop framework | Tauri v2 |
| Backend | Rust |
| Frontend | React 19, TypeScript, Vite |
| Audio capture | cpal |
| HTTP client | reqwest |
| Icons | lucide-react |
| Fonts | Great Vibes, Nunito |
| Command | Description |
|---|---|
make dev |
Dev mode with hot reload |
make build |
Production build |
make install |
Install dependencies |
make clean |
Clean build artifacts |
make kill |
Kill running processes |
make logs |
Tail application logs |
make release VERSION=x.y.z |
Tag & push a release |
Releases are signed with the certificate produced by scripts/generate-signing-cert.sh (run once, stored as the APPLE_CERTIFICATE and APPLE_CERTIFICATE_PASSWORD repository secrets). The workflow only signs when those secrets exist.
Config is stored in ~/Library/Application Support/com.dictea.app/.
Enjoy Dictea? Help keep it free and ad-free.
The same links are in the app, under Settings.
MIT
