Mirror text generator

Mirror text generator reverses the character order of each line so the first letter ends up last and the last ends up first. Unlike the upside down generator, no letter substitution happens: every character keeps its original glyph, only the order changes. Useful for word puzzles, palindrome checks, and quick reversal tasks. Want letters that visually mirror? Combine this with upside down output.

Input
Line 1:1 LF cloud_done Saved locally
Result Mirror Text
0 lines 0 chars

Pure character-order reversal

This tool does one thing: read each input line as a sequence of UTF-16 code units, then emit them in reverse order. Each character keeps its original glyph; nothing is substituted. hello becomes olleh. 1234 becomes 4321. Spaces, punctuation, accented characters, and emoji all flip position but keep their original codepoint.

A subtle gotcha: emoji and other surrogate-pair characters can break visually under naive reversal because UTF-16 surrogate pairs are split. The tool reverses character by character via split('').reverse(), which works fine for basic Latin text but can corrupt emoji and certain CJK characters. For text containing emoji, the result may render as tofu boxes; use plain text only for clean output.

Common uses: palindrome inspection, generating decorative reversed text for design layouts, quick sanity checks before running other tools, or pairing with a font generator for a "mirror writing" effect. For a true visual mirror with rotated glyphs, no Unicode-only solution exists; you would need CSS or an image.

How to use mirror text generator

  1. 1Paste or type your text into the input panel on the left.
  2. 2The reversed result appears in the output panel as you type.
  3. 3Click Copy in the output header to copy the result.
  4. 4Paste it wherever you need the reversed string.
  5. 5For a flipped-letter look, run the result through upside down text generator.

Keyboard shortcuts

Drive TextResult without touching the mouse.

Shortcut Action
Ctrl FOpen the find & replace panel inside the input Plus
Ctrl ZUndo the last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor Plus
EscClose find & replace, or exit fullscreen
Ctrl KOpen the command palette to jump to any tool Plus
Ctrl SSave current workflow draft Plus
Ctrl PRun a saved workflow Plus

What this tool actually does

Character-order reversal

The entire input string is split into UTF-16 code units and emitted in reverse. The first character becomes the last; the last becomes the first. No substitution, no rotation, no styling.

No letter substitution

Each glyph is preserved exactly. hello -> olleh: the same letters, just reversed. This is different from upside down, which both reverses the order and swaps each letter for a turned lookalike.

Whole-string reversal, not per-line

Line breaks reverse along with everything else, so a multi-line input ends up with the last line first and its characters mirrored. If you need per-line reversal (line order kept, each line internally reversed), do it line by line in two passes.

Surrogate-pair caveat

JavaScript strings are UTF-16, so a single emoji is often two code units (a high and low surrogate). Naive reversal splits the pair and corrupts the emoji. For ASCII Latin text the reversal is clean; for text containing emoji or characters above U+FFFF (Math Alphanumeric Symbols, Emoji, certain CJK extensions), the output may render badly.

Browser-side, instant

Single string operation, no network, no log. Closing the tab clears the input.

Worked example

The whole string is reversed in one pass, so the last line ends up first. To reverse each line independently, paste one line at a time.

Input
hello world
A man a plan
Output
nalp a nam A
dlrow olleh

Settings reference

Behaviour Effect on output
Reversal scope Whole input as a single string. Line order also reverses.
Letter glyphs Preserved exactly. No substitution.
Punctuation Preserved. Position flips with everything else; brackets do not swap orientation.
Whitespace and newlines Preserved as characters; reverse order applies to them too.
Emoji and surrogates Surrogate pairs are split by naive reversal and may corrupt. Plain ASCII Latin text reverses cleanly.
Round-trip Reversing the output again gives back the original input exactly.

FAQ

How is this different from upside down text?
Mirror reverses character order only. Each glyph stays the same. Upside down also reverses, but additionally swaps each letter for a Unicode lookalike that resembles the rotated form. Use mirror for a clean reversal; use upside down for the visual flip effect.
Why does my emoji look broken in the output?
Emoji are encoded as UTF-16 surrogate pairs in JavaScript strings. Naive reversal splits the pair, leaving an orphan surrogate that renders as a tofu box. For text containing emoji, strip them first or accept the corruption.
Will this work for palindrome checking?
Yes for ASCII Latin text. Reverse the string and compare against the original; if they match (after lowercasing and stripping spaces / punctuation), it is a palindrome. Word counter can help with the cleanup steps.
Can I reverse each line independently?
Not directly in this tool, which reverses the whole string in one pass. Paste one line at a time, or use a text editor with regex (replace each ^.*$ match with its reverse) for batch processing.
How do I get the original back?
Run the output through this tool again. Reversal is its own inverse: reversing twice returns the original string exactly.