← Glossary

ZWJ (Zero Width Joiner) - what it is and how it works

Last updated: 2026-09-04·~4 min

This article takes about 4 minutes to read.

ZWJ is the invisible glue that turns separate emoji into compound characters like family groups and profession symbols.The Zero Width Joiner (U+200D) is a Unicode control character with no visible width. When placed between emoji, it tells the rendering engine to display them as a single combined glyph - if one exists.

Definition

Zero Width Joiner (ZWJ) is a non-printing character at Unicode codepoint U+200D. Originally designed for complex scripts like Arabic and Indic languages (where letter forms change based on adjacency), it was later repurposed for emoji composition.

In emoji context, ZWJ acts as a combinator: Emoji A + ZWJ + Emoji B = Combined Emoji (if supported). If the platform doesn't have a combined glyph, it gracefully degrades to showing A and B separately.

How ZWJ sequences work

A ZWJ sequence is a chain of emoji connected by ZWJ characters. The rendering engine processes the sequence left to right:

  1. Read the first emoji codepoint
  2. Encounter ZWJ (U+200D)
  3. Read the next emoji codepoint
  4. Check if a combined glyph exists for this pair
  5. If yes, render the combined glyph. If no, render both emoji separately
  6. Repeat for any additional ZWJ + emoji in the sequence

Common ZWJ sequence categories

Professions

Person + ZWJ + object = profession emoji:

  • 👩 + ZWJ + 💻 = 👩‍💻 (woman technologist)
  • 👨 + ZWJ + 🍳 = 👨‍🍳 (man cook)
  • 🧑 + ZWJ + 🚀 = 🧑‍🚀 (astronaut)

Families

Multiple person emoji joined by ZWJ:

  • 👨 + ZWJ + 👩 + ZWJ + 👧 = 👨‍👩‍👧 (family)
  • 👩 + ZWJ + 👩 + ZWJ + 👦 + ZWJ + 👦 = 👩‍👩‍👦‍👦 (family with two mothers and two sons)

Gender and appearance variations

Base emoji + ZWJ + gender sign or appearance component:

  • 🧑‍🦰 = 🧑 + ZWJ + 🦰 (person with red hair)
  • 🏃‍♀️ = 🏃 + ZWJ + ♀️ (woman running)

Flags (subdivision)

Subdivision flags like 🏴󠁧󠁢󠁥󠁮󠁧󠁿 (England) use tag sequences rather than ZWJ, but the principle is similar - multiple invisible characters combine into one glyph.

Why ZWJ sequences break

CauseResultFix
Old OS / fontComponents shown separatelyUpdate the device
Text editor strips ZWJSequence breaks apartUse a Unicode-aware editor
Platform doesn't support the comboFallback to individual emojiUse well-established sequences
Character limit counts codepointsSequence uses more "characters" than expectedCount grapheme clusters instead

Character counting implications

A family emoji like 👨‍👩‍👧‍👦 is 7 codepoints (4 emoji + 3 ZWJ characters). Platforms that count codepoints may charge you 7 characters for what looks like 1. Platforms that count "grapheme clusters" instead treat the whole sequence as 1 unit.

Practical tips for emoji art

  • Stick to widely-supported ZWJ sequences (professions, basic families)
  • Test on multiple platforms before using in bios or important posts
  • For maximum compatibility, prefer single-codepoint emoji over ZWJ sequences
  • When copy-pasting ZWJ sequences, use the emoji picker rather than text selection to avoid breaking the sequence

Related terms

  • Codepoint - the unique number assigned to each Unicode character

Was this article helpful?