{
  "version": "v1",
  "kind": "emoji",
  "description": "ZWJ sequences, skin tones, flags, keycaps, presentation selectors, recent emoji",
  "count": 20,
  "seed": null,
  "items": [
    {
      "id": "emoji-01",
      "text": "👍",
      "note": "Single emoji (1 code point, 2 UTF-16 units, 4 UTF-8 bytes)",
      "lang": null,
      "length": {
        "codepoints": 1,
        "utf16_units": 2,
        "utf8_bytes": 4
      },
      "codepoints": "U+1F44D"
    },
    {
      "id": "emoji-02",
      "text": "👍🏽",
      "note": "Emoji with skin-tone modifier",
      "lang": null,
      "length": {
        "codepoints": 2,
        "utf16_units": 4,
        "utf8_bytes": 8
      },
      "codepoints": "U+1F44D U+1F3FD"
    },
    {
      "id": "emoji-03",
      "text": "👨‍👩‍👧‍👦",
      "note": "ZWJ family sequence (7 code points, 1 grapheme)",
      "lang": null,
      "length": {
        "codepoints": 7,
        "utf16_units": 11,
        "utf8_bytes": 25
      },
      "codepoints": "U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466"
    },
    {
      "id": "emoji-04",
      "text": "🧑🏼‍💻",
      "note": "ZWJ profession with skin tone",
      "lang": null,
      "length": {
        "codepoints": 4,
        "utf16_units": 7,
        "utf8_bytes": 15
      },
      "codepoints": "U+1F9D1 U+1F3FC U+200D U+1F4BB"
    },
    {
      "id": "emoji-05",
      "text": "👩🏾‍🤝‍👩🏻",
      "note": "ZWJ sequence with two different skin tones",
      "lang": null,
      "length": {
        "codepoints": 7,
        "utf16_units": 12,
        "utf8_bytes": 26
      },
      "codepoints": "U+1F469 U+1F3FE U+200D U+1F91D U+200D U+1F469 U+1F3FB"
    },
    {
      "id": "emoji-06",
      "text": "🧑🏻‍❤️‍💋‍🧑🏿",
      "note": "Kiss with two skin tones (10 code points)",
      "lang": null,
      "length": {
        "codepoints": 10,
        "utf16_units": 15,
        "utf8_bytes": 35
      },
      "codepoints": "U+1F9D1 U+1F3FB U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F9D1 U+1F3FF"
    },
    {
      "id": "emoji-07",
      "text": "🏳️‍🌈",
      "note": "Rainbow flag (VS16 + ZWJ)",
      "lang": null,
      "length": {
        "codepoints": 4,
        "utf16_units": 6,
        "utf8_bytes": 14
      },
      "codepoints": "U+1F3F3 U+FE0F U+200D U+1F308"
    },
    {
      "id": "emoji-08",
      "text": "🏴‍☠️",
      "note": "Pirate flag",
      "lang": null,
      "length": {
        "codepoints": 4,
        "utf16_units": 5,
        "utf8_bytes": 13
      },
      "codepoints": "U+1F3F4 U+200D U+2620 U+FE0F"
    },
    {
      "id": "emoji-09",
      "text": "🇸🇪 🇯🇵 🇧🇷 🇺🇳",
      "note": "Regional-indicator flags",
      "lang": null,
      "length": {
        "codepoints": 11,
        "utf16_units": 19,
        "utf8_bytes": 35
      },
      "codepoints": "U+1F1F8 U+1F1EA U+0020 U+1F1EF U+1F1F5 U+0020 U+1F1E7 U+1F1F7 U+0020 U+1F1FA U+1F1F3"
    },
    {
      "id": "emoji-10",
      "text": "🏴󠁧󠁢󠁳󠁣󠁴󠁿",
      "note": "Subdivision flag via tag sequence (England/Scotland style)",
      "lang": null,
      "length": {
        "codepoints": 7,
        "utf16_units": 14,
        "utf8_bytes": 28
      },
      "codepoints": "U+1F3F4 U+E0067 U+E0062 U+E0073 U+E0063 U+E0074 U+E007F"
    },
    {
      "id": "emoji-11",
      "text": "1️⃣ #️⃣ *️⃣ 🔟",
      "note": "Keycap sequences",
      "lang": null,
      "length": {
        "codepoints": 13,
        "utf16_units": 14,
        "utf8_bytes": 28
      },
      "codepoints": "U+0031 U+FE0F U+20E3 U+0020 U+0023 U+FE0F U+20E3 U+0020 U+002A U+FE0F U+20E3 U+0020 U+1F51F"
    },
    {
      "id": "emoji-12",
      "text": "❤ ❤️",
      "note": "Text-style vs emoji-style heart (VS16)",
      "lang": null,
      "length": {
        "codepoints": 4,
        "utf16_units": 4,
        "utf8_bytes": 10
      },
      "codepoints": "U+2764 U+0020 U+2764 U+FE0F"
    },
    {
      "id": "emoji-13",
      "text": "☺︎ ☺️",
      "note": "Explicit text (VS15) vs emoji (VS16) presentation",
      "lang": null,
      "length": {
        "codepoints": 5,
        "utf16_units": 5,
        "utf8_bytes": 13
      },
      "codepoints": "U+263A U+FE0E U+0020 U+263A U+FE0F"
    },
    {
      "id": "emoji-14",
      "text": "🐻‍❄️",
      "note": "Polar bear (Emoji 13.0 ZWJ sequence)",
      "lang": null,
      "length": {
        "codepoints": 4,
        "utf16_units": 5,
        "utf8_bytes": 13
      },
      "codepoints": "U+1F43B U+200D U+2744 U+FE0F"
    },
    {
      "id": "emoji-15",
      "text": "🫨 🙂‍↔️ 🫩",
      "note": "Recent emoji (15.0, 15.1, 16.0): font fallback shows tofu or pieces",
      "lang": null,
      "length": {
        "codepoints": 8,
        "utf16_units": 11,
        "utf8_bytes": 23
      },
      "codepoints": "U+1FAE8 U+0020 U+1F642 U+200D U+2194 U+FE0F U+0020 U+1FAE9"
    },
    {
      "id": "emoji-16",
      "text": "🇦",
      "note": "Lone regional indicator",
      "lang": null,
      "length": {
        "codepoints": 1,
        "utf16_units": 2,
        "utf8_bytes": 4
      },
      "codepoints": "U+1F1E6"
    },
    {
      "id": "emoji-17",
      "text": "🏻",
      "note": "Lone skin-tone modifier",
      "lang": null,
      "length": {
        "codepoints": 1,
        "utf16_units": 2,
        "utf8_bytes": 4
      },
      "codepoints": "U+1F3FB"
    },
    {
      "id": "emoji-18",
      "text": "Great job! 🎉 See you soon 👋🏿",
      "note": "Emoji inside a sentence",
      "lang": "en",
      "length": {
        "codepoints": 28,
        "utf16_units": 31,
        "utf8_bytes": 37
      },
      "codepoints": "U+0047 U+0072 U+0065 U+0061 U+0074 U+0020 U+006A U+006F U+0062 U+0021 U+0020 U+1F389 U+0020 U+0053 U+0065 U+0065 U+0020 U+0079 U+006F U+0075 U+0020 U+0073 U+006F U+006F U+006E U+0020 U+1F44B U+1F3FF"
    },
    {
      "id": "emoji-19",
      "text": "co🔥de",
      "note": "Emoji inside a word",
      "lang": "en",
      "length": {
        "codepoints": 5,
        "utf16_units": 6,
        "utf8_bytes": 8
      },
      "codepoints": "U+0063 U+006F U+1F525 U+0064 U+0065"
    },
    {
      "id": "emoji-20",
      "text": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀",
      "note": "20 emoji in a row (80 UTF-8 bytes, 40 UTF-16 units)",
      "lang": null,
      "length": {
        "codepoints": 20,
        "utf16_units": 40,
        "utf8_bytes": 80
      },
      "codepoints": "U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600 U+1F600"
    }
  ]
}