Skip to main content

Methodology

How DBEmoji counts and verifies emoji

Every number on this site is derived from Unicode Consortium source files by a script in this repository, not entered by hand. This page states the source, the counting rules, and where DBEmoji deliberately differs from Unicode’s own figures.

Unicode Emoji
16.0
Entries
4,070
RGI emoji
3,781
Verified
2026-10-21

Where the data comes from

The dataset is built from emoji-test.txt for Unicode Emoji 16.0 (published 2024-08-14, 23:51:54 GMT) and from UnicodeData.txt for official character names. Both files are vendored into the repository so a build is reproducible and reviewable; refreshing them is a single command, and the dataset is then re-derived and re-validated.

Codepoints, Unicode names, CLDR short names, Unicode groups and subgroups, and version numbers are copied verbatim from those files. Nothing in that list is edited.

What counts as one emoji

DBEmoji ships 4,070 entries. Unicode Emoji 16.0 defines 3,790 sequences Recommended for General Interchange (RGI). The two numbers differ, and here is exactly why.

  • Skin-tone variants are counted separately. 1,840 entries carry a Fitzpatrick modifier. Unicode also counts these individually, so they are not the source of the difference — but they are why the total is far larger than the ~1,900 distinct pictures most people picture when they hear “emoji”.
  • ZWJ sequences are counted separately. 1,615 entries are zero-width-joiner sequences (👨‍👩‍👧, 🧑‍🚒). Each is its own entry because each has its own codepoint sequence and its own page.
  • Components are included. The 9 skin-tone and hair-style modifiers have entries, flagged as components. They are not meant to be sent on their own.
  • Flags are counted as emoji. 289 entries sit in the flags collection, including regional tag sequences.
  • 280 entries are outside Unicode Emoji 16.0. These are text symbols, non-RGI sequences, and characters proposed for a future release. They are the whole of the difference between our total and Unicode’s.

If you want the figure that matches Unicode, use 3,781 RGI emoji plus 9 components. If you want the number of pages on this site, use 4,070.

Entries outside the Unicode emoji set

280 entries are present in this database but not in Unicode Emoji 16.0. They fall into three groups: text symbols that are not emoji (chess pieces, geometric shapes, power symbols), sequences that are syntactically valid but not recommended (skin-tone variants of multi-person emoji, most subdivision flags), and characters proposed for a future Unicode release.

Every one of them is labelled “Not in the Unicode emoji set” on its page, because on mainstream platforms they render as plain text or an empty box rather than a colour emoji. Their pages remain reachable and their data is preserved, but they carry noindex and are excluded from the sitemap: a search result that leads to a character the reader cannot actually use is a dead end.

Unicode categories vs DBEmoji collections

Unicode defines 10 emoji groups. DBEmoji browses through 15, because Unicode’s “People & Body” group alone holds more than 2,000 sequences and is not practical to browse as one list. The extra 5 are DBEmoji collections, not part of the standard, and every category page says which it is.

DBEmoji collections

Collections re-group emoji; they never re-label them. An emoji’s Unicode group and subgroup are always shown on its page, unchanged.

Tags, meanings and tone

Tags, meanings, common uses and tone are DBEmoji editorial interpretation, labelled as such wherever they appear. They are not part of the Unicode Standard and should not be cited as if they were.

Every tag is rebuilt from scratch on each build, by rule, from data a reviewer can check. Theme tags (food, animal, weather …) apply when Unicode’s subgroup licenses them, or when a whole word supporting them appears in the CLDR short name or the GitHub shortcode. Mood tags (happy, sad, angry, love, sleep, sick) follow one reviewed mood per emoji — so 😒 unamused face and 😈 smiling face with horns are not “happy”, and 🥹 face holding back tears is not “sad”. Keyword tags come only from the keywords Unicode CLDR or GitHub’s gemoji list attach to the emoji, never from substring matches. The dataset this site inherited was seeded from a keyword list that matched substrings, which produced results like 😂 being tagged drink (“tea” in “tear”) and an “angry” tag listing 🐳 and ☕. A validation script now recomputes all 22 governed tags and fails the build if the shipped data differs.

Tone comes from the same reviewed mood, with a written note where the register depends on context (😭, 💀, 🙂). Common uses for faces, hearts and hands are written for each emoji or left out; only objects, food, places and symbols show contexts shared by their whole Unicode subgroup, and the page says so. An emoji is never described as both cheerful and sad on the same page.

Shortcodes are only the codes GitHub’s own emoji list (gemoji) maps to that exact emoji, and are labelled as GitHub shortcodes. Slack, Discord and other apps keep separate lists that we have not verified, so we do not claim they support any particular code. Unicode CLDR keywords are shown separately, as keywords.

Where we have no confident basis for a section, the section is omitted rather than filled. See the editorial policy.

Keeping up with Unicode

When the Unicode Consortium publishes a new Emoji release, the vendored source files are refreshed, the dataset is re-derived, and the validator checks every entry against the new release before anything ships. The version and verification date shown across the site come from that build, so they cannot drift from what is actually in the database.

Current: Unicode Emoji 16.0 · dataset 2026-10-21 · verified 2026-10-21