Nerd Font Unicode characters not rendered in Claude Code UI (statusline, chat, file views)
This is a reopen of #9907, which was closed as stale after 7 days of inactivity. The issue is still present as of April 2026.
Problem
Claude Code does not render Nerd Font Unicode characters (Private Use Area codepoints like U+E0A0, U+F302, etc.) anywhere in its UI. They appear as blank spaces or boxes — even when the system terminal font is a patched Nerd Font and renders them correctly in every other context.
Affected areas
- Statusline — custom statusline scripts that output Nerd Font icons (e.g. `
for git branch,` for PRs) show as blank - Chat messages — Nerd Font glyphs in assistant or user messages are invisible
- File views — config files for Starship, Alacritty, Kitty, etc. that contain Nerd Font symbols display as blanks, making it impossible to tell whether an icon is present or missing (as described in #9907)
Why this matters
Claude Code has a customisable statusline (via ~/.claude/statusline.sh) that many teams use to surface git state, PR status, context window usage, and model info. Nerd Font icons are the standard way to add meaningful, space-efficient visual cues to terminal UIs.
When Claude Code can't render a Nerd Font character in a file view, it silently shows a blank — causing wasted time debugging configs that are actually correct (detailed in the original issue).
Expected behaviour
Either:
- Render Nerd Font / PUA Unicode characters using the system font or a bundled font that includes them, OR
- Show the Unicode code point (e.g.
<U+E0A0>) as a fallback so the character is at least visible
Environment
- Claude Code latest (April 2026)
- macOS, iTerm2 with JetBrains Mono Nerd Font — same profile renders Nerd Fonts correctly outside Claude Code
- Original report: #9907 (closed stale 2025-10-19)
Reproduction
- Add a Nerd Font icon to
~/.claude/statusline.shoutput, e.g.printf " branch"(U+E0A0) - The statusline shows a blank where the icon should be
- Run
echo " branch"in the same terminal — icon renders correctly
Showing cached comments. Read the full discussion on GitHub ↗
10 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Well it kinda is a douplicate, but the other was closed as stale and it asked to be reopened. so i did. so no please do not close this issue. that would be a vicous cycle
Still an issue, this s a bump so this aint get closed again!
^ bump
nother bump
Still reproducing on Claude Code 2.1.141 (macOS, iTerm2, JetBrains Mono Nerd Font).
Just hit this in a session — asked Claude to print a handful of Nerd Font glyphs to verify rendering (`
U+E725,U+F126,U+F418,U+E0A0). All came through as blank cells separated by commas. Same glyphs render correctly withprintf` in the same terminal outside the TUI, and standard Unicode symbols (✓ ✗ → ★ ●) render fine inside it — so this is specifically a PUA codepoint width/rendering issue in the TUI layer, not a font or terminal problem.The fallback suggestion in the original report (show
<U+E0A0>when the glyph can't render) would already be a big improvement over silent blanks — at least configs become debuggable.Additional Windows repro for BMP Private Use Area chars being hidden from Claude Code's
Readtool path.This is not just a font/rendering issue. In this repro, Claude Code's
Readtool did not expose BMP PUA characters to the model, even though Bash/Python in the same Claude Code session detected them from the same file.Environment:
Minimal repro:
Actual output:
Read:Actual behavior:
Claude Code's
Readpath displayed the line as:It did not report U+E203, U+E204, or U+E206. It instead inferred the quotes might be smart quotes U+201C/U+201D, but the quotes are normal ASCII quotes.
Read:Actual output from Claude Code Bash/Python:
Expected behavior:
The
Readtool/model-visible text path should preserve or explicitly surface valid UTF-8 BMP PUA characters. If Claude Code cannot render them, a fallback such as<U+E203>,<U+E204>,<U+E206>would be safer than silently hiding them.Impact:
Claude Code missed hidden PUA markers during a Markdown cleanup task. The characters were visibly present in the editor, but Claude Code did not identify them until given a screenshot or raw Python codepoint output.
This issue remains a problem, even when setting the "custom monospaced font for code and terminal" to a font that contains all custom characters:
<img width="651" height="68" alt="Image" src="https://github.com/user-attachments/assets/2f13aa89-3f51-47d1-91b1-a5259aab549c" />
Here's what Powerlevel 10k (oh-my-zsh plugin) gives on a regular iTerm2 with that font:
<img width="880" height="36" alt="Image" src="https://github.com/user-attachments/assets/03ec5e5b-457e-4f11-b5ef-368512eaa46f" />
whereas the same thing in Claude Code Terminal renders as:
<img width="881" height="41" alt="Image" src="https://github.com/user-attachments/assets/d4de53b1-f429-4fe0-996c-770fd519e099" />
Closing for now — inactive for too long. Please open a new issue if this is still relevant.
oh common. I need notifications for stale tags...
i have stopped bumping this since actual mentiones showed up and now this is closed again.
This HYPER agressive closing of issues is annoying af. Guess a bump cron job is necessary?