Four ways to flip text
Reversing text sounds like one operation. It's actually four, depending on what "reverse" means in context.
Reverse characters — the literal flip
"hello" becomes "olleh". Every character flipped left-to-right. The classic algorithm question and the most common interpretation of "reverse this string."
The trick is doing it correctly with Unicode. A naive s.split('').reverse().join('') works for ASCII but breaks emoji and astral-plane characters, because JavaScript strings split into UTF-16 code units rather than characters. The 👨👩👧 family emoji is a sequence of multiple code units; splitting and reversing them produces garbage.
This tool uses Array.from(s), which iterates over Unicode code points and handles all of the edge cases (emoji ZWJ sequences, surrogate pairs, combining marks). So your reversed emoji stay coherent.
Reverse words — keep word order around the spaces
"the quick brown fox" becomes "fox brown quick the". Words flipped, spaces preserved between them, line breaks preserved. Useful for word-order puzzles, for testing right-to-left language layout assumptions, and for reformatting tagged data ("name: John Smith" → "Smith John :name" — though for that specific case, find-and-replace is usually cleaner).
The algorithm splits on whitespace runs (preserving the runs as their own tokens), reverses the array, and joins. Multi-line input reverses each line independently — so paragraph structure is preserved.
Reverse lines — flip the document top-to-bottom
The order of lines reverses. Line 1 becomes the last line; the last line becomes line 1. Word order and character order within each line are unchanged.
Used most often for chronological data — log files written newest-at-bottom that you want to read newest-at-top, todo lists where you want the most recent additions on top, and CSV columns that came out in the wrong order.
Mirror — character reversal plus Unicode upside-down letters
This is the fun one. "hello" becomes "oʃʃǝɥ" — characters reversed and each letter swapped for its Unicode upside-down equivalent.
Each upside-down letter is a real Unicode character. "a" becomes "ɐ" (U+0250 Latin Small Letter Turned A). "e" becomes "ǝ" (U+01DD Latin Small Letter Turned E). The Unicode standard includes these because they're used in legitimate phonetic transcription and a few rare orthographies.
Used most often as a typography prank, a Twitter bio quirk, a coffee-mug joke. Pasteable into any modern app, since the characters are standard Unicode.
Why character reversal is the algorithm-class classic
"Reverse a string" is the canonical first interview question for one specific reason: it's the simplest possible exercise that tests whether the candidate understands strings, arrays, and iteration. Every undergraduate CS curriculum includes it. Every coding bootcamp drills it. Most senior engineers can do it in seven languages.
If you're brushing up on the algorithm-class version, the standard implementations are:
// JavaScript — Unicode-safe
[...s].reverse().join('');
// Python
s[::-1]
// Rust
s.chars().rev().collect::<String>()
// Go
runes := []rune(s); for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { runes[i], runes[j] = runes[j], runes[i] }
This page does the same operation in your browser without needing a runtime — paste, click, copy.
When you need it for accessibility testing
Some screen readers handle reversed text differently. Some text rendering engines fail on right-to-left mixes. Some database collations break when given reversed input. Reversed text is a useful adversarial test case for any system that handles strings.
If you're testing software, paste the actual production data into the reverser, then paste the reversed output back into your system. Anything that crashes, mis-displays, or returns wrong results is a bug worth reporting.