zalgo · combining diacritics · adjustable intensity · live

Generate Zalgo text

Stack random Unicode combining diacritics above, through, and below your text to produce the glitchy Lovecraftian Zalgo aesthetic. Runs locally.

Zalgo Text Generator
Input
5 B
1 lines
Output
65 B
1 lines
Status
ready
live
Ratio
13.00×
out/in
input · text
output · zalgo
Ȟ̘̼̻̉́̇ͭ͗͗̕͡ẽ̷͍̬̖̺̼̊̐̆̍ͅl̦̩̻̹̍̂̑̅̋͆́͂l̗̭̹̺̄̃̓̉̑̀ͬ͞ó̯̖͙̹̻̂̃̍ͫ̕͢
Quick Start

How to generate Zalgo text

Combining diacritics from the U+0300 to U+036F Unicode range are randomly stacked on each word character. Higher intensity adds more marks above, below, and across the line.

  1. 01

    Type or paste text

    Word characters get diacritics; punctuation and whitespace pass through.

    Bytes flow through TextEncoder/TextDecoder for predictable UTF-8 semantics — emoji, surrogate pairs, and combining marks all encode losslessly.

    inputUTF-8TextEncoderlosslesslive
    input · raw bytestext · UTF-8
    Hello
    loaded · UTF-8MIME · ready
  2. 02

    Pick intensity

    1 sprinkles a few marks. 20 piles them on. The output is regenerated each time you adjust the slider.

    Hash and signature operations call crypto.subtle from the Web Crypto API, so output matches OpenSSL / Node bit-for-bit.

    intensityWeb Cryptosubtledeterministiclive
    intensity · options5 · live
    UP · MID · DOWN
    options applied · livelive
  3. 03

    Random stacking

    Combining marks are chosen at random from the upper, mid and lower diacritic ranges.

    Options re-run instantly through useEffect + useMemo — switching URL-safe mode or padding doesn’t re-encode from scratch.

    randommemoisedoptionsinstantreactive
    marks · encoded0300-036F · ready
    H̛͒͐ḛ̾l̗l̗o̘
    encoded · livelossless
  4. 04

    Copy or download

    One click to clipboard. Download as .txt.

    Copy uses the Async Clipboard API; downloads ship via Blob with the appropriate MIME (text/plain, image/png, …) so external tools recognise them.

    exportclipboardblobMIME-correctclient-side
    ok · copiedready · done
    Copied
    shipped · ready to shipsuccess
Pro tips

Encoding without surprises

Always UTF-8 first

Use TextEncoder / TextDecoder for bytes ↔ string conversion. btoa alone breaks on non-ASCII.

URL-safe vs standard Base64

Standard uses +, /, =; URL-safe swaps to -, _, no padding. Don’t mix them.

Hashes aren’t passwords

SHA-256 is fast; that’s good for fingerprints, bad for passwords. Use bcrypt / argon2 for credentials.

Watch padding rules

Some decoders are strict about = padding, others auto-pad. If round-trips fail at exactly 1 or 2 bytes, check padding.

Use Web Crypto for keys

Generate cryptographic keys via crypto.subtle, never Math.random. The latter is predictable.

JWT decode ≠ verify

Decoding a JWT just splits and base64-decodes. Verification needs the issuer’s public key / shared secret.

Use Cases

When to use Zalgo text

Aesthetic, ARG flavour, rendering stress tests.

Internet aesthetics

Eldritch usernames, profile bios and avatar captions. Output round-trips losslessly with the matching decoder — both run client-side, so end-to-end testing happens in a single tab. Encoding flows through TextEncoder for predictable UTF-8 semantics.

RFC-compliant

Memes

Add glitchy emphasis to image captions and reaction posts. Web Crypto's subtle.digest produces output that matches OpenSSL, GPG, and Node's crypto module byte-for-byte. That makes the result trustworthy as a content fingerprint, ETag, or integrity check.

OpenSSL-matched

Creative writing

Style horror prose or in-game lore passages. Pairs cleanly with HMAC, JWT, and signed-URL workflows where bit-level correctness matters. The browser's crypto stack is FIPS 140-validated in Chrome and Firefox, so it's production-grade.

lossless

Layout stress tests

Combining marks expose rendering bugs in font stacks. Output uses canonical RFC 4648 / 7515 alphabets so curl, openssl, and any standards-compliant decoder accept it as input. URL-safe variants drop padding for tokens that travel in query strings.

byte-identical

ARG hints

Hide messages that need cleaning to be readable. Heavy hashing runs through useMemo so large inputs don't block typing. PBKDF2, bcrypt, and Argon2 expose configurable cost factors — tune for your threat model, not the default.

spec-grade

Cross-platform check

Verify how stacked diacritics render across apps. Same input plus same options always yields identical bytes. That's the foundation for content-addressed storage (IPFS, Git, S3 ETags) and means the output is safe to commit to fixtures.

production-ready
FAQ

Frequently asked questions

Unicode characters in the range U+0300 to U+036F that visually attach to the preceding letter — accents, hooks, dots, and so on.
Marks are chosen at random. Each render produces a unique decoration pattern.
Most modern apps render combining marks. Some strip them aggressively or clamp them to one mark per character.
Strip characters in the U+0300 to U+036F range and the original text returns.
No. The generator runs locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!