Zalgo text works by stacking Unicode combining marks onto ordinary characters. Unicode places no limit on how many can attach to one base character, so the marks pile up above and below the line until the text spills out of its container. It is not a bug or an exploit — it is the combining mark system used far past its intended scale.
What a combining mark does
A combining mark has no width and attaches to the character before it. One acute accent on an e produces é. The Combining Diacritical Marks block from U+0300 to U+036F holds well over a hundred of them, intended so any base letter can carry any needed accent. Nothing in the design says "one per letter".
Why it looks different everywhere
Rendering engines decide where to place each stacked mark, and they disagree. The same string can be a tidy vertical column on one device and a scattered smear on another. There is no canonical appearance for Zalgo text, which is why a screenshot never matches what your reader sees.
Where it breaks things
Stacked marks increase line height, so text overlaps whatever is above and below it. Container overflow is common. Messaging platforms frequently truncate or strip long combining sequences on submission. And each mark is a character, so intensity multiplies the length — a short word at heavy settings can run to dozens of characters.
The accessibility problem is severe
A screen reader may attempt to announce every mark by name. A five-letter word carrying thirty marks each becomes a recitation lasting minutes. This is the single most hostile Unicode effect for anyone using assistive technology, and it should never appear in content someone might need to read.
Using it responsibly
Keep it to a word or two in a decorative context — a themed tag, a heading in a personal profile. Use the lighter intensity, which stays readable. Never apply it to anything functional, and never to a whole message. The effect lands harder in a short burst anyway.
References
Related tools and guides
Last updated September 2026 · Editorial policy · How we verify Unicode claims