Also available in: Espaรฑol ยท Portuguรชs ยท Franรงais ยท ุงูุนุฑุจูุฉ
Emoji List
The complete Unicode emoji set, searchable and grouped, plus an honest answer to how many there are and how long one is.
What is this emoji list?
This is every emoji Unicode defines, taken from emoji-test.txt โ the file the Unicode Consortium publishes as the definitive list โ at version 17.0. It is not a hand-picked selection: the groups, the subgroups and the order are the ones Unicode itself specifies, so nothing has been added, dropped or rearranged.
Click any emoji to copy it. Search by name in your own language, since the names come from Unicode CLDR rather than from a translation pass, and narrow by any of the nine groups Unicode defines: smileys, people, animals, food, travel, activities, objects, symbols and flags.
The page also does something no emoji list normally does, and it is the reason this one is worth reading rather than just scrolling: it tells you how long an emoji actually is. That number is not what you would guess, and it is the source of a whole class of bug.
How to use this page
- Search or pick a group. Typing matches the emoji name in whichever language you are reading this in, so โrocketโ, โcoheteโ and โfusรฉeโ all find the same thing. Pasting an emoji into the box finds it too, which is handy when you have one and want to know what it is called.
- Turn skin-tone variants on if you need them. They are off by default, which is why the count starts at 1,914 rather than 3,944. Switching them on shows every modified form; the People and Body group more than triples.
- Paste something into the counter at the bottom. It reports three numbers: what a reader counts, how many code points there are, and what JavaScriptโs length property says. For plain text all three agree. For emoji they do not, and the gap is what breaks length limits.
How many emoji are there?
There are two honest answers and you should know which one you are being given. Unicode 17.0 lists 3,944 fully-qualified emoji. But 2,030 of those โ more than half โ are skin-tone variants of the other 1,914. The same waving hand appears six times: once unmodified and once for each of the five skin tones.
So โ3,944 emojiโ and โ1,914 emojiโ are both true, and which is right depends on whether you think a modified emoji is a different emoji. This page defaults to the base set of 1,914, because that is what a person browsing for something to paste actually wants, and shows the full number the moment you ask for it. Any source quoting a single figure without saying which one it means has skipped the interesting part.
The groups are lopsided for the same reason. People and Body holds 2,418 of the 3,944 โ 61% of all emoji โ because almost everything in it can take a skin tone. Turn the variants off and it drops to a few hundred. Flags, by contrast, has 270 and none of them vary.
An emoji is one character and about five characters long
This is the finding that matters if you write software. Every single one of the 3,944 emoji is exactly one grapheme cluster โ one character, as a reader counts characters. We checked all of them, not a sample. But 3,884 of them, 98.5%, have a JavaScript length that is not 1.
Summed over the whole set, length reports 20,064 for what a reader counts as 3,944 characters. That is 5.09 times too many. The worst single case is a kiss sequence at 15 UTF-16 units: one character on screen, fifteen according to almost every character counter, text field limit and database column ever written.
The reason is that most emoji are sequences. 1,614 of them are joined with a zero-width joiner, an invisible character that glues several emoji into one picture โ that is how a family or a couple is built. Skin tones add another code point. And 1,180 carry a variation selector, U+FE0F, an invisible mark that says โdraw this as an emoji, not as a black-and-white symbolโ.
The fix is not clever, it is just less common than it should be: Intl.Segmenter with grapheme granularity counts what a reader counts, and it is right for all 3,944. The counter on this page uses it, and shows the other two numbers beside it so you can see how far apart they are on your own text.
Why two identical emoji can compare unequal
Unicode marks every sequence in its list as fully-qualified, minimally-qualified or unqualified, and the whole distinction comes down to that one invisible character. We checked it as a property rather than trusting the description: all 1,029 minimally-qualified sequences become a fully-qualified emoji when U+FE0F is stripped. Not most of them โ all of them.
So a red heart written as U+2764 U+FE0F and a red heart written as U+2764 alone look identical in every font, and are different strings. One will not match the other, will hash differently, and will fail an equality check in any language. If you have ever had an emoji filter that mysteriously missed some hearts, this is almost certainly why.
The practical rule: normalise before comparing. Strip variation selectors on both sides, or compare the fully-qualified forms consistently. The emoji this page copies to your clipboard are the fully-qualified ones, which is what you want in nearly every case, because that is the spelling that renders as a colour emoji everywhere.
Honest limits
Whether an emoji appears at all depends on your device, not on this page. Unicode defines the character; Apple, Google, Microsoft, Samsung and the open-source font projects each draw it, and they do so on their own schedule. A brand-new emoji from version 17.0 will show as a blank box on a phone that has not been updated, and there is nothing a web page can do about that. If a cell looks empty, the emoji is real and your system does not have it yet.
They also do not look the same everywhere. The same code point is a different drawing on every platform, and a few have historically differed enough to change the meaning of a message. What you copy is the character, never the picture โ the picture is chosen by whoever reads it.
This list is a snapshot of Unicode 17.0. New emoji are added roughly once a year, so a version published after this page was built is not here. The generator is in the repository and regenerating is one command.
Finally, the counter measures grapheme clusters, which is the right answer for โhow many characters is thisโ. It is not always the right answer for โwill this fitโ, because services impose their own rules โ some count UTF-8 bytes, some count UTF-16 units, and some count emoji as a fixed cost regardless. The three numbers are all shown so you can match whichever one the service in front of you is using.
Why is it free?
Because it is a list and some string measurement. The whole dataset is in the page you have already loaded, everything runs in your browser, and nothing you paste into the counter is uploaded or stored.
So there is no account, no sign-up and nothing held back. The generator that builds this from Unicodeโs emoji-test.txt and the CLDR name annotations is in the repository beside the page, along with the 139-assertion test suite that checks the counts, the grapheme claim and the qualification property โ including the negative controls that stop those tests passing for the wrong reason.