CJK and IME input
Korean, Japanese, and Chinese IMEs work through iOS in the terminal, in coding-agent prompts, and in chat mode — plus the locale your host needs for UTF-8 output.
Moshi uses iOS's native IMEs, so any keyboard installed on your phone — Korean, Japanese, Chinese, Vietnamese, and others — is available in the terminal.
What works
- Korean (2-Set, 3-Set), Japanese (Romaji, Kana), Chinese (Pinyin, Stroke, Cangjie, Zhuyin) and other iOS-native IMEs in the terminal.
- Plain shells (
zsh,bash,fish) — typing, editing, and pasting CJK text works as expected. - Coding-agent prompts — Claude Code, Codex, OpenCode, Gemini, Cursor, Kimi, and Qwen accept CJK composition, including Korean syllable composition and Japanese kana-to-kanji conversion.
- Chat-mode composer — also handles every IME cleanly because it is a regular iOS text field. Useful when you want to review a long CJK prompt before sending.
- Image paste, dictation, and clipboard paste of CJK text.
- Output rendering of CJK characters when the host has a UTF-8 locale (
LANG=en_US.UTF-8or similar).
If a TUI breaks composition
Some terminal apps swallow IME composition events in unusual ways. If that happens, switch to chat mode — it's a native iOS text field outside the TUI, so any IME you have installed composes there without surprises. Send when you are ready and the result lands in the agent or shell as one clean message. See Voice and dictation.
Host requirements
The remote shell needs a UTF-8 locale to render CJK output:
$export LANG=en_US.UTF-8$export LC_ALL=en_US.UTF-8
Add these to ~/.zshenv (zsh) or the non-interactive section of ~/.bashrc so SSH and mosh sessions inherit them.
Reporting an issue
Use Settings -> Support and include the IME (e.g. Korean 2-Set), the agent or shell (e.g. Claude Code / plain zsh), and the exact sequence you typed. Specific repros become fixes; "Korean is broken" does not.