Result
This page has no server side at all. The table you paste is parsed by JavaScript inside your own browser, the chart is drawn on a canvas element on your machine, and the export file is assembled locally. Nothing is uploaded, stored or written to any log. You can disconnect from the network after the page has loaded and everything will still work — which is the simplest way to verify the claim yourself.
Facts and limits of this method
| Algorithm | Fisher–Yates shuffle — every possible ordering is equally likely |
|---|---|
| What changes | Only line order; the text of each line is untouched |
| Randomness source | Your browser's Math.random(), reseeded on every shuffle |
| Repeat runs | Click "Shuffle again" for a new random order from the same input |
| Empty lines | Treated as ordinary items and can end up anywhere, including first or last |
| Duplicates | Kept as-is; identical lines can still land next to each other by chance |
When it misleads you
- This shuffles line order only — it never edits, sorts or removes a line. If two lines are identical, the result still has two identical lines, just possibly in different positions.
- "Random" here means Math.random(), the browser's built-in pseudo-random generator. It's fine for picking a name from a list or randomizing a playlist, but it isn't cryptographically secure — don't use it for anything like lottery draws with money on the line.
- A true unbiased shuffle can, by pure chance, occasionally leave an item in the same spot it started in, or put the whole list back in close to its original order. That's expected randomness, not a bug.
- The shuffle recalculates from your current text box every time you click "Shuffle again" or edit a line — it always shuffles what's currently typed, not a cached earlier version.
How it is calculated
The text is split into lines, and the list of lines is copied so the original order in the box isn't touched until you decide to keep the result.
A Fisher–Yates shuffle then walks the copy from the last item to the second one, swapping each with a random earlier item pulled by Math.random() — this is the standard algorithm for a shuffle where every permutation is equally likely.
Unlike naive approaches (like sorting by a random key), Fisher–Yates has no bias toward any particular ordering, which matters if you're using this for anything resembling a fair draw.
"Shuffle again" re-runs the exact same algorithm on the current input without needing you to touch the text box, so you can keep rerolling until you like the order.
Questions and answers
Is the shuffle truly random?
It uses the Fisher–Yates algorithm, which is mathematically unbiased — every possible order is equally likely. The underlying randomness comes from your browser's Math.random(), which is good enough for everyday use but not for high-stakes draws.
Can I get the same shuffle twice?
Not intentionally — every click of "Shuffle again" draws fresh randomness. If you need a reproducible order, this isn't the right tool.
Does it remove duplicate or blank lines?
No, it only reorders. Use the Duplicate Line Remover first if you want duplicates gone before shuffling.
What if I only have one line?
A single line has nowhere else to go, so the result is identical to the input — that's still a correctly "shuffled" list of one.
Is my list uploaded anywhere?
No. The shuffle runs entirely in your browser; nothing is sent to a server.