CruxDevCruxDev Tools Prompts
text Utility • Zero-Server Privacy • 100% Client-Side

Reverse Text Generator

Reverse any text character-by-character. Great for fun, watermarks, or encoding tests.

Overview

Reverses text the way humans see it, not the way a computer stores it. Emoji come back intact, accented letters keep their accents attached, and combined symbols such as 👍🏽 survive as one unit — because the reversal walks grapheme clusters rather than the raw character codes most implementations reverse.

How It Works

Type or paste into the input box and the reversed output appears live, with a Copy button to take it away. The default sample — “dráobie 👍🏽 café” — is chosen so you can see the difference from naive tools immediately: the skin-toned thumbs-up and the accented é come out whole. Paste the output into a character counter and you will also see the counts disagree with what your eyes count, which is the next section's subject.

Step-by-Step Usage Guide

  1. Paste the text into the input box; the reversal appears as you type.
  2. Check that multi-part symbols (emoji, accented letters) survived — they should.
  3. Copy the output; it is plain text and pastes anywhere.
  4. If the output shows boxes in the target app, that app's font lacks the glyph — the text itself is intact.

Technical Specifications & Standards

A JavaScript string is a sequence of UTF-16 code units, and the textbook reversal — split into single characters, reverse, join — walks those units. Three layers of reality sit above them. A code point such as 👍 (U+1F44D) occupies two UTF-16 units, so naive reversal cuts it into two lone surrogates: reversing “a👍b” produces b, an unpaired surrogate half, an unpaired other half, a — which renders as b, two replacement boxes, a. Above code points sit grapheme clusters, what a reader perceives as one character: 👍🏽 is a thumbs-up plus a skin-tone modifier, and 👨‍👩‍👧 is six code points joined by invisible zero-width joiners, yet both are one “letter” to a reader. This tool reverses grapheme clusters using Intl.Segmenter, the browser's built-in segmentation engine, so “a👍🏽b” reverses to “b👍🏽a” with the symbol intact. Accents expose the same problem in an older form: é can be stored as the single code point U+00E9 or as e followed by U+0301, the combining acute accent — the two spellings compare as unequal strings even though they look identical, and normalising the first to NFC makes them equal. Reversing code points puts the combining mark before its base letter, where it renders as an orphan accent over the wrong character; reversing grapheme clusters keeps the pair together. The verified contrast: code-point reversal of “café” (stored with a combining accent) yields a string that renders with a floating accent, while grapheme reversal yields “éfac” cleanly. One practical note: reversed Latin text is not “mirrored” — letters still face left — and reversed RTL text such as Arabic or Hebrew comes out reading forwards, which is exactly why reversal is used to defeat naive text filters and why screens show the result looking “wrong”.

Targeted Use Cases

  • Creating mirror-text effects for social posts, watermarks and puzzles.
  • Checking how a pipeline handles RTL text or emoji by feeding it reversed data.
  • Debugging a home-grown reversal in your own code by comparing against correct output.
  • Generating test strings that mix ASCII, combining marks and astral-plane characters for QA.

Notes & Gotchas

  • Treat reversed emoji as a canary: if they break anywhere in your pipeline, something in it reverses UTF-16 units instead of graphemes.
  • Remember that reversed Latin reads right-to-left letter by letter but is not mirrored; reversed Arabic or Hebrew reads forwards.
  • Do not rely on reversal to hide spoilers — screen readers and copy-paste undo it trivially.
  • For length checks, count code points or graphemes, not string length: 👍 contributes 2 to length but 1 to either count.

Frequently Asked Questions

Why do emoji turn into boxes in other tools but not here?

Most reversals split the string into UTF-16 units, tearing two-unit emoji into lone surrogates that render as replacement boxes. This tool reverses grapheme clusters through Intl.Segmenter, so each visible symbol moves as one piece.

What is a grapheme cluster?

It is what a reader perceives as one character. A skin-toned emoji, a family emoji joined by zero-width characters, or an e plus a combining accent are each several code points but one grapheme. Reversing clusters keeps those groups intact.

Why does my accented é look different after reversing in another tool?

If é is stored as e plus a combining accent, a code-point reversal puts the accent before its base letter, where it floats onto the wrong character. Grapheme reversal keeps the accent attached. Both spellings look identical before reversal, which makes this bug easy to miss.

Does reversing Arabic or Hebrew work?

It works mechanically — the characters come back in reverse order, which reads forwards to a speaker of the language. The letters are not mirrored, and bidirectional rendering in the target app may display the result in an unexpected order.