Cursed text and Zalgo text are nicknames for the same visual trick: ordinary letters plus stacks of Unicode combining marks (nonspacing diacritics) that render above, through, or below each base character. The result looks corrupted, haunted, or "glitched," which is why meme creators, horror writers, and streamers paste it into Discord, X, bios, and game chat. Under the hood it is valid Unicode, not a special font file. This guide explains how combining characters work, how Zalgo differs from homoglyph spoofing, platform character limits, safe intensity settings, how to reverse the effect, and how to generate copy-ready output with the free Cursed Text Generator on OnlineMiniTools (100% in your browser).
Combining Marks
Unicode Category
Zones (Top/Mid/Bot)
Server Upload
Key facts: cursed text and Zalgo (quick reference)
Use this section when you need a direct answer for search, chatbots, or AI summaries:
- Definition: Cursed text (also called Zalgo text, glitch text, or corrupted text) is plain text where each base letter is followed by multiple Unicode combining characters (category Mn, Me, or Mc). Renderers stack those marks on the same grapheme cluster.
- Not the same as: Unicode spoofing, which swaps Latin letters for lookalike Cyrillic or Greek homoglyphs. Zalgo keeps your original letters and adds marks.
- Why it looks tall: Fonts follow the Unicode combining mark placement model. Each new mark is positioned relative to the base glyph and prior marks, so stacks can extend far above and below the line (see Unicode Technical Note #2).
- Validity: Sequences like
Hplus a dozen combining marks are legal Unicode. Real languages use one or two marks per letter (for examplee+ COMBINING ACUTE → é). Zalgo repeats that mechanism at extreme density. - Character counts: Platforms count code points, not visible letters. One cursed "a" might be 1 base + 15 marks = 16 characters toward Discord's 2,000 limit or X's 280 limit.
- Reversing: Strip marks with normalization or regex on
\p{M}(marks). Our Remove Zalgo Text tool does this in the browser. - Privacy on OnlineMiniTools: The Cursed Text Generator runs locally in your tab. Input is not sent to a server to produce output.
- Responsible use: Do not use cursed text to impersonate brands, bypass moderation, crash fragile UIs, or harass people. Some apps slow down or clip extreme stacks.
What is Zalgo text?
The name comes from a 2004 creepypasta meme about an entity that "corrupts" typography. Technically, Zalgo text is a stylistic abuse of the same combining-mark system that powers accents in French, Vietnamese, and many Indic scripts. You start with a base character (for example LATIN CAPITAL LETTER H, U+0048). You append combining diacritical marks from blocks such as Combining Diacritical Marks (U+0300–U+036F). A renderer draws each mark attached to the base, often centered horizontally and stacked vertically.
People search for cursed text generator when they want to:
- Memes and horror aesthetics: Surreal posts, "liminal" edits, and joke comments that look like a system malfunction.
- Display names and bios: Short nicknames on Discord or social apps (keep intensity low; limits are tight).
- Creative writing: Chapter titles, ARG clues, or game lore that should feel unsettling.
- Typography experiments: Learn how Unicode, fonts, and line height interact.
- QA and moderation testing: Verify that your app normalizes, length-limits, or rejects excessive combining marks.
How combining marks build the glitch effect
Unicode assigns each code point a General_Category. Combining marks are usually Mn (nonspacing). When you type or paste T followed by COMBINING TILDE (U+0303) and COMBINING CEDILLA (U+0327), you still have two user-perceived "characters" in some editors but one grapheme cluster on screen. Add ten more marks and the cluster grows visually while the letter T remains readable at the core.
The OnlineMiniTools generator groups marks into three zones (matching common Zalgo presets):
- Top: Marks that render above the base (acute, macron, dots, and similar).
- Middle: Overstrike-style marks through the glyph (long stroke overlay, grapheme joiner, tie marks).
- Bottom: Marks below the baseline (cedilla, hooks, and lower diacritics).
Max Height controls how many marks can attach per zone per letter. Height Randomization controls what percentage of letters receive marks at all, which creates uneven "corruption" instead of a uniform wall of noise.
Cursed text vs Unicode spoofing vs fancy fonts
| Technique | Mechanism | Typical look | OnlineMiniTools tool |
|---|---|---|---|
| Zalgo / cursed | Base letter + stacking combining marks | Vertical glitch, spikes above/below | Cursed Text Generator |
| Homoglyph spoof | Replace letters with similar Unicode letters | Same shape, different code points | Spoof Unicode Text |
| Mathematical alphanumeric | Predefined styled Unicode symbols (bold, fraktur) | Clean bold or script, no spikes | Facebook Bold Text |
| Reverse / clean up | Remove Mn marks or normalize |
Plain ASCII or NFC text | Remove Zalgo Text |
Platform limits: why short phrases explode character counts
Unicode does not cap how many marks you stack on one letter. Apps do. Discord allows 2,000 code points per message (4,000 with Nitro). Server nicknames and display names are often capped at 32 code points. X (Twitter) standard posts allow 280 characters; many combining marks count toward that budget. A single heavily cursed word can consume hundreds of code points even though it looks like one word.
Figure 1: Approximate limits for short social text (2026). Cursed output uses multiple code points per visible letter, so stay well under these caps.
Practical rule: For nicknames and bios, use low Max Height (1–3), enable only Top or Bottom, and paste into a Unicode character counter before saving. For long Discord messages, regenerate with lower randomization if you hit the limit mid-sentence.
Method 1: Generate cursed text online (OnlineMiniTools)
The fastest workflow is the Cursed Text Generator: type plain text on the left, tune options, copy from the right.
- Open the Cursed Text Generator.
- Paste or type your source phrase in Input Text. You can upload a
.txtfile for longer copy. - Choose zones: Top, Middle, and Bottom. All three produce classic Zalgo. Disable Middle for fewer strikethrough overlays.
- Set Max Height (0–25). Start at 4–6 for readable memes; raise slowly for horror aesthetics.
- Set Height Randomization (0–100%). Lower values leave some letters clean; 100% corrupts every non-space character that rolls successfully.
- Copy Cursed Output or download
cursed-text.txt. Paste into your target app and preview before publishing.
Spaces are left untouched so words stay separated. If every zone is unchecked or Max Height is 0, output equals input (useful when you only want to test settings).
Preset recipes
- Subtle bio (Discord 32-char nick): Top + Bottom only, Max Height 2, Randomization 40%. Re-count code points before saving.
- Classic meme line: All zones on, Max Height 6–8, Randomization 70% (tool defaults).
- Maximum chaos (stress test only): All zones, Max Height 20+, Randomization 100%. Expect clipping, missing marks after send on some platforms, or slow rendering. Never use this in production chat without testing.
Alternative methods
JavaScript (manual mark loop)
Developers can append marks in code for custom pipelines:
const marks = ["\u0300", "\u0301", "\u0302", "\u0327"];
const zalgo = "hello".replace(/[^\s]/g, (ch) =>
ch + marks.map(() => marks[Math.floor(Math.random() * marks.length)]).join("")
);
console.log(zalgo);
Filter input length in production. Unbounded generation is a common source of UI jank.
Python (detect excessive marks)
Moderation pipelines often flag long runs of combining characters:
import re
text = "..." # user content
if re.search(r"[\u0300-\u036f\u1ab0-\u1aff]{5,}", text):
raise ValueError("Possible Zalgo spam")
Pair detection with unicodedata.normalize("NFKD", text) and stripping category M for cleanup.
Remove or inspect Zalgo
- Clean text: Remove Zalgo Text strips combining ranges while keeping base letters.
- Debug code points: Unicode Inspector shows names and categories for pasted strings.
- Count before posting: Count Unicode Characters reveals true length versus visual width.
Common mistakes and rendering quirks
- Assuming one letter equals one character: Clipboard and APIs use UTF-16 or UTF-8 code units. Always measure with a counter for limits.
- Ignoring font support: Some mobile fonts clip tall stacks. If marks vanish, reduce height or switch apps.
- Discord combining bugs: Community reports describe long combining sequences disappearing after send even when under 2,000 characters. Test in the target channel before an event.
- Accessibility: Screen readers may spell base letters and ignore visual chaos, or read mark names. Do not use cursed text for essential instructions.
- Security testing confusion: Homoglyph spoofing tests IDN phishing; Zalgo tests renderer and normalization. Use the right tool for each threat model.
- Overusing Middle zone: Strikethrough marks reduce readability faster than top/bottom spikes. Toggle Middle off for captions people must read.
Related tools
- Cursed Text Generator (Zalgo / glitch output)
- Remove Zalgo Text (strip combining marks)
- Count Unicode Characters (length before posting)
- Unicode Inspector (see code points and categories)
Frequently Asked Questions
Is cursed text the same as Zalgo text?
Yes. Both names describe text built from normal letters plus stacked Unicode combining marks. "Cursed" emphasizes the horror meme aesthetic; "Zalgo" references the early internet creepypasta meme. The underlying Unicode mechanism is identical.
Why does my cursed text look different on Discord versus my phone?
Rendering depends on the font, line height, and the app's Unicode stack algorithm. Some clients clip marks that exceed the line box. Lower Max Height and avoid extreme stacks if you need a consistent look across devices.
How do I remove Zalgo from pasted text?
Use the Remove Zalgo Text tool or normalize with NFKD and strip all characters in Unicode category M (marks). That returns plain letters without the glitch visuals.
Does the Cursed Text Generator upload my message to a server?
No. Generation runs entirely in your browser. You can paste sensitive draft titles locally, but remember that copying cursed text into a chat still sends it to that platform's servers.
Can I use cursed text in Discord usernames?
Discord's @username handle (letters, numbers, underscore, period) cannot include combining marks. Display names and server nicknames accept wider Unicode but stay within a 32-character limit where every mark counts. Use subtle settings and verify length before saving.
Cursed and Zalgo text are not magic fonts: they are deliberate stacks of valid combining marks on ordinary letters. Once you understand code point counts, zone toggles, and platform caps, you can create readable memes, spooky titles, and moderation test cases without wasting paste attempts. When you are ready, open the Cursed Text Generator, start with moderate height, and scale up only after you preview on the app where the text will live.