Word Joiner U+2060

Codepoint
U+2060
Decimal
8288
HTML
⁠
CSS
\2060
JS
\u2060
URL
%E2%81%A0
UTF-8
E2 81 A0
Category
Format (Cf)
Block
General Punctuation

The word joiner (U+2060) is a zero-width invisible character that prevents line breaks at its position. It is the opposite of the : where ZWSP says "you can break the line here," word joiner says "you must NOT break the line here."

Think of it as a with no width. It keeps the characters on either side together on the same line without adding any visible gap between them.

Word joiner was introduced in Unicode 3.2 as the proper replacement for the old practice of using the byte order mark (U+FEFF) as a zero-width no-break space. That dual-purpose use of BOM caused confusion, so Unicode split the roles: BOM for file encoding, word joiner for inline no-break behavior.

Common Uses

  • Preventing line breaks between a number and its unit. Place word joiner between "100" and "%" to ensure "100%" never breaks across lines: 100[WJ]%. Unlike non-breaking space, word joiner adds no visible gap.
  • Keeping code snippets together. In documentation that includes inline code, word joiner prevents function names or expressions from breaking mid-word.
  • Keeping compound terms intact. Technical terms, product names, or abbreviations that should never be split across lines.
  • Preventing orphaned punctuation. Keep a punctuation mark with the word it belongs to, preventing a colon, semicolon, or other mark from appearing at the start of a new line.
  • Controlling text wrapping in responsive layouts. When CSS white-space: nowrap is too broad (it prevents all breaks in the element), word joiner gives you per-character control.

How to Type

PlatformMethod
WindowsNo keyboard shortcut. Copy from this page.
macOSNo keyboard shortcut. Copy from this page.
LinuxCtrl+Shift+U, type 2060, press Enter.
HTMLType ⁠ or ⁠.
JavaScriptUse \u2060 in strings.
CSSUse content: '\2060'; but rarely needed in CSS.

Word Joiner vs Non-Breaking Space

This is the most common question about word joiner: when to use it instead of non-breaking space.

FeatureWord Joiner (U+2060)Non-Breaking Space (U+00A0)
Prevents line break?YesYes
Has visible width?No (zero width)Yes (same as regular space)
Adds space between words?NoYes
HTML entity⁠ 
Use whenYou want no-break with no gapYou want no-break with a visible space

Example

To keep "Dr." and "Smith" together:

  • Dr. Smith keeps them together WITH a space between them. This is what you usually want.
  • Dr.[WJ]Smith keeps them together WITHOUT a space. This would display as "Dr.Smith" which is usually wrong.

To keep "100" and "%" together:

  • 100[WJ]% keeps them together without adding a gap. This is correct because there should be no space between a number and the percent sign.
  • 100 % keeps them together but adds a visible space, displaying as "100 %", which may or may not be what you want depending on your style guide.

The Zero-Width Character Family

Word joiner sits in a family of zero-width characters that control line-breaking and character-joining behavior:

CharacterLine break?Joining?Purpose
Zero-Width Space (U+200B)Allows breakNone"Break here if needed"
Word Joiner (U+2060)Prevents breakNone"Never break here"
Zero-Width Non-Joiner (U+200C)No effectPrevents joining"Don't connect these letters"
Zero-Width Joiner (U+200D)No effectForces joining"Connect these characters"

Word joiner and zero-width space are functional opposites. ZWNJ and ZWJ are functional opposites. Together, these four characters give precise control over how text wraps and how characters interact.

Technical Details

  • Unicode category: Cf (Format).
  • Width: Zero. No visible glyph.
  • Line breaking: Prevents line breaks (class WJ in the Unicode Line Breaking Algorithm).
  • Word breaking: Does not affect word boundaries.
  • Bidirectional class: BN (Boundary Neutral). Does not affect text direction.
  • History: Introduced in Unicode 3.2 (2002) as the replacement for using U+FEFF as an inline zero-width no-break space.

In code:

js
// JavaScript: detect word joinertext.includes('\u2060')
// JavaScript: remove word joinerstext.replace(/\u2060/g, '')
// JavaScript: insert word joiner between a number and unit`${value}\u2060${unit}`
// HTML: keep "100%" from breaking100⁠%

When to Use CSS Instead

For most web layout situations, CSS solutions are simpler and more maintainable than inserting word joiner characters:

css
/* Prevent all line breaks in an element */.no-break { white-space: nowrap; }
/* Prevent breaks between specific elements */.unit { display: inline-block; } /* inline-block won't break internally */

Use word joiner when:

  • You need no-break behavior in plain text (not HTML).
  • You need per-character control that CSS cannot provide.
  • The text will be consumed by systems that do not support CSS (emails, PDFs, plain text files).
  • You are working with internationalized text where CSS white-space does not give enough control.

Security Considerations

Word joiner is generally low-risk from a security perspective. It does not affect text direction, does not create visual confusion, and does not enable the attacks associated with bidirectional override characters. Its main security-adjacent concern is:

  • String comparison. Two strings that look identical may differ by word joiner characters, causing matching failures. This is generally an annoyance rather than a security vulnerability.
  • Length calculation. Word joiner adds to the code point count of a string without adding visible length, which could theoretically be used to bypass character limits in some systems.

Quick Reference

When you need to control line breaking in text, here is the right character for each situation:

I want to...Use thisCharacter
Allow a line break with no visible markZero-Width SpaceU+200B
Allow a line break with a visible hyphenSoft HyphenU+00AD
Prevent a line break with a visible spaceNon-Breaking SpaceU+00A0
Prevent a line break with no visible spaceWord JoinerU+2060

Word joiner fills the specific niche of "prevent line break, zero width." If that is what you need, it is the correct and only Unicode character for the job.

Frequently Asked Questions

What is the difference between word joiner and non-breaking space?
Non-breaking space (U+00A0) prevents line breaks AND adds visible space between words. Word joiner (U+2060) prevents line breaks WITHOUT adding any visible space. Use word joiner when you need invisible no-break behavior.
What is the difference between word joiner and zero-width space?
They are functional opposites. Zero-width space (U+200B) creates a line-break opportunity (allows the line to break). Word joiner (U+2060) prevents line breaks. Both are invisible and zero-width, but they have opposite effects on text wrapping.
Why was word joiner created?
The byte order mark (U+FEFF) was originally used for two purposes: as a BOM at the start of files and as a zero-width no-break space inline. Unicode 3.2 split these roles, creating word joiner (U+2060) as the dedicated inline no-break character.
When should I use word joiner?
Use word joiner when you need to keep two elements together on the same line without adding any visible space. For example, between a number and its unit symbol, between parts of a code snippet, or between any characters where a line break would be confusing.

Related Characters

Need to detect or remove Word Joiner characters in your text?

Open Invisible Character Viewer