Logs page renders blank when LANG is a CJK locale on Flatpak (monospace resolves to proportional Noto Sans CJK)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 76/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- rust, typescript
Research direction
Start with packages/ui/src/composables/terminal.ts, where the issue says the terminal sets its font family to the generic monospace; check how the Logs page configures xterm.js and whether nearby tests cover terminal rendering. Reproduce with a CJK LANG in the Flatpak and compare with en_US.UTF-8. Done when logs and the empty state both render under a CJK locale.
Written by the indexing model from the issue text.
Description
Please confirm the following
- I checked the existing issues for duplicate problems
- I have tried resolving the issue using the support portal
- I have ensured my Modrinth App installation is up to date
What version of the Modrinth App are you using?
0.22.0 (Flathub, com.modrinth.ModrinthApp, runtime org.gnome.Platform/x86_64/49)
What operating systems are you seeing the problem on?
Linux — Fedora 44, KDE Plasma (Wayland), system locale zh_CN.UTF-8
Describe the bug
When the system/process locale is Chinese (LANG=zh_CN.UTF-8), the instance Logs page renders an entirely blank terminal, even though the logs are read successfully.
The page chrome (search box, level filters, log-source dropdown) works, and the dropdown correctly lists latest.log, crash reports, and rotated .log.gz files. Selecting any of them still leaves the terminal blank. The empty-state message/frog does not appear either, which suggests the xterm.js terminal never renders any text.
Launching the same Flatpak with LANG=en_US.UTF-8 makes the Logs page work normally, so the data/back-end side is fine — this is a rendering issue.
The same instance shows:
LANG=zh_CN.UTF-8: an empty white terminal area
LANG=en_US.UTF-8: empty-state bubble and log contents render normally
Steps to reproduce
- Use a system with
LANG=zh_CN.UTF-8(or any CJK locale), and install Modrinth App from Flathub. - Open an instance that has logs (or launch the instance once so logs exist).
- Go to the instance Logs tab.
- Observe that the terminal area is completely blank, including no empty-state text.
Optional control:
flatpak run --env=LANG=en_US.UTF-8 com.modrinth.ModrinthApp
→ the Logs page renders correctly.
Expected behavior
The Logs page should display the live log / selected log file regardless of the system locale.
Additional context / root cause analysis
Inside the Flatpak sandbox, fontconfig resolves the generic monospace family differently depending on locale:
$ flatpak run --command=sh com.modrinth.ModrinthApp -c \
'LANG=en_US.UTF-8 fc-match monospace; LANG=zh_CN.UTF-8 fc-match monospace'
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"
NotoSansCJK-VF.ttc: "Noto Sans CJK SC" "Regular"
Noto Sans CJK SC is a proportional CJK font, not a monospace font. The console component hard-codes the generic family:
// packages/ui/src/composables/terminal.ts (v0.22.0)
fontFamily: 'monospace',
xterm.js requires a monospace font for its character-width measurement. When the generic monospace alias resolves to a proportional (and variable) CJK font, the terminal produces no visible output at all — not even the empty-state bubble.
Note that the actual monospace CJK font is present in the sandbox (fc-list shows Noto Sans Mono CJK SC); fontconfig just prefers the proportional Noto Sans CJK SC under zh_CN.
Workaround (app-local, does not affect other apps):
Create ~/.var/app/com.modrinth.ModrinthApp/config/fontconfig/fonts.conf:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<match target="pattern">
<test qual="any" name="family"><string>monospace</string></test>
<edit name="family" mode="prepend" binding="strong">
<string>DejaVu Sans Mono</string>
</edit>
</match>
</fontconfig>
After this, LANG=zh_CN.UTF-8 fc-match monospace inside the sandbox returns DejaVu Sans Mono and the Logs page renders again (CJK characters fall back to Noto CJK automatically).
Suggested fix: don't rely on the bare generic monospace alias for the terminal. Use an explicit monospace stack, e.g.
fontFamily: "'DejaVu Sans Mono', 'Noto Sans Mono', 'Noto Sans Mono CJK SC', 'Liberation Mono', monospace",
and/or ship a known monospace font with the app. It may also be worth checking whether xterm.js needs a guard against a resolved proportional font.
- Dominant language
- Rust
- Stars
- 2.5k
- Forks
- 663
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 122
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from modrinth/code
-
app
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
website
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
modrinth/code#8256 · 1 reaction ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
modrinth/code#8253 · 2 comments ·
Maintainers usually reply within 1 day
-
Translation errorOpenwebsite
Difficulty 1/5 Under an hour Newbie friendliness 66/100
Maintainers usually reply within 1 day
-
Button reorder requestMay be free again @Ceebug claimed this 17 days ago, and no pull request is open. Open
Difficulty 1/5 1-3 hours Newbie friendliness 70/100
modrinth/code#8136 · 10 comments ·
Maintainers usually reply within 1 day
Similar issues
-
bug bug jury peripheral:i2s
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
esp-rs/esp-hal#6828 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
Maintainers usually reply within 1 day
-
ライブラリを追加Openpriority middle
Difficulty 1/5 Under an hour Newbie friendliness 62/100
KATO-Hiro/AtCoderClans#13015 ·
Maintainers usually reply within 1 day
-
needs-review
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
UCS-Care-Group/mailcraft#1429 ·
Maintainers usually reply within 1 day
-
priority: medium ready
Difficulty 1/5 Under an hour Newbie friendliness 88/100
TusanHomichi/PSIV#646 ·
Maintainers usually reply within 1 day