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.
Enabling Rekk only under System Audio Recording Only does not work today, and the app will fail to capture system audio if you do.
ScreenCaptureKit reaches system audio through SCShareableContent, which enumerates displays and windows — it is the very call that triggers the screen-recording prompt, and it needs the full grant. macOS 14.4's System Audio Recording Only sub-permission applies to the Core Audio Process Tap API (NSAudioCaptureUsageDescription), which Rekk does not use yet.
So: enable Rekk in the upper Screen & System Audio Recording list. Rekk still never reads pixels — it only ever asks ScreenCaptureKit for the audio samples — but macOS has no way to grant that narrower capability for this API.
Migrating to Core Audio process taps would make the audio-only grant sufficient and skip the screen-recording prompt entirely. Until then, the permission is mandatory rather than a convenience.
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.

