A lightweight desktop application that plays mechanical keyboard sounds as you type — globally, across any application.
Thockify captures keyboard input system-wide and plays realistic key press and release sounds in real time, with zero perceptible latency. Sound files are pre-loaded into memory and played concurrently, so even the fastest typists won't experience delays or dropped sounds.
- Global keyboard capture — works across all applications, not just inside the app window
- Per-key sounds — distinct sounds for Enter, Backspace, Space, and general keys
- Key-up support — separate sounds for key press and key release events
- Sound packs — switch between different keyboard sound profiles
- Low latency — audio output stream stays open; sounds play instantly via in-memory decoding
- Minimal footprint — small window, low resource usage, no background daemons
Pre-built installers are available on the Releases page. Download the appropriate installer for your platform:
| Platform | Format |
|---|---|
| Windows | .msi or .exe |
| macOS | .dmg |
| Linux | .deb or .AppImage |
Prerequisites: Rust, Node.js (v18+), and Yarn.
yarn install
yarn tauri buildThe compiled binary and installer will be in src-tauri/target/release/bundle/.
- Launch Thockify
- Select a sound pack from the dropdown
- Click Start
- Type anywhere — you'll hear keyboard sounds globally
- Click Stop to disable, or close the app
Sound packs are located in the resources/sound-packs/ directory (inside the app bundle). Each pack is a folder containing:
| File | Description |
|---|---|
config.json |
Pack metadata (name, support-events) |
fallback.wav |
Default key press sound |
fallback-up.wav |
Default key release sound |
enter.wav / enter-up.wav |
Enter key sounds |
backspace.wav / backspace-up.wav |
Backspace key sounds |
spacebar.wav / spacebar-up.wav |
Space bar key sounds |
Create a new folder inside resources/sound-packs/ with the wav files listed above and a config.json:
{
"name": "My Custom Pack",
"support-events": true
}Windows — Works out of the box. No elevated permissions required.
macOS — Requires Accessibility permissions. On first launch, macOS will prompt you to grant access in System Settings > Privacy & Security > Accessibility.
Linux — Requires read access to input devices (/dev/input/). You may need to add your user to the input group:
sudo usermod -aG input $USERLog out and back in for the group change to take effect.
| Component | Technology |
|---|---|
| Framework | Tauri v2 |
| Frontend | React 19, TypeScript, Tailwind CSS v4 |
| Backend | Rust |
| Input capture | rdev |
| Audio playback | rodio |