For developers
Mumbli is open source, MIT-licensed, and built entirely on Apple system frameworks with zero external dependencies.Quick start
Cmd+R) in Xcode.
API keys
Create a.env file in the project root:
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.
HotkeyManageruses the Carbon framework to detect it. - Accessibility API for text injection —
TextInjectorusesAXUIElementto 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:- XML boundary — Raw transcription wrapped in
<dictation>tags - Injection-hardened prompts — LLM forbidden from adding content beyond what was spoken
- 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 inbenchmarks/:
Contributing
Mumbli uses conventional commits:| Prefix | Effect |
|---|---|
feat: | Minor version bump |
fix: | Patch version bump |
docs: | No release |
chore: | No release |
Releases
Releases are automated:- Push to
main(directly or via PR merge) release-pleaseopens a Release PR with generated changelog- Merge the Release PR → version bumped, tag created, DMG built and attached
project.yml using XcodeGen.