How glitch text works
It looks like a font. It behaves like a font. It is not a font, and knowing what it actually is explains every strange thing it does.
The one-sentence version
Glitch text is your original letters with Unicode combining marks stacked on top of them, and because those marks are real characters rather than styling, the effect travels with the text wherever you paste it.
What a combining mark is
Unicode has a category of characters designed to attach to the character before them. They have zero width of their own and no meaning on their own. Their whole job is to modify a neighbour.
They exist because writing systems need them. French needs an acute accent. Vietnamese stacks two marks on a single vowel routinely. Rather than encoding every possible accented letter as its own character, Unicode lets you compose them: take a base letter, add a mark, get an accented letter.
So the letter e followed by U+0301 renders as an accented e. That is
normal, intended, boring behavior.
The part nobody specified
Here is the gap the whole effect lives in. The standard says how a combining mark attaches. It does not say how many you may attach.
One mark is an accent. Three is unusual but real. Thirty is nothing any language needs, and no rule forbids it. Text rendering engines dutifully stack every one of them, which produces towers of diacritics climbing above and below the line.
| Marks per letter | Result | Characters |
|---|---|---|
| None | glitch | 6 |
| A few | g̱̈́̇̿l͉͆ͅi͈̭ͦͭt̯̪͍ͦ̾c̪̯ͧh͉̙̀ | 28 |
| Many | g̴͈͙̣̯̪͍̥̈́̇̿̇́̅͆̽ͤͨ͋ͦͭ͠l̺̋͊̌̍̀̏ͨ̿ͪ̃͜ḭ̧̘͉͚̖̰͖̳̏̐͛ͬ͘ͅt̢͉̩͚͉̟̣̬̣͙̯͂ͨ͋͐ͥ̍̇́ͩͬ̅͐̽͝c͖͙̿̍͞h͓̞̦͈̬̣͖̗͉͊͌ͣͯ̈̽ͦ̔ͭ̀͟ | 105 |
Same six letters in all three rows. The word glitch is intact underneath every one of
them, which is why the third row still costs six letters and 105 characters.
Why that gap explains everything else
Why it survives copy and paste
Because it is data, not presentation. Copying text copies its characters, and the marks are characters. Nothing has to be installed on the other end. Compare that to a font, where copying text carries no styling at all.
Why it eats your bio
Because platforms count characters, not letters. A 150-character Instagram bio does not care that you only typed twelve letters. It counts every mark. This single fact explains most of the complaints people have about glitch text.
Why it renders differently on your friend's phone
Because stacking rules are a font and platform decision, not a Unicode one. The standard says the marks attach. It does not say exactly how far apart to draw them. iOS packs them tightly, Android spreads them, Windows sits between. The data is identical, the picture is not.
Why you sometimes get empty boxes
Because the font in use has no glyph for a specific mark, so the system substitutes a placeholder. It is a display gap on that device only. Someone with better font coverage sees it correctly.
Why some fields reject it outright
Because those fields run an allowlist. A Discord username permits lowercase letters, digits, underscores and periods and nothing else. That is not a filter you can tune your way past. It is a different question from whether a field renders the marks.
Undoing it
The base text is never modified, so nothing is lost. Normalize the string to NFD, then remove
every character in the U+0300 to U+036F range, and you have your original
back exactly. In practice, pasting into a plain search field often strips them for you.
If you are building this yourself
Three details separate a generator that works from one that produces corrupted output.
- Iterate by grapheme, not by character. Splitting a JavaScript string with
split('')cuts emoji in half, because they occupy two UTF-16 units. UseIntl.Segmenterwith grapheme granularity, or at minimumArray.from(). - Skip whitespace and emoji. A mark on a space renders as a floating accent. A mark after a pictograph breaks rendering on several platforms. Both are the usual cause of output that looks fine in the box and wrong after pasting.
- Seed your randomness. If marks are picked fresh on every keystroke, the text reshuffles as the user types, which feels broken. Seed the generator so output is stable and give people a separate shuffle button.
Those three rules are why this site's generator behaves the way it does. The full list of marks it draws from is in the symbol reference.
Common questions
What is a combining character?
A Unicode character that has no width of its own and attaches to the character before it. Type the letter a followed by U+0301 and you get an accented a. Glitch text is the same mechanism, just repeated far past its intended use.
Which Unicode blocks do these marks come from?
Two places only. 111 of them come from Combining Diacritical Marks, the block running from U+0300 to U+036F, which is every character in that block except the invisible grapheme joiner at U+034F. The odd one out is U+0489, the Cyrillic millions sign, which encloses a letter rather than sitting over it.
Can I paste a single mark on its own?
You can copy it, but on its own it has nothing to attach to, and most apps will draw it on a dotted circle placeholder or drop it. Marks only make sense following a base character.
Keep reading
- Glitch text generator Put the theory to work with a slider and a copy button.
- What is zalgo text? Where the style came from, and the years it could crash a phone.
- Every combining mark All 112 characters with code points and rendered previews.
- When it breaks Diagnosing stripped, truncated and boxed-out text.