blinksh / blinksh/blink

Korean input broken in Claude Code CLI on iOS/iPadOS - displays separated jamo

Open
#2,134 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Swift
Stars
6.9k
Forks
746
PR merge metrics
No merged PRs in 30d

Description

### Checklist
- [x] Using latest version on the [[App Store](http://itunes.apple.com/app/id1156707581)](http://itunes.apple.com/app/id1156707581)
- [x] Read the [[docs](http://blink.sh/docs/)](http://blink.sh/docs/)
- [x] Searched for [[existing GitHub issues](https://github.com/blinksh/blink/issues)](https://github.com/blinksh/blink/issues)

### Configuration
- Blink version: v18.3.0
- iOS/iPadOS version: iPadOS 18.4, iOS 18.5
- Device: iPad and iPhone
- Remote server: Ubuntu 24.04 (via SSH)
- Claude Code CLI version: v1.0.11
- Korean keyboards tested: iOS touch keyboard, iPadOS touch keyboard, Magic Keyboard (hardware)

### Describe the bug
When typing Korean in Claude Code CLI (and other similar AI CLI tools like Codex-cli) through Blink Shell on iOS/iPadOS, Korean characters are displayed broken with separated jamo (individual Korean letters).

**Current behavior:**
- When typing "안녕하세요", it displays as "ㅇ아ㄴ녀ㅇ하ㅅ세ㅇ요" (with separated jamo characters)
- The issue only occurs in REPL environments like Claude Code CLI
- Korean input works perfectly fine in regular SSH sessions, tmux, and Python REPL
- Issue occurs with both software keyboards and hardware Magic Keyboard on iPadOS

**Expected behavior:**
Korean characters should be displayed as complete syllables (e.g., "안녕하세요") without showing intermediate jamo states.

**Screenshots:**

Korean input broken in Claude Code CLI

Example of broken Korean display

Korean working correctly outside REPL

Another example of the issue

https://github.com/user-attachments/assets/2960ec9b-f373-42ed-b8b3-45edc6bb539f

**Analysis from investigation:**
The issue appears to be caused by:
1. iOS/iPadOS Korean IME sends both intermediate jamo and completed syllable with backspace (0x08)
2. Blink passes these raw bytes unchanged through SSH
3. Claude Code's Ink-based TUI doesn't properly handle the 0x08 backspace, leaving both jamo and syllable on screen

**Additional information:**
- The same issue occurs with Termius on iOS
- Works correctly on iTerm2 and Linux terminals
- Only affects REPL environments using Ink-based TUI, not regular shell sessions

**Steps to reproduce:**
1. Connect to Ubuntu 24.04 server via SSH using Blink on iPad/iPhone
2. Launch Claude Code CLI (`claude`)
3. Try typing Korean text (e.g., "안녕하세요")
4. Observe that jamo characters remain visible alongside completed syllables

**Potential solutions: (not by me, suggested by AI) **
- Terminal-side: Filter out intermediate jamo/0x08 sequences before sending to REPL
- CLI-side: Proper handling of CJK IME composition in Ink-based TUI
- Workaround: Use terminals that handle IME composition differently (e.g., iTerm2 on macOS)

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the issue by connecting to Ubuntu 24.04 over SSH from Blink and launching the Claude Code CLI with `claude`; compare Korean input in regular SSH, tmux, and Python REPL sessions. Trace whether iOS/iPadOS IME bytes, including 0x08, are passed unchanged, then verify that completed Korean syllables render correctly in the REPL.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, shell
Domain
cli, mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.