Glitch text symbols

Every one of the 112 combining marks this generator draws from, rendered on a real letter so you can see what each one does before you use it.

Glitch text is not a font. It is ordinary letters with these characters stacked behind them. Each mark has zero width and attaches to whatever came before it, which is how one letter ends up wearing thirty accents. If you want the mechanism explained properly, start with how glitch text works. If you just want to build something, the tables below have the code points.

How to read these tables

The Preview column shows the mark applied to a lowercase o. On its own, a combining mark has nothing to attach to, so most apps draw it on a dotted placeholder circle or drop it entirely. Always pair it with a base character.

The six single marks worth knowing

These are the ones that stay readable. One per letter gives you a clean effect that fits inside a bio and rarely gets filtered, which is why they have their own section in the generator.

NameCode pointPreviewApplied
Strikethrough U+0336 g̶l̶i̶t̶c̶h̶
Slashed U+0338 g̸l̸i̸t̸c̸h̸
Underline U+0332 g̲l̲i̲t̲c̲h̲
Double underline U+0333 g̳l̳i̳t̳c̳h̳
Overline U+0305 g̅l̅i̅t̅c̅h̅
Wavy underline U+0330 g̰l̰ḭt̰c̰h̰

Marks that sit above the letter

These give zalgo its height. Most come from the Combining Diacritical Marks block, and the small superscript letters near the end come from the U+0363 to U+036F range.

50 marks

PreviewCode pointHTML entityStacked ×3
U+030D ̍ o̍̍̍
U+030E ̎ o̎̎̎
U+0304 ̄ ō̄̄
U+0305 ̅ o̅̅̅
o̿ U+033F ̿ o̿̿̿
U+0311 ̑ ȏ̑̑
U+0306 ̆ ŏ̆̆
U+0310 ̐ o̐̐̐
U+0352 ͒ o͒͒͒
U+0357 ͗ o͗͗͗
U+0351 ͑ o͑͑͑
U+0307 ̇ ȯ̇̇
U+0308 ̈ ö̈̈
U+030A ̊ o̊̊̊
U+0342 ͂ o͂͂͂
U+0343 ̓ o̓̓̓
U+0344 ̈́ ö́̈́̈́
U+034A ͊ o͊͊͊
U+034B ͋ o͋͋͋
U+034C ͌ o͌͌͌
U+0303 ̃ õ̃̃
U+0302 ̂ ô̂̂
U+030C ̌ ǒ̌̌
U+0350 ͐ o͐͐͐
U+0300 ̀ ò̀̀
U+0301 ́ ó́́
U+030B ̋ ő̋̋
U+030F ̏ ȍ̏̏
U+0312 ̒ o̒̒̒
U+0313 ̓ o̓̓̓
U+0314 ̔ o̔̔̔
U+033D ̽ o̽̽̽
U+0309 ̉ ỏ̉̉
U+0363 ͣ oͣͣͣ
U+0364 ͤ oͤͤͤ
U+0365 ͥ oͥͥͥ
U+0366 ͦ oͦͦͦ
U+0367 ͧ oͧͧͧ
U+0368 ͨ oͨͨͨ
U+0369 ͩ oͩͩͩ
U+036A ͪ oͪͪͪ
U+036B ͫ oͫͫͫ
U+036C ͬ oͬͬͬ
U+036D ͭ oͭͭͭ
U+036E ͮ oͮͮͮ
U+036F ͯ oͯͯͯ
U+033E ̾ o̾̾̾
U+035B ͛ o͛͛͛
U+0346 ͆ o͆͆͆
U+031A ̚ o̚̚̚

Marks that cut through the letter

Overlays, tie bars and the Cyrillic enclosing mark. These break the letter shape rather than decorating it, which is what separates cursed text from zalgo.

22 marks

