Solo: Font Rendering Broken on macOS Tahoe 26.5 Beta
Summary
This issue has stopped me from working in my favorite app.
Terminal text in Solo v0.5.9 renders as garbled/malformed glyphs on macOS Tahoe 26.5 beta (build 25F5042g). The underlying text data is correct (copy/paste to another app renders properly), but the visual rendering in the terminal pane is unreadable. The sidebar UI text renders correctly. This is a regression from 26.4, where everything worked.
Environment
- Solo version: 0.5.9
- macOS: Tahoe 26.5 beta (build 25F5042g)
- Architecture: Apple Silicon (arm64)
- Reproduced on: Two separate machines after upgrading to 26.5 beta
Steps to Reproduce
- Install macOS Tahoe 26.5 beta
- Launch Solo Terminal
- Open any terminal or command process
- Observe the terminal output pane
Expected Behavior
Terminal text renders normally with the selected monospace font.
Actual Behavior
Terminal text renders as garbled/malformed glyphs. Characters appear as wrong or composite glyphs (e.g., letters rendered with incorrect glyph IDs). The text is correct underneath: selecting the garbled text and pasting into another application produces the correct characters.
Key observation: The sidebar UI (project names, section headers like "AGENTS", "TERMINALS", "COMMANDS", process names) renders perfectly. Only the terminal output pane is affected.
Root Cause Analysis
Solo is a Tauri v2 app (Rust backend + WKWebView frontend). The architecture is:
- Rust backend manages terminal state using
vt100 crate (v0.16.2) and portable_pty for PTY management
- Process output is sent to the frontend as raw byte chunks (
ProcessOutputChunk) via Tauri's event/channel system
- SvelteKit frontend in a WKWebView renders the terminal output
- Font selection is stored in WebKit LocalStorage (
terminalFontFamily, default: "Menlo")
The sidebar text uses standard DOM/CSS text rendering (which works fine). The terminal pane uses a different rendering path for the process output, which is where the WebKit regression manifests.
Why this is a WebKit regression, not a Solo bug
What Was Ruled Out
| Hypothesis |
Result |
| Missing data/config |
Not the issue. Fresh installs reproduce. |
| Copying WebsiteData from working machine |
No effect |
| Font selection (Menlo vs SF Mono) |
Both produce garbled output |
Font cache reset (sudo atsutil databases -remove) |
No effect |
Solo SQLite database (~/.config/soloterm/solo.db) |
Font settings not stored here |
| WebKit IndexedDB/storage |
Effectively empty |
Solo's Data Locations (for reference)
| Location |
Contents |
~/.config/soloterm/solo.db |
Projects, processes, license, settings (no font settings) |
~/Library/WebKit/com.soloterm.solo/WebsiteData/.../LocalStorage/localstorage.sqlite3 |
UI state including terminalFontFamily, terminalFontWeight, terminalFontScale (stored as UTF-16LE encoded JSON blob) |
~/Library/Application Support/com.soloterm.solo/ |
Empty |
Per-project solo.yml |
Process configs only |
LocalStorage Schema (font-related settings)
The key solo-ui-storage in WebKit LocalStorage contains:
{
"state": {
"theme": "system",
"sidebarWidth": 240,
"fontScale": 1,
"terminalFontScale": 1,
"terminalLineHeight": 1,
"terminalLetterSpacing": 1,
"terminalFontFamily": "Menlo",
"terminalFontWeight": "400",
"terminalFontWeightBold": "600"
},
"version": 0
}
Suggested Fix
Since this is a WebKit regression in the system font resolution path, possible workarounds for Solo:
- Bundle a web font (e.g., embed a WOFF2 monospace font in the app assets) and use
@font-face declarations instead of relying on system font name resolution through WKWebView's CoreText integration
- Use CSS
font-family with explicit fallback chain including generic monospace keyword
- If the terminal pane uses
<canvas> text rendering (e.g., fillText/measureText), consider providing a DOM-based fallback renderer, as canvas text rendering appears more susceptible to the WebKit regression than DOM text
- Enable
isInspectable in debug/beta builds so users on beta macOS can provide Web Inspector diagnostics (currently locked out in release builds)
Related Issues
Workaround for Users
None currently available. Changing fonts in Solo's settings UI has no effect since the issue is in the WebKit rendering layer, not font selection. Users on macOS 26.5 beta should downgrade to 26.4 until either Apple fixes the WebKit regression or Solo implements a workaround.
Solo: Font Rendering Broken on macOS Tahoe 26.5 Beta
Summary
This issue has stopped me from working in my favorite app.
Terminal text in Solo v0.5.9 renders as garbled/malformed glyphs on macOS Tahoe 26.5 beta (build 25F5042g). The underlying text data is correct (copy/paste to another app renders properly), but the visual rendering in the terminal pane is unreadable. The sidebar UI text renders correctly. This is a regression from 26.4, where everything worked.
Environment
Steps to Reproduce
Expected Behavior
Terminal text renders normally with the selected monospace font.
Actual Behavior
Terminal text renders as garbled/malformed glyphs. Characters appear as wrong or composite glyphs (e.g., letters rendered with incorrect glyph IDs). The text is correct underneath: selecting the garbled text and pasting into another application produces the correct characters.
Key observation: The sidebar UI (project names, section headers like "AGENTS", "TERMINALS", "COMMANDS", process names) renders perfectly. Only the terminal output pane is affected.
Root Cause Analysis
Solo is a Tauri v2 app (Rust backend + WKWebView frontend). The architecture is:
vt100crate (v0.16.2) andportable_ptyfor PTY managementProcessOutputChunk) via Tauri's event/channel systemterminalFontFamily, default: "Menlo")The sidebar text uses standard DOM/CSS text rendering (which works fine). The terminal pane uses a different rendering path for the process output, which is where the WebKit regression manifests.
Why this is a WebKit regression, not a Solo bug
terminalFontFamilyfrom "Menlo" to "SF Mono" via LocalStorage produces the same garbled outputWhat Was Ruled Out
sudo atsutil databases -remove)~/.config/soloterm/solo.db)Solo's Data Locations (for reference)
~/.config/soloterm/solo.db~/Library/WebKit/com.soloterm.solo/WebsiteData/.../LocalStorage/localstorage.sqlite3terminalFontFamily,terminalFontWeight,terminalFontScale(stored as UTF-16LE encoded JSON blob)~/Library/Application Support/com.soloterm.solo/solo.ymlLocalStorage Schema (font-related settings)
The key
solo-ui-storagein WebKit LocalStorage contains:{ "state": { "theme": "system", "sidebarWidth": 240, "fontScale": 1, "terminalFontScale": 1, "terminalLineHeight": 1, "terminalLetterSpacing": 1, "terminalFontFamily": "Menlo", "terminalFontWeight": "400", "terminalFontWeightBold": "600" }, "version": 0 }Suggested Fix
Since this is a WebKit regression in the system font resolution path, possible workarounds for Solo:
@font-facedeclarations instead of relying on system font name resolution through WKWebView's CoreText integrationfont-familywith explicit fallback chain including genericmonospacekeyword<canvas>text rendering (e.g.,fillText/measureText), consider providing a DOM-based fallback renderer, as canvas text rendering appears more susceptible to the WebKit regression than DOM textisInspectablein debug/beta builds so users on beta macOS can provide Web Inspector diagnostics (currently locked out in release builds)Related Issues
<select>renders wrong font (CoreText error)Workaround for Users
None currently available. Changing fonts in Solo's settings UI has no effect since the issue is in the WebKit rendering layer, not font selection. Users on macOS 26.5 beta should downgrade to 26.4 until either Apple fixes the WebKit regression or Solo implements a workaround.