A macOS menu bar app that records your meetings (microphone + system audio) and transcribes them locally with WhisperKit. Your recordings and transcripts never leave your Mac.
Website: https://ninilich.github.io/boring-meeting · Download on the App Store
bmeeting CLI for scripts and AI assistantsEvery version bump on main publishes an unsigned DMG on the Releases page, with a .sha256 file to verify the download. These builds are not signed or notarized, so macOS blocks the first launch:
BoringMeeting.app to Applications and try to open it once.Or remove the quarantine flag in Terminal: xattr -dr com.apple.quarantine /Applications/BoringMeeting.app.
git clone https://github.com/ninilich/boring-meeting.git
cd boring-meeting
xcodebuild -scheme BoringMeeting -destination 'platform=macOS' build
Or open BoringMeeting.xcodeproj in Xcode and press Run. The Debug configuration builds without code signing.
To run a signed build, or to produce a Release build, change these in the Xcode project to your own values:
DEVELOPMENT_TEAMPRODUCT_BUNDLE_IDENTIFIER (default org.ninil.boringmeeting, also for the test targets)./build_app.sh --help lists the available build modes.
bmeeting)The app embeds a local HTTP server (loopback only, default port 49484) and a companion CLI. Enable the API and install the CLI in Settings > General > CLI API.
bmeeting list # all meetings (JSON)
bmeeting list --format text # human-readable
bmeeting info <id> # meeting details
bmeeting transcribe <id> --wait # start transcription and wait for it
bmeeting transcript <id> # print the transcript
bmeeting rename <id> "New title" # rename a meeting
Set BMEETING_PORT to override the port.
Audio, recordings and transcripts stay on your device. The app downloads Whisper models from Hugging Face and checks for updates through the App Store. It also sends one anonymous heartbeat per day (truncated hash of the device UUID and the app version) via Heartbeat. Details are in the privacy policy.
If you fork the project, change the bundle identifier or remove Heartbeat.start() in AppDelegate.swift, otherwise your builds will be counted in the original app’s statistics.
See CONTRIBUTING.md. Security issues: SECURITY.md.