A tiny macOS audio recorder that captures your microphone and the system audio at the same time, cancels the speaker → mic echo with WebRTC AEC, and transcribes the result locally with whisper.cpp. No cloud, no Python, no subscription.
- Mic + system audio in one WAV. ScreenCaptureKit taps the system output natively; no virtual audio driver, no BlackHole / Loopback dance.
- Acoustic Echo Cancellation (WebRTC AudioProcessing). Record meetings on speakers without the doubled-voice effect.
- Local transcription via
whisper.cppwith Metal acceleration. Models stay on disk under~/Library/Application Support/io.dbr.rekk/models/. Nothing leaves the machine. - Streaming segments: transcript lines appear as Whisper decodes them, not at the end.
- Compact LCD-handheld UI that pins to a corner of your screen while you work.
- Pause / resume, per-source mute (mic / system), language selector (ES / EN / Auto), re-transcribe in another language at any time, files browser with
reveal in Finder.
- macOS 11+ (Apple Silicon recommended; Metal backend kicks in there).
- About 600 MB free for the default
smallWhisper model (other sizes available from inside the app). - Microphone permission and Screen & System Audio Recording permission (the app walks you through them under
setup).
Download Rekk_<version>_aarch64.dmg from the Releases page, open it, drag Rekk.app to /Applications.
The binary is not notarized — first launch will need a right-click → Open → Open to dismiss Gatekeeper, or xattr -dr com.apple.quarantine /Applications/Rekk.app.
# one-time toolchain (Homebrew)
brew install cmake meson ninja
# clone + run
git clone https://github.com/danibram/rekk
cd rekk
npm install
npm run tauri build # → src-tauri/target/release/bundle/macos/Rekk.app
# → src-tauri/target/release/bundle/dmg/Rekk_*.dmgThe first build compiles whisper.cpp (with Metal) and webrtc-audio-processing from source — expect 2–4 minutes once, cached afterward.
For development hot-reload:
npm run tauri dev┌────────────────────────────────────────────────────────────┐
│ React UI │
│ topbar · LCD strip · controls · drawer (files/tx/setup) │
└────────────────────────┬───────────────────────────────────┘
│ Tauri IPC (invoke + event)
▼
┌────────────────────────────────────────────────────────────┐
│ Rust backend │
│ │
│ CPAL ─┐ ScreenCaptureKit ─┐ │
│ │ │ │
│ ▼ ▼ │
│ mic stream ───► WebRTC AEC ◄── system audio │
│ │ │
│ ▼ │
│ mixed WAV file ───► whisper.cpp (Metal) │
│ │ │
│ ▼ │
│ .txt transcript │
└────────────────────────────────────────────────────────────┘
Key crates: cpal, screencapturekit-rs, webrtc-audio-processing, whisper-rs, hound for WAV I/O, tauri v2 for the shell.
On first record Rekk prompts for:
- Microphone — captures your voice.
- Screen & System Audio Recording — required by ScreenCaptureKit to tap the audio. Rekk never reads pixels; if you only want to grant the audio sub-permission, see below.
If you don't want Rekk to be able to see your screen, macOS 14.4 added a sub-permission specifically for this case. After the first prompt:
- Open System Settings → Privacy & Security → Screen & System Audio Recording.
- Scroll down to the System Audio Recording Only section.
- Enable Rekk there and leave Rekk disabled in the upper "Screen & System Audio Recording" list.
A future migration to the Core Audio Process Tap API (NSAudioCaptureUsageDescription) would make this the default and skip the screen recording prompt entirely.
Every rebuild produces a binary with a new ad-hoc code signature, which macOS treats as a different app. The toggle in System Settings stays on but TCC denies access. Rekk's setup → reset & restart button runs tccutil reset for the bundle id and relaunches the process so macOS re-prompts cleanly.
- Georgi Gerganov for whisper.cpp and the GGML model format hosted on huggingface.co/ggerganov/whisper.cpp.
- The WebRTC team for the AudioProcessing module, repackaged by PulseAudio and then by tonarino for Rust.
- doom-fish/screencapturekit-rs for the safe Rust bindings to ScreenCaptureKit.
- tazz4843/whisper-rs for the whisper.cpp bindings.
- The Tauri project for the shell.

