mirror of
https://github.com/go-gitea/gitea.git
synced 2026-07-15 20:09:18 -05:00
Inconsistent emoji display (emoji font ordering issue) #14388
Closed
opened 2025-11-02 11:11:38 -06:00 by GiteaMirror
·
8 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
No Label
type/bug
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#14388
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @wolfbeast on GitHub (Apr 19, 2025).
Description
Gitea's Web UI explicitly lists fonts to be used for emoji characters. The order of this causes inconsistency by placing browser-supplied fonts (in particular
Twemoji Mozilla) last, and specifying various system-supplied fonts (which are not updated nearly as often) before them. Since emoji rendering occurs in a first-available order, any older/system emoji that are defined will take precedence over browser-supplied fonts, resulting in inconsistent emoji display by having older unicode emoji be used if defined in system fonts but then switching to newer ones if it hits an undefined and switches to the less prioritized emoji font.This is particularly noticable with country flags where older fonts often don't have flags but a two-letter country code as letters, e.g. 🇨🇶 (flag: Sark) 🇸🇪 (flag:Sweden). Putting likely-more-up-to-date font face definitions first will solve this issue.
Gitea Version
1.23.6+16-ga40e15a116
Can you reproduce the bug on the Gitea demo site?
Yes
Log Gist
No response
Screenshots
current order


Twemoji to front
Git Version
No response
Operating System
Windows 10 22H2
How are you running Gitea?
self-hosted, Linux binary
Database
MySQL/MariaDB
@wxiaoguang commented on GitHub (Apr 19, 2025):
Just FYI: GitHub also explicilty lists the font families like this:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"I don't have enough understanding of this issue or how browser rendering engine works, what's the proper way to handle emoji font families?
@wolfbeast commented on GitHub (Apr 19, 2025):
Github displays the same issue.
Fonts inside browsers generally work in a "first declared" order. If a font contains a glyph for a character in unicode, then it will display it. if it doesn't, then the next font in the font list is tried. system fonts are usually not updated unless a new version of the OS is installed (and then again frozen until the next, etc.) -- Emoji in particular are updated/added to often, and browsers will keep their internal fonts (if supplied like twemoji mozilla) up to date more often. Those fonts should have precedence so you don't get a mix of emoji.
In fact, if websites would not declare emoji fonts specifically, browsers will generally use their internal list of preferred fonts and orders (which might actually work better!) but if you specify an emoji font order explicitly, then what you should do is: browser-supplied fonts first, then specific known system emoji fonts, then generic fallback.
So, in the case of Gitea's font list:
--fonts-emoji: "Twemoji Mozilla", "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";This will make all emoji supplied by Twemoji Mozilla consistently rendered and up-to-date, and only those not covered by that font will be rendered by the fonts after it.
Currently, the order has it last, which causes it to try the Apple font first (if existing) the Segoe UI (if existing) then Noto (if existing) and only then the most complete/recent Twemoji one. Meaning older unicode ones and often B&W versions are picked in favor of newer/color ones if they are present in the prioritized fonts.
I don't know if Chrome and/or Edge come with specific embedded emoji fonts or not, but if they do, they should also go before system fonts.
@wxiaoguang commented on GitHub (Apr 19, 2025):
Some questions:
Twemoji Mozillathe de-facto standard for all emoji characters? Do Chrome and other browsers have it builtin, or does modern OS have it builtin?Apple Color Emoji, would it cause inconsistency on macOS or not?@wolfbeast commented on GitHub (Apr 19, 2025):
@wxiaoguang commented on GitHub (Apr 23, 2025):
-> Fix various frontend trivial problems #34263
@silverwind commented on GitHub (Apr 23, 2025):
By ordering Twemoji Mozilla to the front, users on Apple OS would see that font instead of Apple's, if they have Twemoji installed in the OS or browser, right? I think we should make it so each user gets their OS or browser's preferred emoji font.
I wonder if we even have to specify emoji fonts as part of
font-faceor if that can be removed entirely. As I understand, browsers will render the right font, even when the emoji fonts are not explicitely listed infont-face, e.g.<html>😆</html>should render fine.@wolfbeast commented on GitHub (Apr 23, 2025):
Yeah I already noted above that if you don't specify an emoji font explicitly, you leave it up to browsers (which tend to make sane choices, or have a mechanism for the user to choose what they prefer). You could leave it out altogether, for that behaviour.
But, if you do make it explicit (like Gitea currently does), then you need to pick an order that makes sense. For the Apple situation, as I said, if Apple is placed at the front then it will use Apple OS emoji glyphs up to the point where the OS font doesn't cover a specific emoji, then it would fall back to the other specified fonts. This would lead to inconsistency in emoji inside the Gitea web UI, but would be more consistent with other Apple apps on the system (preferring Apple OS brand styling, but only for those covered by the OS font, which will vary greatly depending on which MacOS version is in use). It would make the most sense to minimize that inconsistency inside the Gitea Web UI IMHO, meaning the most complete font should preferably be first in the list.
Twemoji is the most complete set, AFAIK.
@silverwind commented on GitHub (Apr 23, 2025):
I think not specifying any emoji fonts will be the best course of action. I don't recall why exactly Gitea has these specified. I think it's mostly because GitHub is/was also doing that, but I agree it's best to let the browser decide.