# OSGKeyboard **Speak it. It's typed.** Voice input for iPhone, iPad, and Mac. Speak in any app — polished text lands at your cursor. ![Platform](https://img.shields.io/badge/iOS%20%2F%20iPadOS-26%2B-0078D4?logo=apple) ![Platform](https://img.shields.io/badge/macOS-15%2B-555?logo=apple) ![Swift](https://img.shields.io/badge/Swift-6.0-FA7343?logo=swift) ![Version](https://img.shields.io/badge/version-1.7.5-3aa05a) ![License](https://img.shields.io/badge/license-Source%20Available-blue) [Website](https://hkgood.github.io/OSGKeyboard/) · [中文 README](./README.md) · [Privacy Policy](https://hkgood.github.io/OSGKeyboard/privacy/)

Download now from the App Store   Download historical macOS version 1.1

--- ## Why OSGKeyboard - **Works everywhere** — Messages, Notes, Notion, Cursor, Mail, WeChat — wherever you type - **Speak, don't edit** — tap (iOS) or hold Option (Mac); AI adds punctuation and structure for you - **Type in Chinese and English** — iOS keyboard ships full/double pinyin candidates, plus English autocomplete, autocorrect, and next-word prediction - **On-device by default** — local recognition on iOS; optional local models on Mac. Cloud upload only when you opt in - **Bring your own LLM** — local ASR needs no API key; polish and AI mode use your configured DeepSeek, OpenAI, Anthropic, OpenRouter, or compatible service - **Mac global dictation** — menu-bar app, bottom overlay with live feedback, inserts into the frontmost app --- ## Three steps 1. **Install & authorize** — add the iOS keyboard with Full Access; grant mic + Accessibility on Mac 2. **Pick an engine** — local ASR works without a key; add your own API key for polish or AI mode 3. **Start talking** — switch to OSGKeyboard, or hold Option on Mac --- ## Platforms | | iOS / iPadOS | macOS | |---|:---:|:---:| | Keyboard / global hotkey | ✅ | ✅ hold Option | | Chinese typing (full / Microsoft / Sogou double pinyin) | ✅ optional fuzzy pairs | — | | English typing (autocomplete / autocorrect / next-word) | ✅ offline lexicon + personal-dictionary boosts | — | | Local speech recognition | ✅ SpeechAnalyzer | ✅ Qwen3 MLX streaming (0.6B 4-bit default) + Apple Speech fallback | | AI polish | ✅ | ✅ | | Voice AI questions (explicit Insert / Send) | ✅ | — | | Voice-edit last input | ✅ | — | | Post-polish translation | ✅ | ✅ | | Personal dictionary | ✅ iCloud sync; protects polish and boosts English suggestions | ✅ | | Dictation history | ✅ | ✅ | | Live UI | — (silent background keep-alive) | ✅ floating pill | --- ## Privacy Speech is transcribed on-device by default. Audio or text leaves the device only when you actively choose a cloud engine, polish, AI, or a skill, and it goes directly to your configured provider. Clipboard history is off by default, capped at 15 local items, and sent only after an explicit clipboard action. Chinese and English typing learning stays local. API keys use Keychain (optionally iCloud Keychain), while downloaded Mac speech models and local inference remain on the Mac. See the [Privacy Policy](https://hkgood.github.io/OSGKeyboard/privacy/). --- ## Get the app **iPhone / iPad (App Store)** Download now from the App Store **Mac (historical version 1.1, Developer ID signed and notarized)** Download historical macOS version 1.1 ## Build from source Requires macOS with **Xcode 26** and [XcodeGen](https://github.com/yonaskolb/XcodeGen). ```bash git clone https://github.com/hkgood/OSGKeyboard.git cd OSGKeyboard ./Scripts/generate-xcodeproj.sh open OSGKeyboard.xcodeproj ``` Run tests: ```bash xcodebuild test -project OSGKeyboard.xcodeproj -scheme OSGKeyboard \ -destination 'platform=iOS Simulator,name=iPhone 17' ``` --- ## Architecture (brief) ``` OSGKeyboard/ Main iOS app (Flow session host) OSGKeyboardExt/ Custom keyboard extension OSGKeyboardMac/ macOS menu-bar app OSGKeyboardShared/ App/extension shared models, typing, sync, and UI OSGKeyboardHostSupport/ Host-only ASR, cloud, CLM, charts, and StoreKit ``` **Flow session model (iOS):** the host app keeps a long-lived audio session; the keyboard sends start/stop signals via App Group; polished text is delivered back for insertion. **Engine modes:** - `local` — on-device ASR; raw text without a key, optional polish with your configured LLM key - `cloud` — uploads audio to your configured ASR provider, then polishes via LLM See [CHANGELOG.md](./CHANGELOG.md) for release history and [CONTRIBUTING.md](./CONTRIBUTING.md) for PR guidelines. --- ## Adding an LLM provider Append a preset in `OSGKeyboardShared/Models/LLMProvider.swift` — any OpenAI-compatible `/chat/completions` endpoint works out of the box. --- ## Acknowledgements OSGKeyboard's voice and keyboard features build on these projects and platforms: - [Typeless](https://typeless.com) — product inspiration for voice-first input - [Apple SpeechAnalyzer](https://developer.apple.com/documentation/speech) — on-device iOS speech recognition - [librime](https://github.com/rime/librime) and [librime-xcframework](https://github.com/ghostflyby/librime-xcframework) — Chinese input engine and static iOS packaging - [NanoMouse](https://github.com/xjwhnxjwhn/nanomouse) and [Hamster](https://github.com/imfuxiao/Hamster) — references for iOS Rime lifecycle and architecture - [rime-pinyin-simp](https://github.com/rime/rime-pinyin-simp), [Jieba](https://github.com/fxsjy/jieba), [phrase-pinyin-data](https://github.com/mozillazg/phrase-pinyin-data), and [pinyin-data](https://github.com/mozillazg/pinyin-data) — pinyin, phrase, and frequency data - [mlx-audio-swift](https://github.com/Blaizzy/mlx-audio-swift) — local Qwen3 MLX streaming ASR on macOS - [Google Material Icons](https://github.com/google/material-design-icons) — icon font used by the iOS app See [Third-Party Notices](./NOTICE-TYPING.md) for exact versions and licenses (Chinese Rime stack plus the OSG-owned English lexicon notice), or open Settings → About → Third-Party Licenses in the app. --- ## License [Source Available License](./LICENSE) — this is not an open-source license. Personal, non-commercial local use is permitted; redistribution and public derivatives require permission. Commercial licensing: [rocky.hk@gmail.com](mailto:rocky.hk@gmail.com).