Tested on macOS 12 (Monterey) through macOS 15 (Sequoia), Intel and Apple Silicon.
1
Install Xcode Command Line Tools
2
Install Node.js 22
Install via nvm (recommended). Skip the Close and reopen your terminal, then:Verify:
curl line if you already have nvm.3
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:4
Clone the repo and install dependencies
npm install takes a few minutes. It automatically rebuilds better-sqlite3 for Electron via the postinstall script - you’ll see @electron/rebuild output near the end.Verify:5
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 (Homebrew doesn’t ship it)
- Compiles the C++ echo-cancellation native module
Troubleshooting
Troubleshooting
build-deps.shfails with “gstreamer-1.0 not found”: Revisit Step 3 and make surepkg-config --modversion gstreamer-1.0works.cmake-js compilefails with “cmake not found”: cmake is bundled with cmake-js. Runnpx cmake-js --version- if that fails, deletenode_modulesinsidesrc/native/aec/and re-runnpm install.
6
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:7
Run the app
Required Permissions
macOS requires explicit user consent for audio capture. On first recording, the app will request these: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.