ZWJ (Zero Width Joiner) - what it is and how it works
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:
- Read the first emoji codepoint
- Encounter ZWJ (U+200D)
- Read the next emoji codepoint
- Check if a combined glyph exists for this pair
- If yes, render the combined glyph. If no, render both emoji separately
- 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
| Cause | Result | Fix |
|---|---|---|
| Old OS / font | Components shown separately | Update the device |
| Text editor strips ZWJ | Sequence breaks apart | Use a Unicode-aware editor |
| Platform doesn't support the combo | Fallback to individual emoji | Use well-established sequences |
| Character limit counts codepoints | Sequence uses more "characters" than expected | Count 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?