Skip to main content

For developers

Mumbli is open source, Apache-2.0 licensed, and built entirely on Apple system frameworks with zero external dependencies.

Quick start

Then Product > Run (Cmd+R) in Xcode.

API keys

Create a .env file in the project root:
Or enter keys in the app’s Settings view after first launch. Keys are stored in macOS Keychain.

Requirements

  • macOS 13.0+ (Ventura or later)
  • Xcode 15.0+ (Swift 5.9)
  • No CocoaPods, SPM, or Carthage — zero external dependencies

Architecture

Key design decisions

  • Carbon for Fn key — AppKit doesn’t expose the Fn key. HotkeyManager uses the Carbon framework to detect it.
  • Accessibility API for text injectionTextInjector uses AXUIElement to write text at the cursor. Falls back to clipboard paste.
  • No WebSocket — The app calls STT and LLM APIs directly via URLSession. No backend server needed.
  • Protocol-based services — STT and polishing services conform to protocols, making engine switching trivial.

Build from command line

Safety guards

Polishing LLMs can hallucinate. Mumbli has three layers of defense:
  1. XML boundary — Raw transcription wrapped in <dictation> tags
  2. Injection-hardened prompts — LLM forbidden from adding content beyond what was spoken
  3. RepetitionGuard — Catches sentence explosion, length explosion, and tag leakage. Auto-retries with a better model, then falls back to raw transcription.

Benchmarking

A Python benchmark harness lives in benchmarks/:

Contributing

Mumbli uses conventional commits: PRs must have conventional commit titles (enforced by CI). Releases are fully automated via release-please.

Releases

Releases are automated:
  1. Push to main (directly or via PR merge)
  2. release-please opens a Release PR with generated changelog
  3. Merge the Release PR → version bumped, tag created, DMG built and attached
The app is not code-signed. Users installing from the DMG need to run xattr -cr /Applications/Mumbli.app or use the install script: curl -fsSL https://raw.githubusercontent.com/fireharp/mumbli/main/install.sh | bash
The project can be regenerated from project.yml using XcodeGen.