This font adds country flag emojis to Windows 11, while keeping all Win11's original emojis! ๐ฌ๐ง๐งโ๐ป๐ฏ๐ต๐๐ฐ๐ท๐๐จ๐ณ๐ค๐ซ๐ทโจ๐ช๐ธ๐๐ฎ๐น
Unlike literally any other platform or OS, Windows never had flag emojis, and that always irked me a little bit. Having to guess what flag someone else is trying to send by just two letters isn't a great user experience, you know. And I always just kinda sighed at it, helplessly.
But not today... Today I woke up, and the absence of flag emojis in Windows has triggered me like never before, and so I've spent over 14 hours hyperfocused on this task of bringing flag emojis to Windows (without replacing all the emojis, that is, like some other projects did).
And now you too can say "No!" to Windows, "I want the flag emojis that everyone else has!", download and install this font, restart your PC, and finally get to enjoy the full emoji experience on Windows!
ย
This font is based on Segoe UI Emoji v1.60 (3D Fluent 15.1; Win11 23H2; 2024-06-25) and contains 258 flags from the Twitter Color Emoji SVGinOT v16.0.1 (2025-04-14) compiled by quarrel. You can build it yourself, if you'd like (see the "How to build from scratch" section in the end).
Also, you can read my blog post!
Download this font and install it for all users.
ย
Regular "Install" will only affect a few certain apps: Chromium-based browsers (Chrome, Opera, Vivaldi, etc), and Electron-based apps (Discord, VS Code, etc), so if that's enough for you, you can do this type of install.
"Install for all users" will attempt to render country flags in the system and many other apps too. Sometimes with mixed results though, since the system renders fonts inconsistently (more on that in the next section).
Download the original Segoe UI Emoji and install it for all users.
Go to Settings > Personalization > Fonts, and find and select Segoe UI Emoji in the list. In the Metadata section, find the font file that you installed. Press the "Uninstall" button, and restart your PC.
Country flags are uncolored in the Explorer, but so are the rest of the emojis. It must be some sort of a limitation in the system itself, if it doesn't even color Windows's own original emojis.
Fonts preview in "Settings > Personalizations > Fonts" works fine:
But everywhere else country flags sometimes appear invisible:
When the country flags appear invisible, you can see that the rest of emojis "downgrade" to lesser-quality versions. And when country flags are uncolored, the rest of emojis are uncolored too. So it's not something that any font can fix, โ it's a limitation of the system itself. Maybe in future versions Windows will be able to render emojis consistently everywhere, but at the moment, it's the best that can be done.
-
perguto/Country-Flag-Emojis-for-Windowscompletely replaces Segoe UI Emoji with Google's Noto Color Emoji. -
quarrel/broken-flag-emojis-win11-twemojicompletely replaces Segoe UI Emoji with Twemoji emojis.
Here are the emojis that you get in all projects, for comparison:
I personally prefer the original Fluent 3D set. A touch of 3D shading looks really nice and it brings some life to the emojis. Fluent 3D's people emojis have actual eyes, while others' have creepy dot eyes and blank stares. Also, as someone with entomophobia, Fluent 3D's bug emoji is the easiest to look at, and as a developer I have to look at it pretty often. And look at Fluent 3D's animals! So cute!
And here's a comparison of flags as well:
I decided to use Twitter's flag emojis, since Noto's wavy ones just look weird โ straight lines become curves, circles become ovals, there's a weird gray glow around the flags, and they also don't downscale well.
You can read my blog post to see how I came to this solution.
git, Python/pip, LINQPad (64x, not 32x!), 8-16 Gb of RAM, 1 Gb of disk space.
-
First, copy the original Segoe UI Emoji font from your system's folder:
Copy-Item "C:\Windows\Fonts\seguiemj.ttf"
When you install the new font, the one in
C:\Windows\Fontsshould remain unchanged, but we'll back it up just in case. -
Download the 16.0.1 Twemoji font (from quarrel/broken-flag-emojis-win11-twemoji repository), and put it in your working directory:
Invoke-WebRequest -Uri "https://github.com/quarrel/broken-flag-emojis-win11-twemoji/raw/refs/heads/main/Twemoji-16.0.1-SVG-COLR1.ttf" -OutFile twemoji.ttf
-
Clone the
13rac1/twemoji-color-fontrepository:git clone https://github.com/13rac1/twemoji-color-font
-
Open LINQPad, and run this script to generate a list of glyphs:
That will generate a file with all the glyphs we need (regional indicator symbols U+1F1E6-1F1FF, tag latin letters U+E0061-E007A, cancel tag U+E007F, waving black flag U+1F3F4, as well as all their combinations that have a defined flag glyph). It will be used to subset the Twemoji font.
-
Install
fonttools(withlxmlfeature) usingpip:pip install fonttools[lxml]
You might need to add
...\Python\Scriptsto PATH.pipshould tell you if it's not there already. -
Decompile the Twemoji font to XML:
fonttools.exe ttx twemoji.ttf
-
Then apply some patches from here, so that regional flags render . You could automate it, but... They seem simple enough to just do by hand.
-
Recompile the Twemoji font back to TTF (note the
.ttxextension):fonttools.exe ttx twemoji.ttx
-
Subset the Twemoji font using the glyphs file we generated:
fonttools.exe subset twemoji.ttf --glyphs-file=flags-glyphs.txt --ignore-missing-glyphs
WARNING: FFTM NOT subset; don't know how to subset; droppedis normal.That should create a
twemoji.subset.ttffile in your working directory. -
Now, let's "decompile" the fonts to XML:
fonttools.exe ttx seguiemj.ttf fonttools.exe ttx twemoji.subset.ttf
Decompiling Segoe UI Emoji might take about a minute, and the decompiled file will take up over 250 Mb of space. Twemoji's subset should decompile much quicker, and take up a little below 10 Mb.
-
Then run this script in LINQPad:
This is gonna use a lot of memory (about 8 Gb), but should finish pretty quickly (10-20s).
Now there should be a ~300 Mb
merged.ttxfile in your working directory. -
And finally, recompile the
merged.ttxfont file:fonttools.exe ttx merged.ttx
-
And now just install the
merged.ttffont, and everything should work!
The scripts I wrote are a bit janky and disorganized, since I've had to try so many different things to finally get it to work... And they probably won't work with any other fonts, despite all my attempts to keep it as generic as possible. Feel free to fix it.
If you want to add emojis to Segoe UI Emoji from some other font, here's a list of resources that I found useful:
- fontTools ttx - can decompile TTF into a readable and editable XML, and recompiles it back losslessly.
- OpenType's spec on Microsoft Learn explains the overall structure of a TTF file and its tables, and what different type ids mean, and etc.
- GSUB docs on FontForge clarifies some stuff about substitution lookups.
- HarfBuzz brought the project to the finish line! It not only renders font characters into the terminal, but also shows the entire textshaping process (run with option
-V). I was stuck for a while on script and feature switches, not realizing that they disable rendering the ligatures in some places.












