Distort ordinary words into multi-layered matrix chaos with dynamic combining diacritical marks.
Most styles on this site swap one letter for a different code point: the bold A you copy is U+1D400, a separate character that merely looks like A. Zalgo does not work that way, and the difference explains everything else on this page. Your letters stay exactly as you typed them. The generator appends extra code points after each one, drawn from the Combining Diacritical Marks block at U+0300 to U+036F, the same accents that make é, ñ and ọ in ordinary writing. Heavier generators reach past U+036F for variety: Combining Diacritical Marks Supplement at U+1DC0 to U+1DFF, Extended at U+1AB0 to U+1AFF, and Combining Diacritical Marks for Symbols at U+20D0 to U+20FF, which was encoded for mathematical annotation and supplies rings and arrows. A combining mark attaches to the character before it, so the renderer positions it relative to that letter instead of beside it, and nothing in the standard says how many may pile up. That is the entire trick. The two zalgo rows here differ only in appetite: the light one adds a single mark per character, the chaos one adds four, and both skip spaces so word boundaries survive. Because the base letters are untouched ASCII, the plain word is still physically present in the string, sitting between the marks.
Combining marks sort themselves into three visual zones, and every glitch style on this page is a choice about which zones to use. Above-zone marks climb from the top of the letter: U+030D vertical line above, U+0305 overline, U+033F double overline, U+0311 inverted breve, U+0310 candrabindu. Below-zone marks hang beneath the baseline: U+0316 grave accent below, U+0320 minus sign below, U+0324 diaeresis below, U+0325 ring below. The middle zone is the interesting one, because those marks are drawn straight through the glyph, U+0336 long stroke overlay is a strikethrough, U+0335 short stroke overlay is a shorter one, and U+0337 short solidus overlay slashes diagonally. The quieter styles in this set commit to a single zone and a single mark: underline is U+0332 combining low line applied once per character, double underline is U+0333, and the wavy version is U+0330 combining tilde below. The zalgo rows are the same idea without the restraint. The light one draws from an above-zone pool only, so it stays a crown of spikes over the words. The chaos one mixes above and below, which produces the classic vertical smear in both directions. Nothing exotic is happening in either case, only quantity and zone selection separate a tasteful strikethrough from a corrupted mess.
There is no special heavy-zalgo character. When a generator offers light, medium and extreme, the only variable is how many marks it attaches per base letter. One mark per character reads as a stylised accent. Four reads as corruption. Twenty reads as a vertical column of ink that has stopped resembling text. The growth is linear and easy to predict: marks added equals intensity multiplied by the number of non-space characters, so a 25-letter sentence at four marks each carries 100 extra code points on top of the 25 you typed. The first consequence is that intensity and length trade against each other. If a field is tight you can write less or stack less, and there is no third option, because every glyph you see costs at least one code point and usually several. The second is that marks are chosen at random from a pool, so pressing copy twice gives you two different strings that look equally chaotic but are not identical. That is fine for decoration and useless if you need a value you can reproduce later. Past roughly a dozen marks per letter the visual gain flattens while the cost keeps climbing, so the extreme settings mostly buy you a heavier string rather than a scarier one.
Here is the mechanic that makes zalgo look like damage rather than decoration. A combining mark has zero advance width. When the shaping engine draws one, it does not move the pen forward afterwards, so the next mark lands in the same horizontal position as the last. Stack ten and all ten occupy one letter's width, climbing or dropping to avoid each other. Meanwhile the line box that holds the text was sized from the font's ascent and descent metrics, not from the ink your string actually produces. The marks therefore have nowhere legitimate to go, and they overflow vertically into whatever is drawn above and below. That overflow, and not any special character, is the whole aesthetic. It also means the effect is a property of the container rather than of your text. A surface with a fixed row height and hidden overflow slices the spikes off mid-mark, so heavy zalgo looks dense but flat. A surface that lets content spill gets the classic invasion of the neighbouring lines. Modern web clients generally clip; older forums, some desktop chat apps and plenty of game overlays do not. You cannot control which one your reader is using, so treat the dramatic version as a bonus rather than the expected result.
The word zalgo is not a technical term, and knowing where it came from tells you what people expect when they see it. It began as an internet horror meme around 2004, spread through message-board threads and defaced comic panels in which something vast was breaking through the page and the lettering broke with it. Because the effect was easy to reproduce with nothing but combining marks, it escaped the meme almost immediately and became generic shorthand for corruption: glitch art, creepypasta, horror game menus, alternate reality games, cursed-image captions and Halloween posts all reach for it, and readers decode it instantly as broken or possessed. That shared reading is the reason the style still works after two decades, and it is also its limit. Zalgo carries one meaning and cannot be talked out of it. Applied to a horror stream title, it says exactly what you want. Applied to a small business account, a portfolio bio or an announcement people are meant to trust, it says the text is damaged, which is rarely the message. The other honest constraint is novelty. Almost everyone online has seen it, so it reads as a reference rather than as a discovery, and a single word of it usually lands better than a whole sentence.
Character limits are where zalgo fails first, and it fails differently from the styled alphabets elsewhere on this site. Those alphabets mostly draw on the Mathematical Alphanumeric Symbols block, U+1D400 to U+1D7FF, which sits outside the Basic Multilingual Plane; each of those letters is stored as a surrogate pair and costs two UTF-16 code units, so a field counting code units accepts roughly half the letters you expect. Zalgo's marks live inside the Basic Multilingual Plane, so each one costs a single code unit, but there are a great many of them. Four marks per letter means five units per visible character, which is worse than the doubling. An Instagram bio caps at 150 characters. At four marks each you fit roughly thirty letters before the counter says you are full, while the preview still shows barely half a line. What you see as one letter is a grapheme cluster, a base plus everything attached to it, and almost nothing counts in grapheme clusters. Some platforms normalise before counting, some count code points, some count code units, and you cannot tell which from the outside. The practical rule is to paste into the real field and watch its own counter rather than trusting any number computed before you get there.
Say this part out loud before you paste: zalgo is unreadable to machines and hostile to some readers. Screen readers have no consistent behaviour here, because the marks are real characters with real names. Some announce each one, so a five-letter word becomes a long recitation of vertical line above, ring below, macron. Others skip the cluster entirely and read nothing, which means a blind reader gets silence where your headline was. Search fails for a simpler reason: matching is exact. The letters h, e, l, l and o with marks wedged between them are not the string hello, so find-on-page misses it, site search misses it, and a crawler indexes the code points that are genuinely there rather than the word you meant. Many game name filters reject Mark, Nonspacing (Mn) characters outright at the rename screen, some services silently strip them on save, and others normalise the text so what you pasted is not what appears. Coverage gaps add a last surprise: a mark that renders as a neat spike in one font may draw as a dotted circle placeholder in another, and mixed strings can fall back mid-word. Use zalgo where it decorates. Never use it where it has to be read, found, reported or typed back.
There is one genuine technical hazard, and it is a cost problem rather than a security hole. Text shaping is work per mark: the engine measures each one, checks it against the marks already placed so they do not collide, and draws it. That work is fine at four marks per letter and stops being fine in the thousands. Strings built that way have been used to make chat clients, browsers and mobile keyboards stall or crash while trying to lay out a single message, which is a denial of service by rendering cost rather than by anything clever in the data. This is why caps exist. Plenty of services limit how many combining marks may follow one base character, refuse the message, or truncate it, and Unicode publishes a restricted profile for identifiers in UTS #39 partly because unbounded sequences cause exactly this trouble in names. In practice the ethical line is easy: a corrupted word in your own post is decoration, and a deliberately enormous stack pasted into someone else's chat, support ticket or comment thread is vandalism you have made them render. The rows here top out at four marks per character, which is decorative rather than damaging, and everything they produce is generated in your browser.
It pastes fine, since it is ordinary text, but desktop layout behaves differently from a web feed. Word tends to expand line spacing to fit tall stacks rather than clipping them, so paragraphs jump apart. On export the marks are drawn by whichever font handles them, and if that font lacks one you get a dotted-circle placeholder frozen into the PDF.
Almost never. A handle is an identifier, not display text, so stricter rules apply. IDNA forbids a domain label from beginning with a character in the Mark category, and registries narrow it further; most platforms restrict usernames to letters, digits and a little punctuation. The display-name field is the one that sometimes lets zalgo through.
More than it looks. In UTF-8, marks from U+0300 to U+036F encode as two bytes each, and marks in the U+1AB0 and U+20D0 ranges take three. A 25-letter word at four marks per letter is 25 bytes of ASCII plus 200 bytes of decoration, which matters for SMS segments, QR codes and database columns sized in bytes.
Because mark placement is decided by the font and the shaping engine, not by the text. Fonts carry mark-attachment anchors, and a well-built one spreads a stack neatly while a fallback font piles marks on top of each other. Different operating systems and browsers use different shaping code, so one string can look like a light accent here and a spiky mess there.
You can, because a mark attaches to whatever precedes it, but the result is usually worse. Letters from the Mathematical Alphanumeric Symbols block are drawn by a fallback font that often has no attachment anchors, so marks land off-centre or collide. You also pay both costs at once: two code units for the letter plus one for every mark.
Normalise the string and drop every code point in the Mark, Nonspacing category; the base letters are untouched underneath, so what remains is your original text in its original order. The unzalgo cleaner on this site does exactly that. Be careful with languages that legitimately stack marks, such as Vietnamese, where a blanket strip changes words rather than tidying them.
No, and the question reveals the misunderstanding this whole page is about. A font cannot add characters to a string; it only decides how the characters already there are drawn. Installing something changes how well marks are positioned on your own screen and nothing about what other people receive, because the effect travels inside the text itself.
It is valid text everywhere, so nothing rejects it outright, but it makes review impossible. A diff shows the marks as escape sequences, a filename can be normalised differently by different operating systems so two names that look identical stop matching, and a spreadsheet lookup against the plain word returns nothing at all.