Get Moshi
input

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.

updated 1 week ago14 min readpage 13 / 23

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-8 or 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:

host
$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.