Tested on macOS 12 (Monterey) through macOS 15 (Sequoia), Intel and Apple Silicon.
Install Xcode Command Line Tools
Install Node.js 22
Install GStreamer
If pkg-config can't find gstreamer
If pkg-config can't find gstreamer
Homebrew’s
pkg-config path isn’t set. Add the correct line to your ~/.zshrc and restart your terminal:Clone the repo and install dependencies
npm install takes a few minutes. It automatically rebuilds better-sqlite3 for Electron via the postinstall script.Verify:Build the GStreamer echo-cancellation addon
- Installs the addon’s build tools (
cmake-js,node-addon-api) - Verifies all GStreamer libraries and builds the WebRTC DSP plugin from source
- Compiles the C++ echo-cancellation native module
Build the Swift audio capture binary
If swift build fails
If swift build fails
Your Swift toolchain may be too old (5.9+ required). Check with
swift --version. Update Xcode Command Line Tools:Required Permissions
macOS requires explicit user consent for audio capture. On first recording, the app will request these:| Permission | Why it’s needed | How to grant |
|---|---|---|
| Microphone | Capture your voice | System Settings → Privacy & Security → Microphone |
| Screen Recording | Capture system audio via ScreenCaptureKit | System Settings → Privacy & Security → Screen Recording |
| Accessibility (Pro only) | Recall SDK meeting window detection | System Settings → Privacy & Security → Accessibility |
During development, you may need to grant these permissions to your terminal emulator (e.g., iTerm, Terminal.app) rather than the Electron app directly. In production builds, the signed
.app is the target.Troubleshooting
| Symptom | Fix |
|---|---|
build-deps.sh: “gstreamer-1.0 not found” | Revisit Step 3 - check pkg-config --modversion gstreamer-1.0 |
cmake-js compile fails with “cmake not found” | Run npx cmake-js --version - if it fails, delete node_modules inside src/native/aec/ and re-run npm install |
swift build fails with unresolved imports | Swift toolchain too old (5.9+ required) |
npm install fails with node-gyp errors | xcode-select --install - ensure CLI tools are installed |
| No audio captured despite permissions granted | Restart the app - macOS sometimes requires a restart after granting Screen Recording |
No transcript in message for 30+ seconds | Check Deepgram API key validity and network connectivity |