A Chinese input method for macOS that listens, types and translates.
English · 简体中文
TypeAny is a native macOS input method (InputMethodKit) written in Swift. Type pinyin with a well-tuned Rime engine, hold a key to dictate straight into the text field, or write a reply in Chinese and send it in English.
- Pinyin — full rime-ice (雾凇拼音) dictionaries: whole-sentence input, abbreviations
(
wsm→ 为什么), English words and emoji among candidates, 以词定字, dates (rq), a calculator. - Remembers your choices — the candidate you picked last for an input comes first next time,
for single letters (
m→ 吗) as much as full pinyin; word frequencies are learned too. - Next-word suggestions (联想) — after committing, likely next words appear; press 1–5 to pick, any other key to keep typing.
- Voice input — hold the trigger key and speak; text streams into the field as you talk (Apple Speech, local Whisper or a Whisper API), with optional LLM clean-up.
- Write Chinese, send English — ⌃⇧T turns on translate mode: compose in Chinese (typed or spoken), see the English preview, press ↩ to send it. Uses your OpenAI-compatible model, or Apple's on-device translation.
- Typing details — ⇧ toggles 中/英 globally,
baidu.comstays a domain instead of becoming 百度。, and a space is added automatically between Chinese and English (我用 GitHub 写代码). - Native — candidate window under the caret, light/dark mode, guided onboarding.
Download the latest TypeAny-x.y.z.dmg from Releases,
open it and double-click TypeAny. It installs itself into ~/Library/Input Methods, adds
itself to the input menu and opens the onboarding, which walks through permissions and a first try.
Builds are signed with a Developer ID and notarized by Apple.
Requires macOS 14 Sonoma or later on Apple silicon. On-device translation needs macOS 26.
TypeAny asks for Microphone and Speech Recognition (voice input) and Accessibility (the global voice key). It only records while the voice key is held.
| Key | Action |
|---|---|
| ⌃Space / 🌐 | Switch to / from TypeAny (system shortcut) |
| Space · 1–5 | Pick a candidate |
| - = | Previous / next page |
| ↩ | Commit the typed letters as English |
| ⇧ (tap) | Toggle 中 / 英 |
| [ ] | Take the first / last character of a word (以词定字) |
| Hold Fn | Voice input (configurable; right ⌥ avoids conflicts with other apps) |
| ⌃⇧T | Translate mode: ↩ sends English, ⌥↩ / Esc keeps Chinese |
Settings live in the menu bar icon and the input menu (TypeAny Settings…). Model API keys are stored locally and only sent to the provider you configure.
Requirements: macOS 14+, Xcode (SwiftUI macros need the full Xcode, not just the Command Line Tools; macOS 26 SDK for the on-device translation path) and Homebrew packages:
brew install librime opencc librsvg
git clone https://github.com/thinkany-ai/typeany.git
cd typeany
make run # build → install TypeAny Dev into ~/Library/Input Methods → launch| Command | What it does |
|---|---|
make build / make install / make run |
Build / install / install and launch TypeAny Dev |
make install VARIANT=release |
Install the regular TypeAny from source |
make test |
Pinyin candidate-order tests and auto-spacing unit tests |
make release |
Bundle librime, sign, notarize and package DMG + ZIP into dist/ (maintainers) |
make icons |
Regenerate icons from assets/logo/*.svg |
make rime-data |
Rebuild the Rime data (rime-ice + Rime/) |
Local builds are TypeAny Dev: a separate bundle ID (com.typeany.inputmethod.TypeAnyDev), input
source, data folder (~/Library/Application Support/TypeAny Dev), preferences and permissions,
with a Dev label in the menu bar — so developing never touches an installed release and both can
be enabled side by side. Pass SIGN_IDENTITY="Apple Development: …" to keep permissions across
rebuilds.
The first build downloads rime-ice at a pinned revision and prebuilds its dictionaries
(scripts/build-rime-data.sh), and builds the next-word table from librime-predict's corpus
(scripts/build-predict-data.sh).
Sources/TypeAny/
├── App/ entry point, AppDelegate (voice pipeline), self-installer, self-test
├── InputMethod/ IMK controller, Rime wrapper, candidate window, prediction, selection memory
├── Onboarding/ first-run window (runs as a separate process)
├── Speech/ Audio/ speech engines and recording
├── LLM/ OpenAI-compatible refiner and translator
├── HotKey/ MenuBar/ UI/ Preferences/ Utilities/
Sources/CRime/ C shim over librime's API
Rime/ TypeAny schema (on top of rime-ice) and high-frequency abbreviations
Tests/ pinyin candidate tests (C) and auto-spacing tests (Swift)
scripts/ Rime data, prediction data, icons, library bundling, release
assets/logo/ logo sources
./scripts/new-version.sh 0.3.0 # or 0.3.0-beta.1 for a pre-releaseIt bumps the version in Sources/TypeAny/Resources/Info.plist, commits, tags and pushes.
release.yml then bundles librime into the app, signs it with the
Developer ID certificate (hardened runtime), notarizes and staples the app and DMG, and publishes a
GitHub Release. The same steps run locally with make release, using the APPLE_SIGNING_IDENTITY,
APPLE_ID, APPLE_PASSWORD and APPLE_TEAM_ID environment variables. CI secrets are set once
with scripts/setup-release-secrets.sh.
Issues and pull requests are welcome — see CONTRIBUTING.md. Please report security problems privately as described in SECURITY.md.
TypeAny is licensed under AGPL-3.0 © 2026 ThinkAny, LLC. A commercial license without the AGPL's copyleft obligations is available for TypeAny's own code — contact support@thinkany.ai.
Release builds bundle third-party components under their own licenses, notably the rime-ice dictionaries (GPL-3.0) and librime (BSD-3-Clause); see THIRD_PARTY_NOTICES.md.