[BUG] "Code font" setting does not apply to the integrated terminal — fontFamily hardcoded at the XQ call site

Status Fixed / completed
Reported on v2.1.219
Maintainer reply None cached
Activity 0 comments · opened Jul 29, 2026 · closed Aug 25, 2026

Preflight Checklist

  • [x] I have searched existing issues. The closest is #48805, which requests a terminal font setting. This report is different: that setting has since shipped as Code font, and it is wired to everything except the terminal.
  • [x] This is a single bug report.
  • [x] Using Claude for Desktop 1.24012.9 (current). It bundles Claude Code 2.1.219; npm latest is 2.1.220. The defect is in the desktop app bundle, not the CLI.

What's Wrong?

Settings → Code appearance → Code font is described as:

Set a custom monospace font for code and terminal.

It does not apply to the terminal. Code blocks and diffs pick up the configured
font; the integrated terminal keeps rendering in the system monospace, so Nerd
Font glyphs in a Starship / Powerlevel10k prompt show as tofu boxes.

What Should Happen?

The integrated terminal should render in the font configured under Code font,
as the setting's own description promises.

Steps to Reproduce

  1. Install a Nerd Font — e.g. MesloLGS Nerd Font Mono (Nerd Fonts 3.4.0) into ~/Library/Fonts.
  2. Set Settings → Code appearance → Code font to MesloLGS Nerd Font Mono.
  3. Open the integrated terminal with a prompt that uses Nerd Font glyphs (Starship, Powerlevel10k).

Code blocks and diffs switch to Meslo. The terminal does not, and PUA glyphs
render as boxes.

Root Cause

The setting writes LSS-epitaxy:editorFont and injects:

.epitaxy-root { --family-monospace: "<font>", ui-monospace, Menlo, Consolas, monospace; }

The terminal never reads that variable — it hardcodes its stack at the call
site. In Claude.app/Contents/Resources/ion-dist/assets/v1/c360a9e1c-*.js:

jsx(XQ, {
  sessionId: e, transport: t, ptyKey: o,
  spawnReason: "0" === n.id ? "pane_open" : "new_tab",
  fontFamily: '"SF Mono", ui-monospace, Menlo, Consolas, monospace',
  fontSize: 12,
})

var(--family-monospace) appears exactly once in that bundle — on the Remote
Control link <input> — and never on the terminal. There is exactly one
terminal instantiation, so no configuration path can reach it.

Two details that make this confusing to diagnose

The first entry of that stack is dead on macOS. No family named SF Mono
exists on a stock install. The system font is .SF NS Mono — dot-prefixed and
hidden, so CSS cannot match it, and there is nothing by that name in
/Library/Fonts or ~/Library/Fonts. Resolution always falls through to
ui-monospace.

Partial glyph rendering is a red herring. ╭─ ╰─ render correctly because
xterm.js draws box-drawing characters itself as vectors, ignoring the font.
Other PUA glyphs appear sporadically via CoreText fallback, which is unreliable
for Private Use Area codepoints. The result looks like patchy font coverage but
isn't — I verified MesloLGSNerdFontMono-Regular.ttf (Version 1.210; Nerd Fonts
3.4.0) contains every codepoint used by my starship.toml, with real outlines,
including U+F179 (gid 5355, 2 contours), which still renders as tofu.

Suggested Fix

Pass the configured family through at the XQ call site, retaining the fallback
chain:

fontFamily: "var(--family-monospace)",

That would also close out #48805, whose subscribers are still waiting on this.

Environment

  • macOS 26.5.2 (arm64)
  • Claude for Desktop 1.24012.9
  • Claude Code 2.1.219 (desktop-bundled)
  • Font: MesloLGS Nerd Font Mono, Version 1.210; Nerd Fonts 3.4.0

View original on GitHub ↗