Sindhi ZWJ and ZWNJ Explained

Two invisible Unicode characters appear on the current Sindhi keyboard. Here is what they are, what they can and cannot do, and how to inspect them safely.

The current SindhiKeyboardOnline layout includes two keys labelled ZWJ and ZWNJ. They do not display a visible letter. Instead, they insert invisible Unicode formatting characters that can influence how joining behavior is handled in cursive scripts.

The two characters

KeyCode pointNameVisible glyph?
ZWJU+200DZERO WIDTH JOINERNo
ZWNJU+200CZERO WIDTH NON-JOINERNo

Why they exist

Unicode’s text model separates the underlying character sequence from its visual shaping. Arabic-script text is normally displayed using right-to-left behavior and contextual shaping. Unicode also provides format characters for situations where the normal joining behavior is not enough.

The Unicode Bidirectional Algorithm explains how right-to-left text is ordered, while shaping of cursively connected scripts is handled according to the script’s joining behavior. See Unicode UAX #9.

When should you use them?

Do not insert ZWJ or ZWNJ simply because they look technical. They are useful when a specific text sequence requires control over joining or when a Unicode-aware workflow expects them. Adding invisible characters randomly can create strings that compare differently from the same visible text without the controls.

How to test safely

  1. Start with a normal Sindhi word or phrase.
  2. Copy it before adding any invisible character.
  3. Place the cursor where you need the control.
  4. Insert ZWJ or ZWNJ from the keyboard.
  5. Compare the result visually and when copying it back into a plain-text field.

If you are unsure whether a character sequence contains an invisible control, use a Unicode/code-point inspection tool or compare the text programmatically rather than relying only on what the font displays.

For more context, read Unicode vs non-Unicode text and Sindhi Typing Problems and Fixes.

Joining is a shaping property, not a separate letter

Arabic-script letters can take different contextual forms depending on neighboring characters. Unicode describes this through joining properties and rendering rules. ZWJ and ZWNJ are controls that participate in this system; they are not replacement letters and should not be treated as ordinary alphabet characters.

Unicode's Arabic-script chapter identifies U+200D ZERO WIDTH JOINER as a join-causing character and U+200C ZERO WIDTH NON-JOINER as non-joining. It also explains that these controls can affect how cursive connections are rendered. See the Unicode Arabic-script specification.

The practical difference

Think of ZWJ as a request that can enable a connection in a suitable context, while ZWNJ prevents a cursive connection between adjacent characters. The actual visual result still depends on the characters, font, and shaping implementation involved. A control does not guarantee a particular glyph design.

How to debug invisible controls

If two strings look identical but behave differently when copied or compared, invisible characters are worth checking. Place each string in a code-point inspection tool, or compare their character sequences programmatically. This is more reliable than trying to diagnose an invisible character from a screenshot.

Primary References

This page uses the Unicode Standard as its technical reference where Unicode character identities, code points, bidirectional behavior, or Arabic-script annotations are discussed.

Reference links reviewed: September 2026

Written by

Ayaz Thebo Author profile

Website developer with 3 years of experience, passionate about building useful and accessible websites. Loves the Sindhi language and Sindh, and enjoys creating digital tools that make Sindhi easier to use online.