PreviewCode pointHTML entityStacked ×3
U+0315 ̕ o̕̕̕
U+031B ̛ ơ̛̛
U+0340 ̀ ò̀̀
U+0341 ́ ó́́
U+0358 ͘ o͘͘͘
U+0321 ̡ o̡̡̡
U+0322 ̢ o̢̢̢
U+0327 ̧ o̧̧̧
U+0328 ̨ ǫ̨̨
U+0334 ̴ o̴̴̴
U+0335 ̵ o̵̵̵
U+0336 ̶ o̶̶̶
U+035C ͜ o͜͜͜
U+035D ͝ o͝͝͝
U+035E ͞ o͞͞͞
U+035F ͟ o͟͟͟
U+0360 ͠ o͠͠͠
U+0362 ͢ o͢͢͢
U+0338 ̸ o̸̸̸
U+0337 ̷ o̷̷̷
U+0361 ͡ o͡͡͡
U+0489 ҉ o҉҉҉

Marks that hang below the letter

The dripping half of the effect. Rings, dots, lines and arrows that attach under the baseline.

40 marks

PreviewCode pointHTML entityStacked ×3
U+0316 ̖ o̖̖̖
U+0317 ̗ o̗̗̗
U+0318 ̘ o̘̘̘
U+0319 ̙ o̙̙̙
U+031C ̜ o̜̜̜
U+031D ̝ o̝̝̝
U+031E ̞ o̞̞̞
U+031F ̟ o̟̟̟
U+0320 ̠ o̠̠̠
U+0324 ̤ o̤̤̤
U+0325 ̥ o̥̥̥
U+0326 ̦ o̦̦̦
U+0329 ̩ o̩̩̩
U+032A ̪ o̪̪̪
U+032B ̫ o̫̫̫
U+032C ̬ o̬̬̬
U+032D ̭ o̭̭̭
U+032E ̮ o̮̮̮
U+032F ̯ o̯̯̯
U+0330 ̰ o̰̰̰
U+0331 ̱ o̱̱̱
U+0332 ̲ o̲̲̲
U+0333 ̳ o̳̳̳
U+0339 ̹ o̹̹̹
U+033A ̺ o̺̺̺
U+033B ̻ o̻̻̻
U+033C ̼ o̼̼̼
U+0345 ͅ oͅͅͅ
U+0347 ͇ o͇͇͇
U+0348 ͈ o͈͈͈
U+0349 ͉ o͉͉͉
U+034D ͍ o͍͍͍
U+034E ͎ o͎͎͎
U+0353 ͓ o͓͓͓
U+0354 ͔ o͔͔͔
U+0355 ͕ o͕͕͕
U+0356 ͖ o͖͖͖
U+0359 ͙ o͙͙͙
U+035A ͚ o͚͚͚
U+0323 ̣ ọ̣̣

Which Unicode blocks these come from

Two places, and that is the whole list. 111 of the 112 marks come from Combining Diacritical Marks, the block running from U+0300 to U+036F. That block holds 112 characters, so this tool uses all of it except one: U+034F, the combining grapheme joiner, which draws nothing at all and would only inflate your character count.

The remaining mark is U+0489, the Cyrillic millions sign. It comes from a different block and behaves differently, wrapping around a letter instead of sitting over it.

One subtlety inside the main block is worth knowing. The marks between U+035C and U+0362 are double diacritics: each one spans two base characters rather than one, which is why they sometimes draw a bridge between neighboring letters instead of decorating a single one.

The authoritative names and charts are published by the Unicode Consortium in the Combining Diacritical Marks code chart. We have deliberately not reprinted the official names here, because a table of 110 hand-copied names is a table with mistakes in it.

Using these in your own code

The pattern is simple: iterate the input, append marks after each base character, join. The one thing that catches people is iteration. Splitting a JavaScript string with split('') cuts emoji in half, because they occupy two UTF-16 units. Use Intl.Segmenter with grapheme granularity, or at minimum Array.from(), so surrogate pairs stay together.

Two more habits that prevent bad output: skip whitespace, since a mark on a space renders as a floating accent, and skip emoji, since marks after a pictograph break rendering on several platforms. This generator does both.

Questions about the marks

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.

Mark tables generated directly from the tool source on 2026-09-08.