Emoji Data for Developers
The same normalised dataset this site runs on, as a single JSON file. Generated from Unicode 17.0.0 and CLDR 48.2.0, with every source file's checksum recorded.
Compact emoji index
- Format
- JSON
- Size
- 714 KB
- Records
- 3953
- Unicode
- 17.0.0
- Emoji
- 17.0
- CLDR
- 48.2.0
- Generated
- 2026-07-31
- Licence
- Unicode License v3
Structure
Rows are positional arrays rather than objects, with shared lookup tables for groups, subgroups and versions. That is what keeps the file small enough to ship to a browser; expand it into objects on load if you prefer.
| Field | Meaning |
|---|---|
| emoji | The emoji character itself. |
| slug | URL-safe identifier, stable across builds. |
| name | CLDR English short name. |
| ko | CLDR Korean short name, or an empty string when CLDR has none. |
| kw | Pipe-separated search keywords, English and Korean combined. |
| g | Index into the shared `groups` array. |
| sg | Index into the shared `subgroups` array. |
| flags | Bit field: variant 1, skinTone 2, flag 4, zwj 8, component 16, keycap 32. |
| ev | Index into the shared `versions` array (Emoji version). |
| base | Row index of the base entry, or -1 when this row is itself a base. |
Reading it
const data = await fetch('/data/emoji-index.v1.json').then((r) => r.json());
const rows = data.rows.map((row) => {
const [emoji, slug, name, ko, kw, g, sg, flags, ev, base] = row;
return {
emoji,
slug,
name,
korean: ko || null,
keywords: kw ? kw.split('|') : [],
group: data.groups[g],
subgroup: data.subgroups[sg],
emojiVersion: data.versions[ev],
isVariant: (flags & data.flagBits.variant) !== 0,
baseIndex: base,
};
});Provenance
Every upstream file is downloaded, checksummed and recorded before the dataset is generated, so a build can be traced back to exact source bytes. The full list of URLs, SHA-256 hashes and retrieval dates is on the data sources page.
What you get here is official data, normalised. It contains no descriptions, meanings or keyword lists written by anyone other than Unicode and CLDR — nothing is scraped from other emoji sites.
Licence and attribution
The Unicode and CLDR data is distributed under the Unicode License v3, which allows redistribution and commercial use with the licence notice retained. Please keep that notice when you redistribute this file.
Emoji artwork is not covered by any of this. Apple, Google, Microsoft and Samsung designs are proprietary and are not included or reproduced anywhere on this site — see the licensing page for the open alternatives.
Frequently asked questions
Is there a public API?
No, and deliberately so. A static file costs nothing to serve, cannot be rate-limited into unreliability, and works offline once cached. If you need the data at runtime, download it and ship it with your project.
Can I use this commercially?
The underlying Unicode and CLDR data is published under the Unicode License v3, which permits commercial use with attribution. The normalised structure here is derived from it. Emoji artwork is a separate matter — see the licensing guide.
How often does it change?
When Unicode publishes a release. The version and generation date are in the manifest, and every change is listed in the changelog.
Why are skin tone variants separate rows?
Because they are separate RGI sequences with their own code points. The `base` column links each one back to its untoned entry so you can fold them together if you would rather.