A native macOS menu bar app for speech-to-text dictation — built for Hindi + English (including code-mixed Hinglish), and private by default. Local transcription runs on-device via OpenAI Whisper; an optional Sarvam AI cloud engine delivers the best Hindi accuracy available.
🔒 Private by Default - The local Whisper engine keeps everything on your Mac: no cloud, no telemetry, no subscriptions.
🇮🇳 Hindi + English, Properly - Choose the Sarvam AI engine (Saaras v3) for the best Hindi/Hinglish accuracy — roughly half the word-error rate of Whisper large-v3 on spontaneous Hindi — with a code-mix mode that keeps Hinglish natural. Saaras v3 supports 22 Indian languages (Hindi, Tamil, Telugu, Bengali, Marathi, Gujarati, Kannada, Malayalam, Punjabi, Odia, and more) plus Indian English, with automatic language detection. Needs a free API key from dashboard.sarvam.ai; falls back to local Whisper automatically if the network fails.
📖 Personal Dictionary - Teach it the words engines keep getting wrong (names, acronyms, course codes). Corrections are whole-word, case-insensitive, and apply to every transcript.
🎨 Beautiful Native UI - Retro-inspired design with modern refinement, featuring a menu bar app and full window interface.
🎙️ Real-time Recording - Record directly from your microphone with live audio level visualization.
📁 File Transcription - Drag & drop audio files (MP3, WAV, M4A, etc.) for batch transcription.
🌍 Multi-language Support - Transcribe in 50+ languages including English, Spanish, French, German, Chinese, Japanese, and more.
📊 Multiple Model Sizes - Choose from 5 model sizes (tiny to large) based on your needs and hardware capabilities.
💾 History & Search - Automatic history saving with full-text search across all transcriptions.
📤 Export Options - Export as Text, Markdown, JSON, or SRT subtitle format.
⚡ Apple Silicon Optimized - Leverages Metal and Accelerate frameworks for blazing-fast performance on M1/M2/M3 Macs.
⌨️ Global Hotkey, Two Ways - Tap Cmd+Shift+Space to start/stop, or hold it down and release — walkie-talkie style. Text is automatically inserted at your cursor and copied to clipboard.
⏱️ Live Recording Indicator - A floating pill follows your cursor showing elapsed time and your real voice level; the menu bar icon turns red while recording and purple while transcribing.
🛑 Forgiving by Design - Recordings auto-stop after 2 minutes of silence or 10 minutes total, so a forgotten hotkey never becomes an hour-long recording.
🚀 Auto-Setup - First launch automatically downloads the base model, and Kalam can start itself at login (Settings → General).
🔔 Smart Notifications - Audio/visual feedback when recording starts, stops, transcription completes — and clear, actionable messages when something goes wrong.
(Menu Bar App)
┌─────────────────────────────────────┐
│ 🖋️ Kalam 🕐 ⚙️ │
├─────────────────────────────────────┤
│ │
│ Ready to transcribe │
│ Click record to start │
│ │
│ [Waveform Visualization] │
│ │
│ ● Record │
│ │
│ Model: Base • Language: Auto │
└─────────────────────────────────────┘
Run this in Terminal:
curl -sL https://raw.githubusercontent.com/harshvardhaniimi/kalam/main/install.sh | bashThen right-click the app in Applications and select "Open" (first time only).
-
Clone the repository:
git clone https://github.com/harshvardhaniimi/kalam.git cd whisper-mac -
Build the app:
./build-app.sh
-
Run:
open Kalam.app
Or open Package.swift in Xcode and press ⌘+R.
- Download the latest
Kalam.zipfrom Releases - Unzip and move
Kalam.appto your Applications folder - Remove quarantine (required for apps not notarized with Apple):
xattr -cr /Applications/Kalam.app
- Open the app - Right-click → Open (first time only)
If you want to ship this as your own branded product:
- Edit
release.config.sh(app name, bundle ID, repo links, permission copy) - Run
./scripts/create-release.sh <version>to generate release artifacts - (Optional) Run
./scripts/notarize-release.sh <version>for Developer ID notarization - See
archive/LAUNCH_BLUEPRINT.mdfor additional Gumroad/App Store planning notes
- Launch the app - A waveform icon will appear in your menu bar
- Wait for auto-download - The base model (142 MB) downloads automatically on first launch
- Grant permissions - Allow Microphone and Accessibility access when prompted
- You're ready! - Press Cmd+Shift+Space from anywhere to start recording
The fastest way to transcribe — two styles, same key:
- Tap to toggle: press Cmd+Shift+Space, speak, press it again to stop and transcribe.
- Hold to talk: hold Cmd+Shift+Space down, speak, release — great for quick one-liners.
Either way, the text appears at your cursor and is copied to the clipboard. A floating indicator near your cursor shows the elapsed time and your live voice level while recording.
Example: Writing an email? Click in the email body, press Cmd+Shift+Space, speak your message, press Cmd+Shift+Space again. The transcribed text appears in your email!
- Click the menu bar icon
- Click "Record" and speak
- Click "Stop Recording" when done
- Copy to clipboard to use the text elsewhere
- Drag & drop an audio file into the main window
- Wait for processing (varies by file length and model size)
- Copy or export the transcription
Two engines (Settings → Transcription Engine):
| Engine | Where it runs | Best for | Needs |
|---|---|---|---|
| Local Whisper | On your Mac | Privacy, offline use, English | A downloaded model |
| Sarvam AI (Saaras v3) | Cloud API | Hindi, Hinglish, code-mixed speech | Free API key from dashboard.sarvam.ai |
Local Whisper models (Settings → Speech Models):
| Model | Size | Speed | Best For |
|---|---|---|---|
| Tiny | 75 MB | ⚡⚡⚡⚡ | Quick English notes |
| Base | 142 MB | ⚡⚡⚡ | General English use |
| Small | 466 MB | ⚡⚡ | Better English accuracy |
| Medium | 1.5 GB | ⚡ | High accuracy |
| Large Turbo | 1.6 GB | ⚡⚡ | Hindi + English — the only usable local option for Hindi |
| Large | 3.1 GB | ⚡ | Maximum accuracy, slowest |
Recommendation: use Sarvam for Hindi/Hinglish dictation and Large Turbo as your local model. The tiny/base/small models are effectively English-only — their Hindi word-error rates are far too high for real use.
- macOS 14.0 (Sonoma) or later
- RAM:
- 8 GB minimum (for tiny/base models)
- 16 GB recommended (for small/medium models)
- 32 GB for large model
- Storage: 100 MB - 3 GB per model
- Microphone (for recording)
Performance Notes:
- Apple Silicon (M1/M2/M3) provides ~10x better performance than Intel
- Base model on M1: ~6 seconds to transcribe 1 minute of audio
- Real-time transcription possible on Apple Silicon with small models
🔒 Private by default, honest about the exception:
- ✅ With the local Whisper engine (default), all processing happens on your Mac — audio never leaves your device, no internet needed after the model download.
⚠️ With the optional Sarvam AI engine, recorded audio is sent to Sarvam's servers for transcription — that's the trade for the best Hindi accuracy. Switch engines any time in Settings.- ✅ No data collection or telemetry in the app itself.
- ✅ Transcription history is stored locally only.
- ✅ Your Sarvam API key is stored in the macOS Keychain, never in plaintext.
Models are downloaded once from Hugging Face and stored locally:
~/Library/Application Support/Kalam/models/
Architecture:
- Language: Swift 5.9+
- UI Framework: SwiftUI
- Audio: AVFoundation
- ML Backend: OpenAI Whisper via WhisperKit (CoreML)
- Acceleration: Apple Neural Engine + CoreML on Apple Silicon
Design Philosophy:
- Native macOS design patterns
- Retro-inspired but modern aesthetic
- Clean, minimal interface
- Keyboard-first workflow
- Subtle, purposeful animations
- Cmd+Shift+Space (anywhere in macOS) - Tap to start/stop recording, or hold to talk; text auto-inserts at cursor
⌘+C- Copy transcription
The global hotkey (Cmd+Shift+Space) works out of the box - no Accessibility permissions required for the hotkey itself!
You can:
- Record from any application
- Have text automatically inserted at your cursor
- Text is also copied to clipboard as backup
Note: Text insertion at cursor still requires Accessibility permissions.
- Core transcription functionality
- Menu bar app interface
- Full window interface
- Model management with auto-download
- History with search
- Export functionality
- Global hotkey (Cmd+Shift+Space) for quick recording
- Hold-to-talk (press and hold the hotkey, release to transcribe)
- Text insertion at cursor position
- Audio/visual feedback notifications
- Sarvam AI engine for Hindi/Hinglish (with automatic local fallback)
- Whisper large-v3-turbo model for local multilingual use
- Personal dictionary (custom vocabulary corrections)
- Auto-stop on silence / maximum duration
- Launch at login
- Live recording indicator with elapsed time
- Streaming transcription (real-time results via Sarvam WebSocket)
- Speaker diarization
- Timestamp display
- Configurable hotkey (currently Cmd+Shift+Space - no permissions required)
- App Store distribution
Contributions are welcome! Please feel free to submit pull requests or open issues.
App doesn't appear in menu bar:
- Check that
LSUIElementis set in Info.plist - Restart the app
Global hotkey (Cmd+Shift+Space) not working:
- Make sure the hotkey is enabled in Settings
- Check if another app is using the same hotkey (e.g., Spotlight, another app)
- Restart the app
Text not inserting at cursor:
- Enable Accessibility permissions (see above)
- The text is always copied to clipboard as a backup - use Cmd+V to paste
- Make sure you're focused in a text input field
Microphone not working (checkbox looks enabled but recording fails):
- macOS ties permissions to the app's code signature; after updating Kalam the old grant can go stale even though the checkbox stays on.
- Fix:
tccutil reset Microphone io.kalam.appin Terminal, relaunch Kalam, and allow when prompted. - Same idea for paste-at-cursor: remove the Kalam entry in System Settings → Privacy & Security → Accessibility and re-add
/Applications/Kalam.app.
Sarvam engine errors:
- Check the API key in Settings (get one at dashboard.sarvam.ai) and your internet connection.
- Kalam automatically falls back to the local Whisper model when Sarvam is unreachable, so download a local model as a safety net.
Model didn't auto-download on first launch:
- Check internet connection
- Go to Settings and manually download the base model
- Check ~/Library/Application Support/Kalam/models/
Poor transcription quality:
- Try a larger model (small or medium)
- Ensure good audio quality (clear voice, minimal background noise)
- Check microphone input levels
- Speak clearly and avoid background noise
Slow performance:
- Use a smaller model (tiny or base)
- Close resource-intensive apps
- Check Activity Monitor for CPU/RAM usage
Model download fails:
- Check internet connection
- Try again (downloads can be large)
- Manually download from Hugging Face if needed
To completely remove Kalam and all its data:
curl -sL https://raw.githubusercontent.com/harshvardhaniimi/kalam/main/uninstall.sh | bashOr manually:
- Quit Kalam
- Delete
/Applications/Kalam.app - Delete
~/Library/Application Support/Kalam/(contains models and history)
We welcome your feedback! This project is actively maintained and we'd love to hear from you:
- 🐛 Bug Reports: Open an issue with detailed steps to reproduce
- 💡 Feature Requests: Describe the feature and why it would be useful
- 🔧 Pull Requests: Contributions are welcome! Please open an issue first to discuss major changes
- 💬 General Feedback: Share your experience using Kalam
This application was entirely vibe coded using Claude Code - Anthropic's AI coding assistant. The entire codebase, from architecture to implementation, was developed through conversational AI pair programming. We believe this represents an exciting new paradigm in software development.
If you encounter any quirks or have suggestions for improvement, please don't hesitate to reach out!
- OpenAI Whisper - The incredible speech recognition model: https://github.com/openai/whisper
- WhisperKit - Swift-native Whisper on Apple platforms: https://github.com/argmaxinc/WhisperKit
- Design inspiration - Apple HIG, Claude.ai, classic Mac apps
MIT License - see LICENSE file for details.
This project uses OpenAI's Whisper model, which is also licensed under MIT.
- 🐛 Report issues on GitHub
- ⭐ Star the project if you find it useful!
Created with Claude Code by Dr. Harshvardhan
- 🌐 Website: harsh17.in
- 💻 GitHub: @harshvardhaniimi
- 🔗 LinkedIn: harshvardhaniimi
- 🧵 Threads: @harsh17.in
- 📧 Email: hello@harsh17.in
Note: This app is not affiliated with OpenAI or Anthropic. Whisper is an open-source model created by OpenAI.