You send 😀 from a phone, the other person reads the message on a laptop — and sees a different face. Not a different mood, not a bug: the same symbol, drawn by another hand. That is how it has worked from the start.
The easiest way to understand it is through something you can measure. Three openly licensed image sets sit on our disk, and each of them covers the same catalogue of 3953 entries. Three sets, one list of symbols — and three very different answers to the question of how to draw it.
The standard describes meaning, not a picture
Unicode is responsible for the fact that a symbol exists, carries a number and means a particular thing: «grinning face», «rocket», «red heart». Its authority ends there. Colour, shape and line weight are not part of the standard — the pictures in its own charts are marked as samples, not as the reference.
The rest belongs to whoever draws. Apple draws its own set, Google draws its own, and so do Samsung, Microsoft and Meta. Open sets do exactly the same, except you can download the result and see where they differ. That is what we are about to do.
One thing follows that is worth accepting once and never revisiting: there is no «correct» look for an emoji. There is a meaning fixed by the standard, and any number of drawings of it.
The three sets on our disk
The sets are laid out by code point: a file is named after the symbol's number, so a single copy serves all nine language versions of the site. Here is what counting the files and adding up their weight produces.
| Set | Drawn by | Licence | Files | Coverage | Set weight | Average file |
|---|---|---|---|---|---|---|
| Noto Color Emoji | Apache 2.0 | 3691 | 93.4 % | 30.6 MiB | 8694 B | |
| OpenMoji | HfG Schwäbisch Gmünd | CC BY-SA 4.0 | 3953 | 100 % | 12.3 MiB | 3265 B |
| Twemoji | Twitter / X | CC BY 4.0 | 3939 | 99.6 % | 9.6 MiB | 2542 B |
More than a threefold difference in weight. And it is not a matter of Google failing to optimise: the sets solve different problems. One draws an illustration, the other draws a sign.
How many shapes go into one face
File weight follows from how many pieces the drawing is made of. A vector picture is built from shapes: outlines, circles, rectangles. Let us count them for six familiar symbols.
| Symbol | Noto | OpenMoji | Twemoji |
|---|---|---|---|
| 😀 grinning face | 3952 B / 23 shapes | 1439 B / 13 | 450 B / 5 |
| ❤️ red heart | 1598 B / 5 | 757 B / 4 | 368 B / 1 |
| 🔥 fire | 2502 B / 2 | 3130 B / 10 | 822 B / 2 |
| 👍 thumbs up | 5434 B / 10 | 2473 B / 13 | 1663 B / 2 |
| 😂 tears of joy | 6538 B / 24 | 2880 B / 20 | 1668 B / 4 |
| 🚀 rocket | 5413 B / 25 | 4498 B / 16 | 677 B / 6 |
The red heart in Twemoji is a single shape: one outline, one fill, done. Noto uses five, because there is a highlight and a soft colour transition in there. The grinning face differs almost ninefold by weight: 3952 bytes against 450.
Why fire breaks the pattern
One row refuses to follow the «Noto is the heaviest» rule: 🔥 takes 3130 bytes in OpenMoji against 2502 in Noto. Open both files and the reason is visible.
- Noto draws the flame with two large shapes and gradient fills: the complexity hides in the colour description, not in the geometry.
- OpenMoji barely uses gradients — it has flat fills and a black outline, so volume has to come from form. Ten shapes instead of two.
- Twemoji takes a third route: two shapes, flat colour, no outline at all. 822 bytes, and at eighteen pixels you will not see the difference.
These are three schools of drawing, not three levels of quality. An illustration, a pictogram and a sign. Each is right in its own place.
Comparing sets by beauty leads nowhere. Compare them by the size at which you intend to show them.
Why the set changes under your feet
Readers usually assume their phone picks the picture. Half true: the drawing comes from a system font, and there is one of those per device. But some apps carry a set of their own and override the system one — which is why the same symbol can look different in a chat and in a browser on that very same phone.
That leaves three layers, and the picture can change at any of them:
- The system. Its font updates together with it — rarely, and in large steps.
- The app. A messenger or a social network may ship its own set, and then the system has no say at all.
- The site. A page is free to serve the picture as a file, and then every reader sees the same thing regardless of device.
We use the third layer selectively: in listings, fresh symbols are rendered as images rather than text. The reason is plain — system fonts do not know them yet, and without the substitution there would be an empty rectangle in that slot. Everything older is served as text, so it can be selected and copied.
What the sets are missing
No set is ever complete. The catalogue grows year by year while image collections update at their own pace — and the gaps show up the moment you match file names against the list of symbols.
- Noto — 262 files missing. Every single one turned out to be a flag: both the kind assembled from two regional letters and the kind assembled from tags, like 🏴. There is not one non-flag entry among the gaps. The set stores flags separately rather than by code point, so our layout never picked them up.
- Twemoji — 14 missing. These are ©️, ®️ and twelve keycaps: #️⃣, *️⃣ and the digits from 0️⃣ to 9️⃣. All of them are old characters that became emoji after the fact.
- OpenMoji — nothing missing. 3953 files against 3953 catalogue entries.
Gaps in a set are neither rare nor a sign of neglect. That is what any drawing of a living standard looks like: an Emoji release lands first, the set catches up afterwards. Fresh symbols spend months without a picture, and that is a story of its own — about the square instead of an emoji.
When the drawing argues with the meaning
While the argument is about line weight, nothing is at stake. It gets worse when the picture starts contradicting the meaning.
The classic case is 🔫. The standard gives the character a neutral description, and the first sets drew a revolver. Then Apple replaced it with a water pistol, and within a couple of years the other major sets followed. The symbol itself never changed: same number, same name. Only the drawing changed — and with it what the recipient understands.
Faces tell a similar story. 😅 reads as relief in one set and as panic in another; 🙂 is friendly in some hands and distinctly smug in others. The sender picks by their own picture, the reader reads by theirs.
If a message matters and its tone rests on a single symbol, check that symbol on its card: 😀, 🔥 and any other are shown here in all three sets at once. If the drawings disagree, spell the tone out in words.
Which set to put in your own project
If you are building a site or an app and would rather not depend on whatever the reader has installed, you ship an image set yourself. Three things decide the choice, and «prettier» is not among them.
- Licence. Apache 2.0 for Noto and CC BY 4.0 for Twemoji require attribution. CC BY-SA 4.0 for OpenMoji also requires derivatives to be shared on the same terms — which matters if you plan to restyle anything.
- Completeness. If your project has flags in it, a set without flag files will need filling in by hand.
- Weight. Thirty megabytes against nine is a difference in page speed anywhere symbols come in bulk: the catalogue, the top 100, a feed.
And a fourth point people remember late: freshness. A set that trails a release leaves you without pictures for everything new — what shipped and when is laid out on the Emoji versions page.
How to compare it yourself
Nothing special is needed. Every symbol card here shows all three drawings side by side — open the rocket, the red heart or thumbs up and look. A separate page on image sets gathers them together with licences and links to the sources.
And if you want to know why one symbol carries two different version numbers in its properties, that is unpacked in the article on the two versions of an emoji.
The conclusion is short. There is one symbol and any number of drawings of it, none of them the authoritative one. Keeping that in mind is more useful than arguing over whose smile is correct.