Nothing open on GitHub. Fix merged in #40928 on 7 Jun 2026. Check it covers your case.
The short answer
0open issues
0open PRs
3items grouped
- Known?
- Yes. 3 related items grouped here, 1 issue already closed.
- Fix event
- A fix was merged to main in PR #40928. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
resolved, deciding PR #40928. That is separate from the fix event. - Still open
- Nothing open on GitHub.
A bug was reported and addressed regarding emoji not displaying correctly on Hermes Desktop. The fix involves adding a color-emoji font fallback to ensure proper emoji rendering.
Open issues0
Open PRs0
Fixes on record
-
#40928 fix(desktop): color-emoji font fallback so emoji render (#40364)
files:
apps/desktop/src/styles.css,apps/desktop/src/themes/presets.test.ts,apps/desktop/src/themes/presets.tsShow the diff
-
apps/desktop/src/styles.css@@ -266,8 +266,10 @@ --dt-user-bubble: var(--ui-chat-bubble-background); --dt-user-bubble-border: var(--ui-stroke-tertiary); - --dt-font-sans: 'Segoe WPC', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif; - --dt-font-mono: 'Cascadia Code', 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace; + --dt-font-sans: 'Segoe WPC', 'Segoe UI', -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', emoji; + --dt-font-mono: 'Cascadia Code', 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', emoji; --dt-base-size: 1rem; --dt-line-height: 1.5; --dt-letter-spacing: 0; -
apps/desktop/src/themes/presets.test.ts@@ -0,0 +1,33 @@ +import { describe, expect, it } from 'vitest' + +import { BUILTIN_THEME_LIST, DEFAULT_TYPOGRAPHY, EMOJI_FALLBACK } from './presets' + +// #40364: none of the UI text/mono fonts carry emoji glyphs, so every font +// stack must end with a color-emoji fallback or emoji render as tofu on +// platforms whose default font lacks them (e.g. Linux). +describe('theme typography emoji fallback (#40364)', () => { + const stacks: Array<[string, string]> = [ + ['DEFAULT_TYPOGRAPHY.fontSans', DEFAULT_TYPOGRAPHY.fontSans], + ['DEFAULT_TYPOGRAPHY.fontMono', DEFAULT_TYPOGRAPHY.fontMono], + // A theme may override only fontMono (fontSans then falls back to the + // default, which already carries the emoji stack), so skip undefined. + ...BUILTIN_THEME_LIST.flatMap(theme => + ( + [ + [`${theme.name}.fontSans`, theme.typography?.fontSans], + [`${theme.name}.fontMono`, theme.typography?.fontMono] + ] as Array<[string, string | undefined]> + ).filter((entry): entry is [string, string] => typeof entry[1] === 'string') + ) + ] + + it.each(stacks)('%s includes a color-emoji font', (_label, stack) => { + expect(stack).toMatch(/Apple Color Emoji|Segoe UI Emoji|Noto Color Emoji|(^|,\s*)emoji\b/) + }) + + it('EMOJI_FALLBACK lists the major platform emoji fonts', () => { + expect(EMOJI_FALLBACK).toContain('Apple Color Emoji') + expect(EMOJI_FALLBACK).toContain('Segoe UI Emoji') + expect(EMOJI_FALLBACK).toContain('Noto Color Emoji') + }) +}) -
apps/desktop/src/themes/presets.ts@@ -5,10 +5,19 @@ import type { DesktopTheme, DesktopThemeTypography } from './types' +// Color-emoji fonts to append to every stack as a last resort. None of the UI +// text/mono fonts carry emoji glyphs, so without this emoji render as tofu +// boxes on platforms whose default text font lacks them (e.g. Linux/#40364). +// Covers macOS, Windows, Linux, plus the `emoji` generic for anything else. +export const EMOJI_FALLBACK = + '"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", emoji' + const SYSTEM_SANS = - '"Segoe WPC", "Segoe UI", -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, sans-serif' + '"Segoe WPC", "Segoe UI", -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, sans-serif, ' + + EMOJI_FALLBACK -const SYSTEM_MONO = '"Cascadia Code", "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Monaco, Consolas, monospace' +const SYSTEM_MONO = + '"Cascadia Code", "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Monaco, Consolas, monospace, ' + EMOJI_FALLBACK export const DEFAULT_TYPOGRAPHY: DesktopThemeTypography = { fontSans: SYSTEM_SANS, fontMono: SYSTEM_MONO } @@ -228,8 +237,8 @@ export const cyberpunkTheme: DesktopTheme = { userBubbleBorder: '#004800' }, typography: { - fontMono: `"Courier New", Courier, monospace`, - fontSans: `"Courier New", Courier, monospace` + fontMono: `"Courier New", Courier, monospace, ${EMOJI_FALLBACK}`, + fontSans: `"Courier New", Courier, monospace, ${EMOJI_FALLBACK}` } }
-
1 PR closed without merging
From the close comments: merged via another change 1
-
#40388 fix(desktop): add color-emoji font fallback so emoji render (#40364) · merged via another change →
bec0796,fe2942a,#40928
Closed issues · 1
- Closed#40364[Bug]: Emoji in Hermes Desktop not showing correctly
How this cluster was grouped
-
Link evidence (
structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference. -
Pairwise link density
0.67: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the LabAt a glance
- Merged PRs
- #40928
- Closed issues
- 1
- Attempts
- 1 PR closed without merging
- Fix link checked
- 7 Jun 2026