LocalVoice Notes is a private macOS menu-bar dictation app. Tap and release the
right Option key to start recording, speak in Dutch or English, and tap it again
to stop. Transcription runs locally through whisper.cpp; the resulting note is
stored on the Mac and copied to the clipboard.
- Apple Silicon Mac running macOS 15 or newer
- Xcode 26+ (SwiftData's compiler plug-in is not included in Command Line Tools alone)
- Approximately 600 MB for the speech model
- Internet access only for the initial build dependency and first-run model download
./scripts/build-app.shThe build script bootstraps the pinned, checksum-verified whisper.cpp XCFramework
into the ignored Vendor directory before compiling.
The assembled app is written to .build/LocalVoice Notes.app. To copy it into
Applications:
./scripts/install-app.shFor a stable Input Monitoring permission, sign with an Apple Development identity:
LOCALVOICE_CODE_SIGN_IDENTITY="Apple Development: Your Name (TEAMID)" ./scripts/build-app.shThe default build uses an ad-hoc signature and is suitable for local testing, but macOS may ask for Input Monitoring permission again after rebuilding it. The local entitlement permits the bundled, checksum-verified whisper framework to load without an Apple Development Team signature. Remove that entitlement for a properly team-signed distribution build.
- Allow microphone access.
- Allow Input Monitoring so the app can observe a solo right Option tap.
- Download the verified
large-v3-turbo-q5_0model. - Finish setup to enable launch at login.
After the model is installed, recording, transcription, note storage, search, editing, export, and clipboard copying work without a network connection. The app contains no telemetry, cloud sync, update checks, or transcription API integration.
Notes, the model, and temporary recovery audio live in the app's sandbox container. Audio is deleted only after its transcript has been saved successfully. Failed or interrupted jobs remain visible in the notes window with Retry and Delete controls.
./scripts/bootstrap-whisper.sh
LOCALVOICE_SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
env CLANG_MODULE_CACHE_PATH=/tmp/localvoice-clang-cache \
SWIFTPM_MODULECACHE_OVERRIDE=/tmp/localvoice-swiftpm-cache \
SDKROOT="$LOCALVOICE_SDKROOT" \
swift test --disable-sandbox