Skip to content

Route ghostty Bold ASCII to Menlo instead of BIZ UDGothic Bold #281

Description

@ikuwow

Context

xdg-config/ghostty/config currently pins the CJK fallback to BIZ UDGothic Bold:

font-family = "Monaco"
font-family = "BIZ UDGothic Bold"

This resolves the previously observed instability where CJK codepoints (notably ) rendered inconsistently after display switches — a symptom of ghostty's runtime font discovery on macOS 26.5. Reference: ghostty-org/ghostty#12916, #8712, #707.

Finding

Bold ASCII characters (SGR 1, terminal emphasis) are now drawn by BIZ UDGothic Bold's Latin glyphs, not by Monaco.

Inferred mechanism (not verified against ghostty source):

  • Monaco has only a Regular face. system_profiler SPFontsDataType confirms Style: Regular is the only variant in the Monaco family.
  • When ghostty needs a Bold ASCII glyph, its per-codepoint face selection walks the fallback chain for a face that covers the codepoint at the requested Bold weight.
  • Monaco Regular has no Bold face. BIZ UDGothic Bold has Bold weight plus full ASCII coverage (verified via CoreText CTFontCopyCharacterSet). Ghostty picks it for Bold ASCII.
  • This matches the pre-pin "original" appearance — ghostty's cold discovery was picking BIZ UDGothic Bold all along, so Bold ASCII was already routed through it. The explicit pin just made it stable.

Proposal

Route Bold ASCII to a Monaco-lineage successor so the Latin personality stays consistent across weights.

font-family = "Monaco"
font-family-bold = "Menlo"
font-family = "BIZ UDGothic Bold"

Rationale for Menlo:

  • Menlo is the de-facto Monaco successor on macOS (Bitstream Vera Sans Mono derivative), letterform DNA is close
  • Preinstalled with Regular / Bold / Italic / Bold Italic
  • Ghostty has explicit font-family-bold / font-family-italic / font-family-bold-italic style knobs (ghostty +show-config --default --docs)

SF Mono is out of scope: it is not installed by default on macOS (bundled inside Terminal.app, requires manual extraction).

Follow-ups to verify before implementing

  • Confirm font-family-bold = "Menlo" actually redirects Bold ASCII rendering with a multi-line font-family cascade (ghostty style override interaction against fallback chain is not documented in a single spot; needs empirical test)
  • Confirm Bold CJK stays on BIZ UDGothic Bold (ghostty +show-face --string="のA" --style=bold)
  • Consider font-family-italic = "Menlo" for the same personality-continuity reason

Notes learned during investigation

  • ghostty +show-face reports only the family name, not the specific face/weight. Two families with the same name but different weights are indistinguishable in its output.
  • ghostty +list-fonts shows only monospace-eligible fonts; proportional CJK families (Hiragino Sans, BIZ UDGothic) are hidden from that listing but still available for font-family.
  • Morisawa Fonts image search (fontsjourney.morisawafonts.com, free without subscription) matched the rendered CJK against TBUD Gothic Std B / TBUD 丸ゴシック Std B. TBUD Gothic is what BIZ UDGothic is the OFL public release of (designed by Type Bank Co. and Morisawa Inc., per Google Fonts specimen).
  • The CoreText default cascade from Monaco returns Hiragino Sans W3 as the first CJK face, not BIZ UDGothic. Ghostty's own discovery differs from CoreText's default cascade.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions