Yahoo! KeyKey 2 is an independent, open-source rebuild — in Swift — of the classic Yahoo! KeyKey (Yahoo!奇摩輸入法) Traditional-Chinese input method that many Mac users loved. It brings the familiar Cangjie (倉頡) and Simplex (速成) typing experience back to modern macOS — native, fast, and free.
- Requirements
- Install
- Features
- Cangjie generation (倉頡版本)
- Troubleshooting
- Building from source
- Tests
- Contributing
- Credits
- License
- macOS 26 Tahoe or later
- A Mac with Apple Silicon — there is no Intel version
- Signed with a Developer ID and notarized by Apple, so it opens without warnings
Important
Whichever way you install, log out and back in afterwards. macOS only looks for new input methods when you log in — this is the most common reason KeyKey seems not to work.
brew install --cask teddychan/tap/yahoo-keykey-2The cask lives in teddychan/homebrew-tap and is updated automatically on every release.
- Download the
.zipfrom the latest release and unzip it. There is no installer, so no admin password is needed. - Move
YahooKeyKey2.appinto~/Library/Input Methods/— create the folder if it is not there. - Log out and back in.
- Add the input source under System Settings ▸ Keyboard ▸ Input Sources ▸ + ▸ Traditional Chinese → 倉頡 and/or 速成.
- Press ⌃Space to switch to Yahoo! KeyKey 2 and start typing. Space or
1–9picks a candidate; the arrow keys page through them.
Not showing up? See known issues.
- In-app: open the input menu from the menu bar and choose 檢查更新…
- Homebrew:
brew upgrade --cask yahoo-keykey-2 - Manual: download the newest
.zipand replace the app
Log out and back in afterwards, so macOS reloads the input method.
- Remove the input source first: System Settings ▸ Keyboard ▸ Input Sources, select Yahoo! KeyKey 2 and remove it. The app's own Uninstall pane cannot do this part for you.
- Then remove the app — Homebrew:
brew uninstall --cask teddychan/tap/yahoo-keykey-2; otherwise open 設定… ▸ 解除安裝, or drag~/Library/Input Methods/YahooKeyKey2.appto the Trash. - Log out and back in.
The 解除安裝 pane also clears your settings, learning data and cache. If you deleted the app by hand and want those gone too:
rm -f ~/Library/Preferences/com.dragonapp.inputmethod.yahoo-keykey.plist
rm -rf ~/Library/Caches/com.dragonapp.inputmethod.yahoo-keykey
rm -rf ~/Library/HTTPStorages/com.dragonapp.inputmethod.yahoo-keykey- 倉頡 and 速成 — both classic modes, with
*as a wildcard for when you cannot remember every radical. - 拼音 (Pinyin) — a third mode that builds whole phrases from pinyin without tones;
'splits ambiguous syllables, soxi'angives 西安. - Candidates that learn, or stay put — by default the characters you pick move up the list. Turn 依選字習慣調整候選字順序 off in Settings and the built-in order stands, across all three modes and 聯想字詞 alike.
- Associated words (聯想字詞) — after you commit a character, KeyKey suggests the words that
usually follow, pickable with
1–9orShift + 1–9. - 繁 → 簡 and full-width punctuation — toggle both straight from the input menu.
- Candidate window that follows your cursor — never clipped off-screen, paged with the arrow keys, Space or Page Up / Page Down, at whatever size you set.
- See the code (反查/拆碼提示) — show each candidate's 倉頡 code, or its pinyin reading.
- 臨時英數 — hold Shift and press a letter to type that one English letter without switching input source.
- Backup and restore — save your settings to a folder from 設定… and bring them back later, handy when setting up a new Mac.
- Free and open source — MIT licensed, signed and notarized, with in-app updates.
Note
Yahoo! KeyKey 2 is not affiliated with, or endorsed by, Yahoo. It is an independent project that exists to honor the original work and keep a KeyKey-style experience alive on modern macOS.
Choose the decomposition table in 設定… ▸ 輸入方式. It drives both 倉頡 and 速成, and applies immediately.
| Mode | Based on | Candidate order | Example codes |
|---|---|---|---|
| 五代倉頡 (default) | ibus cangjie5 |
corpus frequency | 面 一田尸中, 鬼 竹山戈 |
| 三代倉頡 (Yahoo! KeyKey compatible) | original Yahoo! KeyKey tables | Yahoo's original order | 面 一田卜中, 鬼 竹戈 |
五代 is the default, so existing users are unaffected until they opt in. Both orders are fixed, and in 倉頡/速成 each is the tie-breaker rather than a score the learning layer adjusts: with 依選字習慣調整候選字順序 on, every candidate list is ordered by how often you have committed each candidate in that list, and the table order decides between candidates you have committed equally often. Turning it off shows the table order alone — so 三代 with learning off is the original Yahoo! KeyKey order and nothing else. Usage is counted per candidate list, so a 倉頡 code, a 倉頡 wildcard pattern and a 速成 code each learn separately, while 倉頡 and 速成 share what they learn about 聯想字詞. 拼音 is outside that scheme: it ranks candidates as it always has, and the same setting turns its learning on and off.
Yahoo! KeyKey's associated-phrase ranking cannot be reproduced — that data was never open-sourced — so associations use Yahoo! KeyKey 2's own ordering in both modes.
Common problems, and what each one turns out to be, are collected in known_issues.md:
| Problem | |
|---|---|
| It does not show up after installing | #1 |
| 倉頡 is greyed out and will not turn on | #2 |
| A character's code is not what you expect | #3 |
| Space pages instead of accepting your code | #4 |
| Typing a number inserts a word | #5 |
That file also lists what has already been fixed, so check your version before reporting a bug. Anything else — open an issue.
There is no Xcode project: the app is assembled by shell scripts around swiftc, and the test
suites are SwiftPM packages. Requires the Xcode 26 toolchain on Apple Silicon.
git clone https://github.com/teddychan/yahoo-keykey-2.git
cd yahoo-keykey-2
./tools/build-lm.sh # build the language model into Resources/data.txt (first time only)
./tools/build-app.sh # assemble + ad-hoc sign build/YahooKeyKey2.appFor hands-on testing, ./tools/run-debug.sh builds and installs a separate
Yahoo! KeyKey 2 Debug input method with its own bundle id, so it never collides with an
installed release copy. It reports the target version — the release being developed toward —
so a fix for 2.13.0 builds as v2.13.1 Debug and no modified code ever wears a released number.
See Versioning convention. Signed release builds come
from .github/workflows/release.yml on a v* tag — see
docs/RELEASE.md.
The suite spans two SwiftPM packages. KeyKeyEngine covers the 倉頡 and 速成 tables (both 五代
and 三代), code lookup and wildcard matching, frequency ranking and the adaptive walker,
associated phrases (聯想字詞), 拼音 segmentation, and 繁 → 簡 conversion. KeyKeyApp covers
preferences, key-event policy, and input-engine conformance across all three modes. CI runs both
on every push and pull request to main.
swift test --package-path Packages/KeyKeyEngine
swift test --package-path Packages/KeyKeyApp| Metric | Value |
|---|---|
| Test cases | 281 passing (202 engine, 79 app) |
| Line coverage | 98.0% of KeyKeyEngine, 100% of KeyKeyApp |
| Measured on | v2.13.2 (08b6f1c), Swift 6.3.3 |
One further engine test (RealPinyinWalkerTests) skips itself unless Resources/data.txt has
been generated by ./tools/build-lm.sh. Coverage is measured with --enable-code-coverage over
each package's own Sources/, excluding the test files themselves and the vendored DragonKit
dependency.
Bug reports and pull requests are welcome on the issue tracker. Before opening a pull request, run both test suites (see Building from source) and add a plain-language entry to CHANGELOG.md describing the user-visible change. Release mechanics are documented in docs/RELEASE.md.
Yahoo! KeyKey 2 is built in tribute to the original Yahoo! KeyKey (Yahoo!奇摩輸入法). See CREDITS.md for the original projects, data sources, and engine attributions, and docs/THIRD-PARTY-NOTICES.md for full third-party license details.
Yahoo! KeyKey 2 is released under the MIT License. Bundled third-party data keeps its own permissive license — see docs/THIRD-PARTY-NOTICES.md.