Real-time, local desktop dictation.
macOS-first, with experimental Linux and Windows builds.
Audio and transcription stay on-device. No telemetry.
SilentKeys is a desktop dictation app that performs all audio capture and transcription locally on your machine, streaming text into whatever application has focus β no plugins required. The scope is deliberately narrow: local, system-wide speech-to-text and nothing else. It is designed for everyday use on Apple Silicon Macs and remains under active development.
- Target Platform: macOS 14+ on Apple Silicon (M1/M2/M3/M4).
- Secondary Platforms: The release workflow targets Linux and Windows, but those builds remain experimental until their platform acceptance gates pass. Linux builds require glibc 2.39 or newer (Ubuntu 24.04 or Debian 13).
- Resource Footprint (measured on an M-series Mac):
- App executable: approximately 20 MB; signed updater archive approximately 9 MB
- Downloaded model: approximately 683 MB
- Memory usage: approximately 800β900 MB with the model loaded
Note
Status: Beta
The core path is regression-tested on Apple Silicon, but distribution and
broader-corpus accuracy acceptance are still in progress.
- Real-time Dictation: Types text directly into any application as you speak.
- Local Transcription: Audio and transcripts never leave your device.
- Streaming ASR: Uses a pinned INT8 export of NVIDIA Nemotron 3.5, a cache-aware Parakeet/FastConformer-family model, through ONNX Runtime.
- macOS-First: Native feel with global push-to-talk, streaming output, and minimal latency.
- Rust Core: Built for performance, low latency, and stability.
- Lightweight UI: Powered by Tauri v2 and Leptos (no Electron overhead).
- Zero Telemetry: No analytics or tracking.
- Open Source: MIT licensed and free to use.
The Rust core runs a pinned Nemotron 3.5 INT8 model locally through ONNX Runtime
and parakeet-rs. It does not use the separate Parakeet TDT 0.6B v3 model.
- Global Shortcut: The desktop app listens for the configurable push-to-talk shortcut.
- Audio Capture: Captures the system microphone through a real-time-safe ring buffer and resamples to 16 kHz mono.
- Inference: Audio chunks are processed by Nemotron via ONNX Runtime.
- Streaming: Partial transcripts are streamed while audio is captured.
- Virtual Typing: The
Enigocrate drives virtual keypresses to insert text into the focused window.
- macOS 14.0+ (Sonoma) recommended, on Apple Silicon (M1 or newer).
- Xcode Command Line Tools:
xcode-select --install - Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - WebAssembly Target:
rustup target add wasm32-unknown-unknown - Trunk:
cargo install trunk - Tauri CLI:
cargo install tauri-cli --locked
# 1. Clone the repository
git clone https://github.com/gptguy/silentkeys
cd silentkeys
# 2. Run in development mode
cargo tauri devcargo tauri buildThe macOS application bundle will be available at:
target/release/bundle/macos/SilentKeys.app
- Start Dictation: Press and hold β₯Z (Option+Z).
- Speak: Text is typed into the focused application while you hold the shortcut.
- Stop: Release the shortcut.
Preferences can be accessed via the UI to configure:
- Global Shortcut: Customize the hotkey.
- Speech Language: Use deterministic English (US), follow the system locale, enable automatic detection, or select any language prompt exposed by the installed model.
- Streaming Mode: Toggle real-time text visualization.
- Model Path: Manage the location of the ONNX model files.
Model-path changes take effect after the application restarts.
English (US) is the default because an explicit language prompt is more predictable than language detection for English dictation. The language dropdown also offers the operating-system language, automatic detection, and every distinct language prompt declared by the installed Nemotron model. The dropdown uses the first code declared for each prompt so aliases do not create duplicate choices. Accuracy and latency vary by language, accent, audio quality, and hardware.
Prebuilt binaries are published on the GitHub Releases page. Public macOS builds are not yet notarized, so the first updater-enabled release must be installed manually; once installed, the app checks for newer signed releases and installs them automatically.
On first launch, try to open SilentKeys once, then open System Settings β Privacy & Security, scroll to Security, and click Open Anyway. Confirm the warning with Open. Only bypass Gatekeeper for a download you obtained from the SilentKeys releases page. See Apple's guidance for the current macOS steps and security warning.
Install the prerequisites listed under Quick Start, then run:
cargo tauri buildCore
- Improve streaming behavior (partial stability + buffering).
- Add local-only crash reporting (opt-in).
Performance
- Record exact-fixture release performance and real-time factor.
- Benchmark representative dictation corpora against alternative ASR architectures.
- Optimize batching for long dictation sessions.
- Evaluate ONNX Runtime execution providers where they improve measured latency.
Distribution
- Provide signed and notarized DMG releases.
- Create Homebrew tap (
brew install --cask silentkeys). - Implement signed automatic updates.
- Complete two-release updater acceptance on every release target.
SilentKeys is private by default:
- No Cloud Transcription: Speech processing is local; networking is limited to model downloads plus signed update checks and downloads.
- No Analytics: No usage data or metrics are collected.
- Signed Updates: Release builds are configured to check immediately and every six hours, install a newer signed GitHub Release automatically, and request restart.
- Offline Dictation: Dictation continues without an internet connection after the model is downloaded.
Contributions are welcome! Please see CONTRIBUTING.md for guidelines on how to get started.
Licensed under the MIT License.
- Nemotron 3.5 ASR: The local speech model.
- ONNX Runtime: High-performance inference engine.
- Tauri: For the lightweight application framework.
- Leptos: For the reactive frontend.
