Zalgo and glitch text look like normal text that has been corrupted: letters sprout stacked accent marks above and below them, creating a visual overflow that suggests digital damage or horror-game text. The effect is produced by Unicode combining characters, which attach to a base letter without advancing the cursor, allowing multiple marks to stack on a single character. A Zalgo text generator and a glitch text generator both use this mechanism, but with different character selections and densities that produce distinct looks.

How combining characters create the effect

Unicode defines two categories of combining characters: those that attach above the base character (combining diacritics in the U+0300 range) and those that attach below (U+0316 and related ranges). These were designed for standard use: a combining acute accent above the letter e produces e-acute (é). Unicode does not specify a limit on how many combining characters can be stacked on a single base, so stacking dozens or hundreds of them on a single letter produces the towering columns of marks that characterize Zalgo text.

Each base letter in a Zalgo or glitch string is followed by a sequence of these combining characters. The sequence varies per letter to avoid the perfectly regular appearance of identical stacks. The output string is much longer than the visible letter count: a ten-letter word in heavy Zalgo mode may contain several hundred characters.

Why the output must be deterministic

A Zalgo generator has to make a choice: how many combining marks to put on each letter, and which ones. The naive approach is to use Math.random() to pick a random selection each time the function runs. But a generator that uses true randomness produces a different output on the server than on the browser, and a different output each time the same text is typed. This causes two problems: a hydration mismatch when the server-rendered HTML does not match what the browser renders (breaking the page framework), and an inconsistent copy experience where the user sees one version on screen and copies a different version.

The correct approach is a seeded pseudo-random number generator: a deterministic algorithm that produces consistent output for the same input but varies its selection across different inputs. The seed is derived from the input text itself, typically by hashing the characters. The same word typed twice produces the same Zalgo output; a different word produces different-looking output. This is why correctly-built Zalgo generators always show the same marks for the same text, and why the Copy button reliably copies what the user sees.

Zalgo versus glitch: what makes them different

Zalgo text uses a large and varied selection of combining marks drawn from the combining diacritics ranges, producing the tallest stacks and the most chaotic visual texture. The name comes from a 2004 internet meme (and later creepypasta) about a fictional entity called Zalgo, whose name became associated with corrupted or distorted text on internet forums.

Glitch text uses a more curated set of combining marks: typically a smaller selection applied at lower density, producing a subtler displacement effect rather than towering columns of diacritics. The result reads more like corrupted digital text and less like a horror-game name. Glitch text is more suitable for usernames and bios because it remains partially legible; heavy Zalgo text can be so dense that the underlying letters are hard to identify.

Where Zalgo and glitch text render correctly

Most modern text-rendering environments handle combining character stacks and display them as stacked marks above or below the baseline. Browsers render Zalgo text correctly; most desktop and mobile apps do too. Discord, Twitter, Instagram captions, and standard text messages all render the combining characters as visual stacks.

A few environments clip or limit combining marks. Some web apps and input fields cap the displayed stack height, collapsing very long sequences. Gaming platforms and mobile game rename fields often have stricter character handling: a Zalgo name that previews correctly in a browser may display as a small number of marks in-game, or may be rejected at save time. Test before spending a rename if the platform charges for name changes.

The character count of a Zalgo string is much higher than the visible letter count. A field with a 20-character limit may only accept a word or two of Zalgo text before the limit is reached, because each combining mark counts as a character even though it does not advance the visual cursor.

Common questions

Is Zalgo text safe to paste everywhere?

Mostly yes, but with caveats. In very old or minimal text renderers, extremely long combining character sequences could cause rendering slowdowns, though this was a concern with older software and most modern renderers handle it efficiently. The more practical concern is field limits: Zalgo text uses far more characters than its visual length suggests, so it runs into character limits quickly. And some platforms or games may reject strings with unusual character patterns at save time.

Why does the Zalgo text look the same every time I type the same word?

That is intentional. The generator uses a seeded algorithm so the same input always produces the same output. This ensures the text on your screen exactly matches what you copy, and that the server-rendered preview matches the browser-rendered one. A Zalgo generator that produces different output each time would show you one version and copy a different version, which would be a bug rather than a feature.

Can I remove Zalgo formatting from text I received?

Yes. Zalgo text is cleaned by removing all combining characters from the string while keeping the base characters. In a code context, this is done by normalizing the string to Unicode NFC form and then filtering out characters in the combining diacritical marks ranges. Some text editors have a Unicode normalization function that does this. A Zalgo generator's input field will also show clean text if you paste Zalgo text into it and copy a plain style from the results.