Browse and click to copy any emoji. Categorized for easy finding.
Emojis have become one of the most universal languages on the internet - but behind every tiny smiling face or dancing cat lies a surprisingly deep technical system that powers billions of messages every single day. This guide explains exactly how emojis work, who controls them, why they look different across devices, and how to use them safely in your own websites and digital content.
New emojis are proposed and approved by the Unicode Consortium - a non-profit organization based in Mountain View, California. The Unicode Consortium is the global authority responsible for maintaining the universal text encoding standard called Unicode. Think of Unicode as a massive master list that assigns a unique number (called a "code point") to every character, symbol, and emoji used in every human language on Earth.
Anyone can submit a proposal for a new emoji through the Unicode Consortium's public proposal process. However, approval is far from guaranteed. The review committee evaluates each proposal based on strict criteria including: the likely frequency of use, whether the concept is distinct enough from existing emojis, its expected relevance across different cultures and age groups, and its ability to be rendered clearly at small sizes. Major tech companies like Google, Apple, Microsoft, and Meta are voting members of the consortium, which means they all have a say in which emojis ultimately make it into the official standard. Approved emojis are published in annual Unicode releases - for example, Unicode 15.0, 15.1, and so on.
This is one of the most common sources of confusion for everyday users. The answer comes down to a concept called Cross-Platform Rendering.
When the Unicode Consortium approves an emoji, it only assigns that emoji a unique code number - it does NOT dictate what the emoji must look like visually. The actual artwork (or "glyph") for each emoji is completely up to each operating system manufacturer to design from scratch. Apple draws its own versions, Google draws theirs, Microsoft draws theirs, Samsung draws theirs, and so on. This is why the simple "grinning face" emoji (U+1F600) looks like a shiny 3D cartoon on iOS but a flat illustrated character on Android.
In practice, this means the emotional tone of a message can sometimes change depending on where it is read. Research has shown that the same emoji can be interpreted differently by different people depending on which device they use. For content creators and digital marketers, this is an important consideration - always test how your emoji usage appears on multiple platforms before publishing.
Let's start with Hexadecimal Codes. Computers store all data as numbers. When Unicode assigns a unique code point to a character, that code point is typically written in hexadecimal (base-16) notation. Hexadecimal uses the digits 0-9 plus the letters A-F to represent numbers. For example, the grinning face emoji has the Unicode code point U+1F600. The "1F600" is a hexadecimal number. In everyday decimal numbers, that equals 128,512. The "U+" prefix simply means "this is a Unicode code point."
Now for Surrogate Pairs. Early versions of a common text encoding called UTF-16 were designed to handle code points using 16-bit (2-byte) chunks. However, there are over 1 million possible Unicode code points - far more than a single 16-bit chunk can represent. To solve this, UTF-16 uses a clever trick: for characters with code points above U+FFFF (which includes most modern emojis), it represents them using TWO 16-bit values working together. This pair of values is called a Surrogate Pair.
Why does this matter to you as a web developer or content writer? Because older
programming languages and some databases that use UTF-16 internally (including older
versions of JavaScript and some SQL databases) may accidentally split a surrogate pair
in half when counting string length or slicing text. This can corrupt emojis or cause
errors. The modern solution is to use UTF-8 encoding everywhere
possible, which handles all emoji code points elegantly without surrogate pairs.
Always set <meta charset="UTF-8"> in your HTML
pages.
The safest approach is to always ensure your web page, database, and any content management system (CMS) you are using is set to use UTF-8 encoding. Here are the key checkpoints:
<meta charset="UTF-8"> inside your <head> tag.utf8mb4 (NOT plain "utf8" - the full "utf8mb4" variant is required to support emojis).Content-Type: text/html; charset=utf-8.
The Clipboard API is the modern browser technology that tools like
this one use to copy text to your clipboard. Specifically, it uses
navigator.clipboard.writeText() - a secure, asynchronous
JavaScript method available in all modern browsers. The older method
(document.execCommand('copy')) is deprecated and
unreliable. The Clipboard API requires the page to be served over HTTPS for security
reasons, which is another good reason to always use HTTPS for your websites.
Skin tone modifiers are special Unicode characters (U+1F3FB through U+1F3FF) that can be appended directly after a human-figure emoji to change its skin tone. For example, the waving hand emoji followed by the medium-dark skin tone modifier produces a darker waving hand. Not all platforms support all combinations, but support has grown dramatically since their introduction in Unicode 8.0 (2015).
ZWJ Sequences (Zero Width Joiner sequences) are one of the most technically fascinating parts of the emoji standard. A Zero Width Joiner is a special invisible Unicode character (U+200D) that, when placed between two emojis, signals to the rendering system that they should be displayed as a single combined image. For example: Woman + ZWJ + Laptop = "Woman Technologist" emoji. Family emojis are built entirely from ZWJ sequences connecting individual person emojis. The important thing to know is that if a device does not support a particular ZWJ sequence, it will simply display the individual emojis side by side rather than the combined version - which provides graceful fallback behavior.
The table below shows the official Unicode code point for popular emojis. You can use these codes directly in HTML using the format &#x[CODE]; (e.g., 😀 renders as 😀).
| Emoji | Name | Unicode Code Point | HTML Entity |
|---|---|---|---|
| 😀 | Grinning Face | U+1F600 | 😀 |
| ❤️ | Red Heart | U+2764 | ❤️ |
| 🔥 | Fire | U+1F525 | 🔥 |
| 👍 | Thumbs Up | U+1F44D | 👍 |
| 💯 | Hundred Points | U+1F4AF | 💯 |
| 🚀 | Rocket | U+1F680 | 🚀 |
| 📸 | Camera with Flash | U+1F4F8 | 📸 |
| ⭐ | Star | U+2B50 | ⭐ |
| 💡 | Light Bulb | U+1F4A1 | 💡 |
| 🏆 | Trophy | U+1F3C6 | 🏆 |