
Joins characters. Required inside emoji sequences and several scripts.
joinercontext-dependentTwo invisible characters that control whether the glyphs around them join: one forces a connection, the other prevents one. They are zero-width, and they carry meaning.
From emoji, where a sequence of separate pictures is bound into a single one, and from Arabic, Persian, Urdu and the Indic scripts, where joining behaviour is part of spelling.
Inside an emoji sequence, always. A family emoji is several separate people bound together by this character; take it out and the single picture becomes three. The same holds for professions, flags and skin-tone combinations.
It is equally required in several scripts, where it forces a ligature that spelling demands. TraceFree PRO recognises both cases and does not touch the character in either.
| Preset | Action |
|---|---|
conservative | asked about |
default | removed |
report-only | asked about |
strict | removed |
Context guards can only ever make a cleanup gentler, never sharper. A rule saying “always remove” does not override them.
In TraceFree PRO, turn on the clipboard watcher and copy the text. On the command line:
tracefree clean --backup document.txt
pbpaste | tracefree clean | pbcopyReport without changing anything — exit code 1 on findings, so it works in CI:
tracefree check -r ./docsThis page never prints the character itself, only ways of writing it. A page about invisible characters that contained invisible characters would be unreviewable — and that is the problem the program exists to solve.
| Notation | Value |
|---|---|
| Unicode | U+200D |
| Rust | \u{200D} |
| JavaScript, Python | \u200D |
| HTML | ‍ ‍ |
| Regex (PCRE, Rust) | \x{200D} |
Paste anything into the browser demo and see what is in it. Same engine as the app, running entirely on your device — nothing is uploaded.

