Voice typing from your terminal.
A simple CLI tool that gives you fast voice typing in every Mac app. Instant speech-to-text from your terminal to your cursor with one hotkey - works with Claude Code, Cursor, and any macOS application.
It just works:
npm install -g speech2type && s2t start- β‘οΈ Real-time transcription: Your words appear instantly as you speak
- π» Works everywhere: Claude Code, Cursor, Slack, Chrome, Lovable... any Mac app with text input
- π― Inline-typing: Text is inserted directly at the cursorβs position (no clipboard involved).
- πΈ Completely free: Open source with free Deepgram API tier
- π 40+ languages: English, Spanish, French, German, Japanese, Chinese, and many more
- Developers: Vibe coding in any environment (Claude Code CLI, Cursor IDE, etc.)
- Creators: Dictating in any text editor
- Productivity: Quick voice input in Slack, email, and more
npm install -g speech2type# Start the application
# s2t or s2t start
s2t start
# Follow the setup wizard to:
# 1. Get your FREE Deepgram API key from https://deepgram.com
# 2. Configure your language preference (default: English)
# 3. Set up your hotkey (default: β;)
# 4. Grant microphone and accessibility permissions- Start the app: Run
s2t startin your terminal - Position your cursor: Click in where you want text to appear
- Press your hotkey: Default is β; to start listening
- Speak: Your words will appear in real-time at your cursor
- Press hotkey again: Stop listening
That's it! You now have voice typing in every Mac app.
- macOS 13+ with Apple Silicon
- Node.js 18+
- Deepgram API key (free tier available, no credit card required)
- Xcode Command Line Tools (only for development)
Speech2Type requires two permissions that will be requested on first run:
- Microphone access: To capture your voice
- Accessibility access: To listen global hotkeys
- Automation access - System Events: To inject text into other applications
Grant these permissions in System Settings β Privacy & Security for your terminal app from which you run Speech2Type!
s2t config# Change hotkey combination (default: β;)
s2t config --hotkey
# Select language for speech recognition (default: English)
s2t config --language
# Update your Deepgram API key (or set the DEEPGRAM_API_KEY environment variable)
s2t config --deepgram-api-keySpeech2Type supports 40+ languages including:
- Bulgarian: bg,
- Catalan: ca,
- Chinese (Mandarin, Simplified):zh, zh-CN,zh-Hans,
- Chinese (Mandarin, Traditional):zh-TW,zh-Hant,
- Chinese (Cantonese, Traditional): zh-HK,
- Czech: cs,
- Danish: da, da-DK,
- Dutch: nl,
- English: en, en-US, en-AU, en-GB, en-NZ, en-IN,
- Estonian: et,
- Finnish: fi,
- Flemish: nl-BE,
- French: fr, fr-CA,
- German: de,
- German (Switzerland): de-CH,
- Greek: el,
- Hindi: hi,
- Hungarian: hu,
- Indonesian: id,
- Italian: it,
- Japanese: ja,
- Korean: ko, ko-KR,
- Latvian: lv,
- Lithuanian: lt,
- Malay: ms,
- Norwegian: no,
- Polish: pl,
- Portuguese: pt, pt-BR, pt-PT,
- Romanian: ro,
- Russian: ru,
- Slovak: sk,
- Spanish: es, es-419,
- Swedish: sv, sv-SE,
- Thai: th, th-TH,
- Turkish: tr,
- Ukrainian: uk,
- Vietnamese: vi
See supported languages for the up-to-date full list.
# Clone the repository
git clone https://github.com/gergomiklos/speech2type.git
cd speech2type
# Install dependencies
npm install
# Build Swift components
npm run build
# Run in development mode
npm run devspeech2type/
βββ bin/ # Executable scripts
β βββ speech2type # Main CLI entry point
βββ src/ # JavaScript source code
β βββ index.js # Main application logic
β βββ config.js # Configuration management
β βββ services/ # Core services
β βββ hotkey.js # Global hotkey management
β βββ transcriber.js # Deepgram integration
β βββ typer.js # Text injection via osascript
| βββ permission.js # macOS permission handling
βββ data/ # Language data
β βββ languages.json # Supported languages
βββ swift/ # Native Swift components
βββ hotkey-manager.swift # Global hotkey capture
βββ mic-recorder.swift # Audio recording
βββ permission-checker.swift # System permissions
1. "Permission denied" errors
-
Grant microphone access to your terminal app in System Settings β Privacy & Security β Microphone
-
Grant accessibility access to your terminal app in System Settings β Privacy & Security β Accessibility
Important: the terminal app must be the one that is running Speech2Type. Common terminal apps: Terminal (built-in macOS terminal), Cursor (integrated in-app terminals), Warp, VS Code...
2. "Command not found: s2t"
- Reinstall globally:
npm install -g speech2type - Check your PATH includes npm global binaries
3. "Hotkey not working"
- Check for conflicts with other applications
- Reconfigure hotkey with:
s2t config --hotkey - Ensure permissions are granted
4. "Text not appearing"
- Ensure your deepgram api key is correct
- Check your microphone is working
- Check you have internet connection
- Ensure permissions are granted
5. "Text not appearing in secure fields"
- This is by design - secure input fields (passwords) don't accept simulated typing
- Speech2Type works in regular text fields only
6. "How to get a Deepgram API key?"
-
Go to https://deepgram.com/
-
Sign up for a free account
-
Click on "API Keys"
-
Click on "Create API Key"
-
Copy the API key
-
Run
s2t config --deepgram-api-keyand paste the API keyThe free tier includes more than 50 hours of credits. No credit card required.
FAQ: https://speech2type.com/faq
Run with debug output for troubleshooting:
DEBUG=1 s2t start- Documentation: This README and inline help (
s2t --help) - Issues: GitHub Issues
- Discussions: GitHub Discussions
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes: Follow the existing code style
- Test thoroughly: Ensure your changes work on macOS
- Submit a pull request: Describe your changes clearly
- Code style: Follow existing JavaScript and Swift patterns
- Testing: Test on multiple macOS versions when possible
- Documentation: Update README for new features
- Permissions: Be mindful of security and privacy implications
Deepgram provides real-time streaming, higher accuracy, wider language support with reasonable low cost and developer-friendly APIs, allowing Speech2Type to remain native and lightweight (Speech2Type is not affiliated with Deepgram).
This project is licensed under the MIT License - see the LICENSE file for details.
If Speech2Type helps your workflow, consider:
- Starring the repository
- Reporting bugs and suggesting features
- Improving documentation
- Contributing code
- Sharing with others who might benefit
Speech2Type - If you can type there, you can speak there.
Official website: https://speech2type.com
Built with β€οΈ