Zalgo text is the style that drips. Letters sprout marks above and below until the line bleeds into the ones around it, and the effect looks like something went wrong with the renderer. It did not. Every one of those marks is an ordinary Unicode character doing exactly what it was designed to do, and the same mechanism that produces the glitch aesthetic also produces the strikethrough and underline styles on this site. Understanding it explains both, and explains why these are the styles most likely to get your text rejected.
Most characters occupy space. A combining mark does not. It draws on top of, under, or through the character that came before it, and the pair render as a single visible unit.
The marks used here live in the Combining Diacritical Marks block at U+0300 to U+036F, the same block that puts an acute accent on a French vowel or a tone mark on a Vietnamese one. There is nothing exotic about them. They exist so that scripts which build letters out of a base plus one or more marks can be written at all.
Unicode's text segmentation annex, UAX #29, calls a base character plus its marks a grapheme cluster. Your eye sees one letter. The string holds two characters, or twenty.
The zalgo generator simply stacks more of them than any natural language would.
The block splits roughly into marks that render above the base character, marks that render below it, and marks that render across it.
Stack several above-marks on one letter and they pile upward, each one drawn a little higher than the last. Stack below-marks and they descend. That vertical growth is the whole visual signature of the style, and it is why zalgo text overlaps the lines above and below it in a chat window: the marks are drawn outside the line box the renderer reserved for the text.
The through-marks are the useful ones. U+0336, COMBINING LONG STROKE OVERLAY, draws a line through the base character, which is how the strikethrough generator works. U+0332, COMBINING LOW LINE, draws a line under it, which is how the double underline generator works.
Same mechanism, different intent. One is a glitch effect and one is a formatting effect that works in fields with no formatting.
This is the property that makes overlay styles behave unlike every other style on the site.
A substituted alphabet replaces your letters. Type an A, get U+1D400. A zalgo or strikethrough style leaves your A as U+0041 and inserts marks after it. The underlying word is still plain ASCII.
That has a real consequence. A system that strips combining marks before comparing, or that applies a normalisation form, can still match the plain word underneath. Search sometimes finds struck-through text where it would never find bold text. Profanity filters certainly do, which is why the old trick of evading one with combining marks stopped working years ago.
It also means the unzalgo tool can recover the original cleanly. Removing every combining mark from a zalgo string leaves the exact text that went in, which is not true of a substituted alphabet unless you map every character back.
Most styles on this site add a fixed number of characters. A frame costs six whether your text is three letters or fifty. Overlay styles do not work that way, because they add marks per character.
Measured on a 48-character string, single strikethrough added 41 characters. Double strikethrough added 121. The heaviest zalgo row added 160, taking a 48-character phrase past 200.
That is the reason these styles break a bio and nothing else does. A Facebook bio caps at 101 characters. An Instagram bio at 150. A WhatsApp About at 139. A single pass of heavy zalgo will exceed all three from an input that looked comfortably short.
Ratios mislead here, which is why the badges on this site report absolute characters. Ten added characters is half again as long on a 20-character handle and invisible in a 2,200-character caption. A percentage cannot be checked against a fixed limit. A character count can.
Three separate mechanisms cause zalgo text to fail where bold text succeeds.
Length is the first and the most common. The string is genuinely much longer than it looks, so a field that would accept the same words plain refuses the marked version.
Normalisation is the second. Several normalisation forms reorder or recombine marks according to their canonical ordering, so a string that renders one way in your browser can be stored in a different order and render differently afterwards. Marks that were carefully stacked come back rearranged.
Deliberate filtering is the third. Plenty of platforms strip combining marks from name fields specifically, because stacked marks break layout for everyone else on the page. That is not a bug in their validation. It is the validation working.
A line of text is drawn inside a box whose height the renderer decides in advance, usually from the font's metrics rather than from the actual content.
Combining marks stacked ten deep draw outside that box. The renderer does not reserve extra room, so the marks overlap whatever is above and below. In a chat window that means your message covers the previous one. In a feed it means your caption bleeds into the post header.
Some renderers clip instead of overlapping, so the marks are simply cut off and the effect disappears. Some reflow, which makes the surrounding text jump. You get a different result on iOS, Android, desktop web and a terminal, and you cannot control which.
This is fine when the overlap is the joke. It is not fine in a bio someone has to read, and it is genuinely hostile in a field that sits next to other people's content.
A screen reader meeting a base letter with twelve combining marks has to decide what to say.
Behaviour varies. Some readers announce the base letter and ignore the marks, which is the best case and produces the plain word. Some announce each mark by name, so a single letter becomes a long recitation of diacritic names. Some give up on the cluster.
Multiply that by every character in a sentence and the range of outcomes runs from acceptable to unusable. There is no way to know in advance which a given reader will do.
This applies to the light strikethrough styles too, though less severely, because they add one mark rather than twelve. If the text carries meaning that someone needs, keep it plain and put the effect somewhere decorative. The plain text converter strips styling back out if you have inherited a string you need to clean.
Zalgo has a genuine home and it is narrower than people assume.
It works in message bodies, where the character budget is enormous and overlap is temporary. A WhatsApp message allows 65,536 characters, so cost is irrelevant there. It works in Discord messages for the same reason, within the 2,000-character limit.
It works as an effect on a single word rather than a sentence. One corrupted word in a plain line reads as deliberate. A whole corrupted paragraph reads as a rendering failure, and most readers will assume your account is broken rather than stylish.
It does not work in any field with a tight cap, any field that is searched, any field a person has to retype, or any field that sits in a list next to other people's text.
Light strikethrough is the version that works nearly everywhere, which is why it is on its own page rather than buried in the effects family.
Removing zalgo is mechanically simple, which is a nice change from most text problems.
Every combining mark is in a known range, and the base characters are untouched. Filter out the marks and the original text falls out intact, including spacing and punctuation. The unzalgo tool does this in the browser.
One caution: the same filter will strip legitimate diacritics if the text contains any. An accented French word, a Vietnamese name, a transliterated Arabic phrase are all base characters plus combining marks, and a blunt filter cannot tell them from decoration. If your input contains real accented letters, check the output rather than trusting it.
That ambiguity is not a flaw in the tool. It is a consequence of decoration and orthography using the same characters, which is the thing that makes the whole style possible in the first place.
Combining marks draw outside the line box the renderer reserved, because the height was calculated from font metrics rather than from the stacked marks.
Yes. The marks sit in a known Unicode range and the base letters are unchanged, so filtering the marks returns the original text. Check the result if the text contained real accented letters, which use the same mechanism.
Far more than it looks. On a 48-character test string, single strikethrough added 41 characters, double strikethrough added 121, and the heaviest zalgo row added 160.