# Dimmy > Speak instead of typing. Native voice dictation for macOS and Windows. Press a hotkey, talk, release. Your words land where the cursor is. Offline by default. Dimmy is a cross-platform desktop app that turns your voice into text instantly, in any application. It runs as a tiny always-on overlay called the *pill*. Press a hotkey, speak, and your words are transcribed and pasted into whatever has focus: editors, browsers, chat apps, terminals, anywhere a cursor blinks. The name is pronounced *Dimi*, short for the Italian *dimmi* ("tell me"). Dimmy ships with **native UIs** for every platform (no Electron, no WebView, no browser shell): WinUI 3 + C# on Windows, SwiftUI on macOS. A shared Rust core handles all the heavy lifting (audio capture, transcription, AI post-processing, meeting recaps, history, encrypted key storage). Installers are compact: macOS DMG around 25 MB, Windows installer around 40 MB with bundled runtimes. An order of magnitude smaller than Electron equivalents. Dimmy is **open-core**: the full source is AGPL-3.0 and free to build yourself. Paid plans sell convenience (a signed prebuilt binary, one-click auto-update, support), not features. The same code runs whether you compile it or buy it. ## Links - [Website](https://dimmy.app) - [GitHub Repository](https://github.com/KonradDallaOrg/dimmy) - [Latest Release / Download](https://github.com/KonradDallaOrg/dimmy/releases/latest) - [Architecture](https://github.com/KonradDallaOrg/dimmy/blob/main/docs/ARCHITECTURE.md) - [Build Instructions](https://github.com/KonradDallaOrg/dimmy/blob/main/docs/BUILD.md) - [Privacy Policy](https://dimmy.app/privacy/) - [Terms](https://dimmy.app/terms/) - [Help Center](https://dimmy.app/help/) - [Issues & Feature Requests](https://github.com/KonradDallaOrg/dimmy/issues) - [License (AGPL-3.0)](https://github.com/KonradDallaOrg/dimmy/blob/main/LICENSE) ## For agents - Full site as one Markdown file: [llms-full.txt](https://dimmy.app/llms-full.txt) - Every page has a Markdown version at the same path plus `.md`, for example [/help/install.md](https://dimmy.app/help/install.md), [/privacy.md](https://dimmy.app/privacy.md), [/index.md](https://dimmy.app/index.md) for the homepage. Each HTML page links to it with ``. - Unknown paths return a real HTTP 404. ## Pricing Dimmy is open-core. The full source is AGPL-3.0 on GitHub and compiles on macOS and Windows with **zero feature gates** — the free path is to build it yourself. Paid plans do not unlock features; they sell convenience: a signed, notarized prebuilt binary, one-click in-app auto-update, beta / early access, human email support (a person replies in under 24h), and roadmap voting. | Plan | Price | Billing | What it includes | |---|---|---|---| | Free | €0 | forever | Full app, compiled from source. Same code as Pro, no paywall, no feature gates. Local Whisper transcription needs no key; bring your own API key for cloud providers. Community support via GitHub. | | Pro | €4.99 | / month | Prebuilt signed binary, in-app auto-update, beta access, human email support, roadmap voting. 14-day free trial. | | Pro (annual) | €39 | / year | Same as Pro, saves ~35%. | | Lifetime | €99 | one-time | Everything in Pro, plus 3 years of updates from purchase, priority support, optional name in credits. | All paid plans: **14-day free trial · 30-day refund · cancel anytime · students 40% off**. Payments are handled by Stripe (Dimmy never sees your card). After purchase, the licensing backend at `license.dimmy.app` emails an activation magic link; the client exchanges it for an Ed25519-signed, device-bound token. No account password to remember. ## Platforms | Platform | Availability | Artifact | Requirements | |---|---|---|---| | macOS | Prebuilt today | `Dimmy-macos-arm64.dmg` | macOS 12 Monterey or newer, Apple Silicon (M1/M2/M3/M4). | | Windows | Prebuilt today | `Dimmy-Setup.exe` (Velopack) | Windows 10 or newer, .NET 8 Desktop Runtime (auto-installed). VC++ Redistributable bundled. | | iOS / Android | Waitlist | — | Mobile is the most-requested platform; the first platform to reach 1,000 GitHub stars gets built next. | Per-user installs (no admin prompt on Windows). Auto-update through GitHub releases (Velopack on Windows, in-app updater on macOS). ## Tech Stack - **Native frontends**: WinUI 3 + C# on Windows, SwiftUI on macOS. - **Shared core**: Rust (stable, edition 2021). About 30 C FFI exports consumed by Windows and macOS. - **Local STT, three engines**: [whisper.cpp](https://github.com/ggerganov/whisper.cpp) via `whisper-rs` (quantized GGML models), NVIDIA **Parakeet TDT v3** (ONNX on Windows; on macOS it is the default engine and runs on the Apple Neural Engine), and **Qwen3-ASR** through llama.cpp's multimodal path (Neural Engine on macOS). On macOS whisper can also use a Core ML encoder, so transcription leaves the GPU free for the screen. If the selected engine has no model on disk, Dimmy falls back to whisper and says so. - **Speaker diarization (local)**: NVIDIA Nemotron-3-Diarization (streaming Sortformer, 100M params, int8 ONNX) labels who said what in meeting transcripts, on-device. - **Local LLM (optional)**: [llama.cpp](https://github.com/ggerganov/llama.cpp), bundled in official installers. Default local model is **Phi-4 Mini Instruct Q4_K_M** (~2.5 GB, 3.8B). Google Gemma 4 (E2B/E4B/12B) variants remain selectable. - **GPU acceleration**: Metal on Apple Silicon, Vulkan on Windows (all GPU vendors), CUDA on NVIDIA. - **Audio**: `cpal` capture, 48 kHz highpass + VAD + AGC + NaN-safe clamp preprocessing pipeline. - **Filler removal**: in-house cleanup in 6 languages. - **History**: SQLite + FTS5 full-text search over every transcription and meeting. - **Key storage**: AES-256-GCM with a machine-bound KDF. No OS keyring popups, no admin permission. - **Installer (Windows)**: [Velopack](https://velopack.io/) with built-in auto-update. - **Licensing**: Cloudflare Worker + D1 at `license.dimmy.app`, Ed25519-signed tokens, Stripe for payments, Resend for activation emails. - **Telemetry**: PostHog EU and Sentry EU, anonymous, opt-out. App version, OS, CPU arch, aggregate event names only. Never audio, never text, never meeting content, never IP, never API keys. ## Core Features ### Local-first transcription Default mode runs entirely on the device. After the first run downloads a Whisper model (around 78 MB for `base-q8_0`), Dimmy works indefinitely with no internet. Zero cloud calls, zero API keys required, works on a plane. ### The pill A tiny always-on-top overlay that changes shape, colour, and contents to reflect what is happening: | State | Visual | Meaning | |---|---|---| | Idle | Small capsule, dim | Waiting for the hotkey | | Recording | Expanded pill, rainbow border, live waveform | Capturing audio | | Transcribing | Dots or spinner, solid border | Running STT (local or cloud) | | LLM processing | Style-coloured border, style icon | Post-processing with the selected style | | Command mode | Amber dot | Speech is treated as an instruction, not dictation | | Done | Green checkmark | Success, text was pasted | | Error | Red border, tooltip | Something failed, hover for detail | Right-click the pill (or the tray / menu-bar icon) to open Settings. Scroll on the pill to cycle styles; Ctrl+scroll to cycle tones. Hide the pill entirely and the tray icon takes over (screenshare-safe). ### Hotkey system Default hotkey is `Win`+`Alt` on Windows, `Cmd`+`Opt` on macOS. Any modifier combination is configurable. Two modes: hold-to-record (default, walkie-talkie style) or toggle (press once to start, again to stop). ### Universal paste Transcribed (and optionally enhanced) text is automatically pasted into the currently focused application via the OS clipboard. Works everywhere a cursor blinks. No per-app integration, no plugin. ### Two-pass pipeline (both local by default) 1. **Transcribe**: Whisper Large v3 Turbo (cloud) or local Whisper catches every word in up to 99 languages. 2. **Enhance**: an optional LLM pass polishes punctuation, fixes grammar, or rewrites in one of 13 styles. Runs locally via Phi-4 Mini, or via a cloud provider, or via your Claude/ChatGPT subscription CLI. ### Command Mode Instead of typing what you say, your speech becomes an **instruction the AI executes in place**. With text selected, Dimmy reads it, applies your spoken instruction, and replaces the selection ("make it more formal", "translate to English", "turn this into bullets"). With nothing selected, your words become a writing request inserted at the cursor. Toggle it from the pill right-click menu (sticky, amber dot) or via a dedicated one-shot hotkey. Windows and macOS. Uses the same model as the AI styles. ### Custom dictionary Select a word in any app and press the add-to-dictionary shortcut (`Ctrl`+`Shift`+`D` on Windows; Services menu on macOS) to teach Dimmy names and jargon so future transcriptions get them right. ### Streaming dictation Optional realtime typing: text appears at the cursor while you are still speaking. Cloud mode streams over WebSocket (Deepgram, OpenAI realtime); local mode types chunk by chunk from the local engine. ### Meeting Mode A dedicated **Dimmy Meeting** window (Windows + macOS) records both sides of a call (microphone + system audio, with echo cancellation), transcribes live in 30-second windows (measured: shorter windows cost 2-4x more and cut sentences in half), and supports timestamped notes ("Add note" while recording, editable afterwards) and pause/resume. Audio is written to disk on its own thread, so a slow transcriber can cost transcript, never the recording. **Call detection and auto-record**: Dimmy notices when a call app (Teams, Zoom and others) starts using the microphone, offers to record or records automatically, and stops (or suggests stopping) when the call ends. Two back-to-back meetings stay fully separate. **Speaker labels**: turn on Speaker labels and every line of the transcript says who spoke, up to 8 people per recording. Labels are computed while you talk, so they are ready when you press Stop. Click a speaker to give them a real name; the name replaces the label everywhere, including search, exports and the next recap. Runs locally (104 MB model, downloaded once). Not on Linux yet. **Names spelled right**: your notes and your custom dictionary decide how people, companies and products are spelled in the recap, even when speech recognition misheard them. **Calendar context (Claude subscription users)**: when the Claude CLI has a calendar connector authorised (e.g. Outlook), the recap knows which appointment the meeting was and who attended. Without it, the recap simply has no roster; nothing fails. On stop it auto-generates a structured recap: **TL;DR, Context, Highlights (with timestamps), Key decisions, Action items, Open questions, Risks & blockers, Next steps**. A **meeting-type classifier** (1:1, standup, planning, technical review, brainstorming, interview, customer call, lecture, …) tunes section emphasis. A **recording-consent gate** appears every session, with all-party-consent jurisdictions called out. Recaps export to a folder (point it at Obsidian/Drive/Dropbox for free sync), to Notion, or to Claude Desktop. "Transcribe a file" feeds an existing recording into the same recap flow. ### Filler removal Strips "um", "uh", "basically", "cioè", and similar verbal filler in six languages (English, Italian, Spanish, French, German, Portuguese). Independent from the LLM pass, so it works even with the simplest local model or with the LLM off. ### Searchable history Every transcription and meeting is stored locally in SQLite. FTS5 powers full-text search, filterable by provider, style, language, and date. Per-row copy, re-paste, delete, reapply. Stats include count, audio time, words dictated, and time saved. ### Language support Auto-detection across 12+ languages out of the box; all Whisper models cover 99 languages. LLM translation targets 49 languages. Q8 quantized Whisper variants trade 2 to 3 % accuracy for roughly 2x speed and are the default. ### Configuration tabs General (STT mode, language, filler removal), Models (browse/download/pick Whisper models), Shortcut (hotkey combo, hold vs toggle), Output (LLM style, tone, translation target, custom prompts, recap export), Overlay (pill position, waveform style, border scheme, opacity), Meetings (recording, consent, export folder), History, Permissions, Stats, About. ## Integrations Dimmy can use your existing AI subscriptions and tools as backends, with no extra API key or per-token cost. - **Claude CLI (subscription provider)**: runs Anthropic's official `claude` CLI as a subprocess so your Claude Pro/Team/Max plan powers style rewrites and meeting recaps. No API key, no per-token cost. Affects the LLM pass only, not STT. - **Codex CLI (ChatGPT subscription provider)**: the OpenAI sibling. Runs the official `codex` CLI so your ChatGPT Plus/Pro/Team/Business/Enterprise plan powers the LLM pass. Guided installer (winget on Windows). Windows + macOS. Free ChatGPT accounts are not supported. - **Claude Desktop (MCP bridge)**: ships a standalone `dimmy-mcp` binary speaking MCP over stdio. A one-click wizard installs it into Claude Desktop, letting Claude list recent meetings, read a transcript, fetch the recap template, search meetings, and save a recap back. Local-only, no extra account. - **MCP from the Claude CLI**: point the terminal `claude` CLI at the same `dimmy-mcp` binary (`claude mcp add --scope user dimmy -- `) and compose Dimmy with other MCP servers (Notion, Filesystem, GitHub). - **Gemini CLI (Google subscription provider)**: Google's official `gemini` CLI can power rewrites and recaps. Work accounts on Gemini Code Assist Standard or Enterprise only: Google ended personal-account access to that CLI on 18 June 2026. - **Notion**: connect with your own Notion integration token (no Dimmy server in the middle) and send meeting recaps as real Notion pages, with an optional auto-send-every-recap toggle. - **Confluence Cloud**: the corporate sibling of Notion. Your own API token, a connection test, a page picker, one click to send a recap. - **Telegram inbox**: record audio on your phone with any app and share it to your Telegram **Saved Messages**. Dimmy, signed in to your own Telegram account (QR-code login, like Telegram Desktop), picks it up, transcribes it, writes the recap, and replies in Saved Messages when it starts and when it is done. Files up to 2 GB. - **Export folder**: every recap can be written as Markdown to a folder of your choice (point it at Obsidian, Google Drive, Dropbox for free sync). ## Works In Dimmy works in any application with a text input. Transcription is pasted via the OS clipboard, so there is no per-app integration, no plugin, no API to wire up. If you can type into it, you can dictate into it. - **AI tools**: ChatGPT, Claude, Cursor, Claude Code, Zed. - **Note-taking & docs**: Notion, Obsidian, Bear, Microsoft Word, Google Docs, Apple Notes. - **Code editors**: VS Code, Cursor, Zed, Xcode, Sublime Text, JetBrains IDEs (IntelliJ, PyCharm, WebStorm, GoLand, RustRover), Vim/Neovim in a terminal. - **Messaging & chat**: Slack, Discord, Telegram, WhatsApp, iMessage, Microsoft Teams. - **Email**: Gmail, Apple Mail, Outlook. - **Design & product**: Figma, Linear, Things, Jira. - **Browsers**: Safari, Chrome, Arc, Firefox, Brave (any input field, any web app). - **Terminals**: Terminal.app, iTerm2, Warp, GNOME Terminal, Konsole, Windows Terminal. ## Use Cases - **Write prompts faster** for ChatGPT, Claude, Gemini, Cursor, or Claude Code. Speak a paragraph in 10 seconds, hit a hotkey, get a clean prompt. - **Voice notes that read like text** in Slack, Discord, or WhatsApp. The "Professional" or "Correct" style fixes filler and punctuation on the fly. - **Email drafting** in Gmail, Outlook, or Apple Mail with a "Professional" tone. - **Code comments and PR descriptions** in VS Code, Cursor, Zed, Xcode, or JetBrains IDEs. - **Meeting recaps**: record a call, get a structured summary with action items and decisions, send it to Notion or your notes folder. - **Long-form capture** in Notion, Obsidian, Bear, or Apple Notes. - **Issue and ticket writing** in Linear, Jira, or GitHub Issues. - **Italian + English mixed workflows** with auto-language detection plus the "Imbruttito" Milanese style. - **Accessibility and RSI relief**: voice as a primary input for people with repetitive strain injury, dyslexia, or temporary hand injuries. - **Hands-busy contexts**: cooking, exercising, parenting. The combination of *local-first transcription* and *no per-app integration* means Dimmy fits anywhere without lock-in. ## STT and LLM Providers Local mode is the default and needs no key. Cloud providers are opt-in, per-provider, and can be faster on long audio. STT and LLM can be mixed independently (e.g. local Whisper + cloud LLM). | Provider | Type | Example models | Free tier | |---|---|---|---| | Groq (recommended) | STT + LLM | whisper-large-v3, whisper-large-v3-turbo, llama-3.3-70b | Yes, rate-limited | | OpenAI | STT + LLM | gpt-4o-transcribe, gpt-4o-mini-transcribe, whisper-1, gpt-4o-mini | Pay as you go | | Deepgram | STT only | Nova-3, Nova-2 | Free credits | | Google Gemini | STT + LLM | gemini-2.5-flash, gemini-2.5-pro | Yes | | Anthropic | LLM only | Claude Haiku 4.5, Claude Sonnet 4 | No | | OpenRouter | LLM only | Llama 3.3 70B, DeepSeek R1, 100+ others | Yes (free models) | | Together | LLM only | Open models | Pay as you go | | Fireworks | LLM only | Open models | Pay as you go | | Custom | STT + LLM | Any OpenAI-compatible endpoint | Varies | | Claude CLI / Codex CLI / Gemini CLI | LLM only | Your Claude, ChatGPT or Gemini Code Assist subscription | Uses your existing plan | Files above 25 MB are auto-chunked for Groq and OpenAI, searching for silence boundaries before splitting. ## LLM Post-Processing Styles (13) | Style | Effect | |---|---| | Off | No LLM processing, raw transcription (default) | | Correct | Fix grammar, punctuation, obvious typos | | Summarize | Condense to key points | | Elaborate | Expand with detail | | Comprehensible | Rewrite for clarity | | Professional | Business or email tone | | Prompt | Reshape as an LLM prompt | | Gen-Z | Gen-Z slang rewrite | | Boomer | Old-school formal rewrite | | Emoji | Insert tasteful emoji | | Acronyms | Replace phrases with abbreviations | | Imbruttito | Milanese grumpy rewrite (Italian humor) | | Custom | Your own system prompt (supports a `{{tone}}` placeholder) | Five tones modulate the selected style independently: neutral, friendly, formal, casual, enthusiastic. Cycle them with Ctrl+scroll on the pill. ## Architecture Overview ``` Native UIs Rust core (core/src/) External ---------- ----------------------- ---------------- Windows WinUI 3 C# -P/Invoke-+ OS audio (cpal) macOS SwiftUI -C FFI----+-- ffi.rs (30+ C exports) Whisper GGML models -Rust-----+-- audio.rs -> preprocess.rs Cloud providers +-- local_stt.rs (whisper.cpp) (Groq, OpenAI, +-- transcribe.rs (cloud STT) Deepgram, Gemini, +-- filler.rs (6 languages) Anthropic, ...) +-- llm.rs (13 styles) llama.cpp + Phi-4 Mini +-- local_llm.rs (optional) claude / codex CLIs +-- codex.rs (ChatGPT sub) dimmy-mcp (MCP bridge) +-- history.rs (SQLite + FTS5) +-- keystore.rs (AES-256-GCM) ``` Pipeline: mic -> preprocess (highpass -> VAD -> AGC) -> STT (local or cloud) -> filler removal -> optional LLM (local, cloud, or subscription CLI) -> clipboard + paste + history. Deeper docs (architecture, audio pipeline, FFI surface, decision log, known-bugs catalogue) live under `docs/` in the repository. ## Development Practices - **Negative Space Programming**: every function in the Rust core asserts its preconditions and postconditions, in release builds too. Crash on corruption rather than silently propagate bad data. - **Known-bugs catalogue**: every non-trivial shipped bug gets a named entry in `docs/dev/known-bugs.md` with symptom, root cause, failed fixes, and the regression test that prevents recurrence. - **Tests**: about 1,000 unit tests in the Rust core plus FFI integration tests, a C# xUnit suite on Windows, and an XCTest suite on macOS. The macOS app is launched in CI before a release ships. - **CI**: GitHub Actions for lint + test on every push, full native builds and packaging on staging, real releases on `v*` tags, and clean-room install verification on Windows. ## Installation 1. **Buy or build.** Download a prebuilt signed binary after starting a trial or purchase at [dimmy.app](https://dimmy.app) (macOS, Windows), or clone [the repo](https://github.com/KonradDallaOrg/dimmy) and compile it yourself for free. 2. Run the installer (Windows), or drag the app to Applications (macOS). 3. Launch Dimmy. The pill appears, and onboarding walks you through microphone permission (and accessibility on macOS) and downloading the default Whisper model. 4. Press your hotkey, speak, release. Text lands in the focused app. No API key needed in local mode. To use a cloud provider, open Settings → General → Cloud mode and paste a key, or connect your Claude/ChatGPT subscription via the CLI integrations. ## Privacy In local mode (the default), no audio leaves the device, and audio is never written to disk (a RAM ring buffer, then gone). In cloud mode, audio is sent over HTTPS to the chosen provider, subject to that provider's data-retention policy. Anonymous opt-out telemetry goes to PostHog EU and Sentry EU: app version, OS, CPU arch, and aggregate event names only. Never audio, never text, never meeting content, never IP, never API keys. Toggle off in Settings → Privacy. API keys are stored on device, encrypted with AES-256-GCM and a machine-specific KDF. Local-only and free usage requires no account; paid plans require an email for the license and activation link. ## EU AI Act Dimmy is an AI system under Regulation (EU) 2024/1689; Konrad Dalla is its provider. Self-assessed as outside the prohibited practices (Art. 5) and outside the Annex III high-risk uses: dictation, transcription and meeting summarisation are not listed. No conformity assessment or certification applies at this tier, and none exists to be obtained, so no such claim is made. Dimmy is not a GPAI model provider: it integrates unmodified third-party models and trains nothing. What applies is Article 50 transparency, in force since 2 August 2026. Per the Commission guidelines of 20 July 2026, dictation, transcription and grammar or style rewriting count as standard editing and carry no output-marking duty; meeting recaps are summaries and do. Machine-readable marking of recap output is being implemented within the 2 December 2026 deadline for products already on the market. Art. 50(1) does not apply (not a conversational agent, never presents as human), nor does Art. 50(3) (no speaker identification from voiceprint, no emotion inference, no biometric categorisation), nor Art. 50(4) (no synthetic media of real people). Full statement: https://dimmy.app/data-and-ai/ and https://dimmy.app/privacy/#ai. This is a self-assessment, not legal advice or certification. ## Roadmap Dimmy is built one platform at a time. Voting decides priority: the first platform to reach **1,000 GitHub stars** gets built next. Most-requested: iOS (system-wide dictation), Android (Gboard alternative), Apple Watch, visionOS. Speaker labels on Linux and deeper accessibility are on the near-term list. Won't have: full text editor, screen recording, cloud sync, browser extension, or Electron/WebView anything. ## License [AGPL-3.0](https://github.com/KonradDallaOrg/dimmy/blob/main/LICENSE). Free to use, modify, and redistribute. If you offer a modified version as a network service, your source must remain open under the same license (Section 13). Paid Pro and Lifetime plans are a convenience layer (signed binaries, updates, support) on top of the same open-source code. ## Acknowledgements Dimmy stands on the shoulders of [whisper.cpp](https://github.com/ggerganov/whisper.cpp) (local transcription), [llama.cpp](https://github.com/ggerganov/llama.cpp) (optional local LLM), [cpal](https://github.com/RustAudio/cpal) (audio capture), [libadwaita](https://gitlab.gnome.org/GNOME/libadwaita) (GTK4 widgets), [Velopack](https://velopack.io/) (Windows installer and auto-update), and the cloud providers Groq, OpenAI, Deepgram, Google Gemini, Anthropic, OpenRouter, Together, and Fireworks. ## Support General contact: hi@dimmy.app. Bug reports and feature requests: [GitHub issues](https://github.com/KonradDallaOrg/dimmy/issues). Security disclosures: security@dimmy.app. Support the project: [GitHub Sponsors](https://github.com/sponsors/KonradDallaOrg). Built with espresso and Claude Code.