induwara.lk
induwara.lkText · Generator

Reverse Text Generator — Mirror, Upside-Down & Zalgo

Paste anything to see it reversed, mirrored, rotated 180°, or zalgo-stacked — all four styles at once, copy in one click. Unicode-aware, emoji-safe, deterministic zalgo seed, runs entirely in your browser.

By Induwara AshinsanaUpdated May 11, 2026
Flip your text4 styles, instantly
Runs entirely in your browser. Nothing is uploaded, logged, or stored.

Marks per base character. Higher = more chaos.

4
Reversed
Character order reversed
olleH
Mirrored
Horizontal mirror image
ollɘH
Upside-down
Rotated 180°
ollǝH
Zalgo
Stacked combining marks
H̷̢e̢͝l͜l̛o

Sources: rotation glyphs are drawn from Unicode IPA Extensions (U+0250–U+02AF) and Latin Extended-B; mirror glyphs from Unicode Latin and Canadian Aboriginal Syllabics blocks; zalgo stacks marks from the Combining Diacritical Marks block (U+0300–U+036F). Grapheme reversal uses Intl.Segmenter per Unicode TR-31. Full citations in the Sources section below.

How it works

Each of the four styles is a pure function over the input string — no server call, no model, no dependency beyond the browser's built-in Unicode tables. The transformations compose two ideas: per-character substitution from a hand-curated map, and grapheme-cluster reversal via the JavaScript Intl.Segmenter API.

  1. Reversed. The input is segmented into grapheme clusters per Unicode TR-31. A grapheme is what a reader perceives as a single character: é may be one codepoint (U+00E9) or two (U+0065 then U+0301 combining acute), and a ZWJ-joined family emoji is several codepoints, but each is one grapheme. The cluster list is reversed and re-joined, so visual characters keep their integrity.
  2. Mirrored. Each grapheme is looked up in a mirror table that maps lowercase and uppercase Latin letters, digits, and bracket / quote pairs to their closest horizontal-mirror Unicode glyph (b↔d, p↔q, E→Ǝ, R→Я, (→), [→]). Symmetric letters (A, H, I, M, O, T, U, V, W, X, Y and l, o, x) map to themselves. The mapped string is then grapheme-reversed so the whole line reads right-to-left, as if held up to a mirror.
  3. Upside-down. A second lookup table covers the de-facto-standard 180° rotation glyphs sourced from the Unicode IPA Extensions block (U+0250–U+02AF) and Latin Extended-A/B: a→ɐ, b→q, c→ɔ, d→p, e→ǝ, m→ɯ, n→u, r→ɹ, t→ʇ, A→∀, E→Ǝ, F→Ⅎ, G→⅁, R→ᴚ, T→⊥, U→∩, V→Λ, Y→⅄. After mapping, the string is grapheme-reversed so a line of text rotates as a whole — the way it looks when the page is flipped on its horizontal axis.
  4. Zalgo.The output of zalgo is the input with stacks of Unicode combining marks inserted after each non-whitespace grapheme. The marks come from three pools — "above" (U+0300–U+033E plus U+035B–U+036F), "middle" (U+0334–U+0338, plus a handful from U+0488), and "below" (U+0316–U+0333) — and are picked by a deterministic mulberry32 PRNG seeded by the integer you choose. Same input + same intensity + same seed gives byte-identical output, which is why the Re-roll button changes the seed rather than re-running the same generator with new randomness.

The single cross-check that backs the "Verified" badge in the calculator header is the invariant reverse(reverse(x)) === x — reversing twice must return the original input. Because the reverse runs over Intl.Segmenter clusters, this invariant holds for emoji, combining marks, RTL scripts, and CJK characters too. If the badge ever turns red, please email — that is a regression we need to know about.

Worked examples

A short phrase

"Hello"

  1. Graphemes: [H, e, l, l, o]
  2. Reverse → 'olleH'
  3. Mirror → map (e→ɘ, others unchanged) → 'Hɘllo' → reverse → 'ollɘH'
  4. Upside-down → map (e→ǝ) → 'Hǝllo' → reverse → 'ollǝH'
  5. Zalgo (intensity 2, seed 0) → 'H' + 2 marks · 'e' + 2 marks · …

Classic upside-down convention

"hello world"

  1. Map each letter:
  2. h→ɥ, e→ǝ, l→l, l→l, o→o, ' '→' '
  3. w→ʍ, o→o, r→ɹ, l→l, d→p
  4. → 'ɥǝllo ʍoɹlp'
  5. Reverse → 'plɹoʍ ollǝɥ'

Punctuation and digits

"abc 123!"

  1. Mirror map: a→ɒ, b→d, c→ɔ, 1→1, 2→S, 3→Ɛ, !→!
  2. → 'ɒdɔ 1SƐ!'
  3. Reverse → '!ƐS1 ɔdɒ'
  4. Upside-down map: a→ɐ, b→q, c→ɔ, 1→Ɩ, 2→ᄅ, 3→Ɛ, !→¡
  5. → 'ɐqɔ Ɩᄅε¡' → reverse → '¡εᄅƖ ɔqɐ'

Emoji and combined characters survive

"Café 👨‍👩‍👧"

  1. Intl.Segmenter clusters: [C, a, f, é, ' ', 👨‍👩‍👧]
  2. Reverse keeps each cluster intact → '👨‍👩‍👧 éfaC'
  3. é (U+0065 + U+0301) stays composed; family emoji is not split.
  4. Mirror / upside-down: only ASCII Latin chars are substituted,
  5. so emoji and é pass through and only their order changes.

Frequently asked questions

Sources & references

The transforms on this page were last cross-checked on 2026-05-11. The page is reviewed whenever a Unicode revision adds new rotation or mirror glyphs to the Latin block, or when a combining-mark pool gets extended. Spotted a letter that renders poorly on a specific platform? Email me below.

Related tools

Rate this tool
Be the first to rate

Comments & feedback

Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.

Spotted a letter that renders poorly, or want a new style added?

Email me at [email protected] — most fixes ship within 24 hours.